RawCameraGenerator Class Reference#include <RawCameraGenerator.h>
Inheritance diagram for RawCameraGenerator:
[legend]List of all members.
Detailed Description
Generates FilterBankEvents containing raw camera images directly from the system (doesn't make a copy).
Definition at line 11 of file RawCameraGenerator.h.
|
Public Types |
enum | channel_id_t {
CHAN_Y,
CHAN_U,
CHAN_V,
CHAN_Y_DY,
CHAN_Y_DX,
CHAN_Y_DXDY,
NUM_CHANNELS
} |
| holds id values for specifying image channel/bands More...
|
Public Member Functions |
| RawCameraGenerator (unsigned int numRawLayers, unsigned int numCalcLayers, EventBase::EventGeneratorID_t gid, unsigned int sid, unsigned int mysid) |
| constructor, numRawLayers is the number of real layers passed from the system, numCalcLayers is the total number of layers to make available
|
virtual | ~RawCameraGenerator () |
| destructor
|
virtual void | processEvent (const EventBase &event) |
| called with system's image info
|
virtual void | freeCaches () |
| the memory for all layers except the double layer was allocated by system, so we just set them to NULL before calling FilterBankGenerator::freeCaches() so it won't try to delete them
|
virtual unsigned int | getBinSize () const |
| calculates space needed to save - if you can't precisely add up the size, overestimate and things will still work.
|
virtual unsigned int | LoadBuffer (const char buf[], unsigned int len) |
virtual unsigned int | SaveBuffer (char buf[], unsigned int len) const |
| Save to a given buffer.
|
virtual unsigned int | SaveFileStream (FILE *f) const |
| overrridden to allow saving direct to file without an extra buffer copy
|
Static Public Member Functions |
std::string | getClassDescription () |
| Gives a short description of what this class of behaviors does... you should override this (but don't have to).
|
Protected Member Functions |
virtual void | setNumImages (unsigned int nLayers, unsigned int nChannels) |
| resizes the filter bank information storage area, you should override this to do your setup and call it from your constructor
|
virtual void | setDimensions () |
| resets the width, height, skip and stride values
|
virtual unsigned char * | createImageCache (unsigned int layer, unsigned int chan) const |
| create new image data storage area for the cache - this called by getImage() only when the corresponding entry in images is NULL
|
virtual void | calcImage (unsigned int layer, unsigned int chan) const |
| should calculate new image data, called by getImage() only when imageValids indicates the image being requested is dirty (and only after getImage() has already called createImageCache())
|
virtual void | destruct () |
| deletes the arrays
|
void | upsampleImage (channel_id_t chan) const |
| Creates a double resolution version of a channel, doesn't do any smoothing.
|
void | reconstructImage () const |
| Creates a double resolution Y-channel from the Y and Y gradient channels.
|
Static Protected Member Functions |
unsigned int | mapChannelID (channel_id_t chan) |
| returns the value to pass to OPENR functions corresponding to the desired channel_id_t.
|
unsigned char | clipRange (int val) |
| helper functions for reconstructImage() - see documentation for that function
|
Protected Attributes |
unsigned char | dblRes [NUM_CHANNELS][416][320] |
| ohh, this is so yucky. But we need to get around heap allocation bugs with large regions in Aperios :(
|
unsigned int | numRealLayers |
| the number of "real" layers being sent from the system
|
unsigned char ** | layers |
| points to the image data supplied by the system, one per layer (all channels are interleaved by row)
|
const OFbkImageInfo ** | imageInfos |
| image info provided by the system
|
Private Member Functions |
| RawCameraGenerator (const RawCameraGenerator &fbk) |
| don't call
|
const RawCameraGenerator & | operator= (const RawCameraGenerator &fbk) |
| don't call
|
Member Enumeration Documentation
|
holds id values for specifying image channel/bands
- Enumeration values:
-
CHAN_Y |
Y (intensity) channel. |
CHAN_U |
Cr (approx. pink,red,yellow) channel. |
CHAN_V |
Cb (approx. blue,green,yellow) channel. |
CHAN_Y_DY |
vertical derivative of Y channel (aka LH) |
CHAN_Y_DX |
horizontal derivative of Y channel (aka HL) |
CHAN_Y_DXDY |
vert. & horiz. derivatives of Y channel (aka HH) |
NUM_CHANNELS |
number of channels per resolution layer |
Definition at line 41 of file RawCameraGenerator.h. |
Constructor & Destructor Documentation
RawCameraGenerator::RawCameraGenerator |
( |
unsigned int |
numRawLayers, |
|
|
unsigned int |
numCalcLayers, |
|
|
EventBase::EventGeneratorID_t |
gid, |
|
|
unsigned int |
sid, |
|
|
unsigned int |
mysid |
|
) |
|
|
|
constructor, numRawLayers is the number of real layers passed from the system, numCalcLayers is the total number of layers to make available
The extra calculated layers are simply created by giving larger increments, they reference the same data (no computational cost, marginal memory costs... it's just nice to have more layers in the image pyramid.
However you'll have to write your code to use the getIncrement() value properly if you want it to work. Otherwise, you could write a de-interlace generator which will do the resampling.
The top most layer (largest index) is a double-scale image. For the Y-channel, it is reconstructed from the 4 Y channels. For the other channels, it just does a fast scaling (but these operations do cost, so use the top layer conservatively.
- See also:
- FilterBankGenerator for information on serialization format
Definition at line 14 of file RawCameraGenerator.cc. |
Member Function Documentation
void RawCameraGenerator::calcImage |
( |
unsigned int |
layer, |
|
|
unsigned int |
chan |
|
) |
const [protected, virtual] |
|
unsigned char RawCameraGenerator::clipRange |
( |
int |
val |
) |
[inline, static, protected] |
|
unsigned char * RawCameraGenerator::createImageCache |
( |
unsigned int |
layer, |
|
|
unsigned int |
chan |
|
) |
const [protected, virtual] |
|
|
create new image data storage area for the cache - this called by getImage() only when the corresponding entry in images is NULL
You should return the pointer you want stored in images to be returned by any calls to getFirstRow. Interpretation of the data it points to is dependant on the the generator which creates it
Implements FilterBankGenerator.
Definition at line 239 of file RawCameraGenerator.cc.
Referenced by LoadBuffer(). |
void RawCameraGenerator::destruct |
( |
|
) |
[protected, virtual] |
|
void RawCameraGenerator::freeCaches |
( |
|
) |
[virtual] |
|
unsigned int RawCameraGenerator::getBinSize |
( |
|
) |
const [virtual] |
|
|
calculates space needed to save - if you can't precisely add up the size, overestimate and things will still work.
- Returns:
- number of bytes read/written, 0 if error (or empty)
Reimplemented from FilterBankGenerator.
Definition at line 64 of file RawCameraGenerator.cc. |
std::string RawCameraGenerator::getClassDescription |
( |
|
) |
[inline, static] |
|
|
Gives a short description of what this class of behaviors does... you should override this (but don't have to).
Reimplemented from BehaviorBase.
Definition at line 38 of file RawCameraGenerator.h. |
unsigned int RawCameraGenerator::LoadBuffer |
( |
const char |
buf[], |
|
|
unsigned int |
len |
|
) |
[virtual] |
|
unsigned int RawCameraGenerator::mapChannelID |
( |
channel_id_t |
chan |
) |
[inline, static, protected] |
|
void RawCameraGenerator::processEvent |
( |
const EventBase & |
event |
) |
[virtual] |
|
|
called with system's image info
The const casts in this function are regretable but necessary since the OPEN-R OFbkImage constructor requires mutable arguments, even though it shouldn't be modifying the data
Reimplemented from FilterBankGenerator.
Definition at line 25 of file RawCameraGenerator.cc. |
void RawCameraGenerator::reconstructImage |
( |
|
) |
const [protected] |
|
|
Creates a double resolution Y-channel from the Y and Y gradient channels.
This function is lifted from Sony's ImageObserver sample code. Here's Sony's original license for the file (ImageObserver.cc) that contained this function:
Copyright 2002,2003 Sony Corporation
Permission to use, copy, modify, and redistribute this software for
non-commercial use is hereby granted.
This software is provided "as is" without warranty of any kind,
either expressed or implied, including but not limited to the
implied warranties of fitness for a particular purpose.
Definition at line 374 of file RawCameraGenerator.cc.
Referenced by calcImage(). |
unsigned int RawCameraGenerator::SaveBuffer |
( |
char |
buf[], |
|
|
unsigned int |
len |
|
) |
const [virtual] |
|
|
Save to a given buffer.
- Parameters:
-
| buf | pointer to the memory where you should begin writing |
| len | length of buf available. (this isn't all yours, constrain yourself to what you returned in getBinSize() ) |
- Returns:
- the number of bytes actually used
Reimplemented from FilterBankGenerator.
Definition at line 100 of file RawCameraGenerator.cc. |
unsigned int RawCameraGenerator::SaveFileStream |
( |
FILE * |
f |
) |
const [virtual] |
|
void RawCameraGenerator::setDimensions |
( |
|
) |
[protected, virtual] |
|
void RawCameraGenerator::setNumImages |
( |
unsigned int |
nLayers, |
|
|
unsigned int |
nChannels |
|
) |
[protected, virtual] |
|
|
resizes the filter bank information storage area, you should override this to do your setup and call it from your constructor
In general, it isn't expected that FilterBankGenerator's should necessarily be dynamically resizeable (although it would be nice), which is why this isn't public. If yours is, just add some pubic accessor functions which call this. In general, the included subclasses should be able to handle being resized, but there's no reason to do so since the system won't be changing its available resolutions at run time.
The default implementation is a no-op if(numLayers==nLayers && numChannels==nChannels)
Reimplemented from FilterBankGenerator.
Definition at line 223 of file RawCameraGenerator.cc.
Referenced by RawCameraGenerator(). |
void RawCameraGenerator::upsampleImage |
( |
channel_id_t |
chan |
) |
const [protected] |
|
Member Data Documentation
|
ohh, this is so yucky. But we need to get around heap allocation bugs with large regions in Aperios :(
So we store the double size images statically within the class. What a waste of memory since we're probably not using these very much, and they are rather large... :(
The 2.0 release had the proper dynamic allocation implementation, but has been replaced in 2.0.1 with this static allocation so it won't crash.
Of course, if the memory allocation bug is never fixed, and camera sizes increase in later models, this will have to be modified.
Definition at line 78 of file RawCameraGenerator.h.
Referenced by createImageCache(). |
The documentation for this class was generated from the following files:
|