InterleavedYUVGenerator Class Reference#include <InterleavedYUVGenerator.h>
Inheritance diagram for InterleavedYUVGenerator:
[legend]List of all members.
Detailed Description
Generates FilterBankEvents containing raw camera images with interleaved pixels (YVUYVUYVU... instead of YYY...UUU...VVV...).
- Note:
- That's not a typo - the byte ordering is YVU, not YUV
Sorry about the misleading name... This takes filter banks containing YUV information, however. The main reason for this class is to interleave the image in order to pass it to the jpeg compression routines. JPEG expect YCbCr, which corresponds to YVU order.
Also, I should point out that mathematically, V!=Cb, and U!=Cr, but they do carry the same information. It's just a matter of scaling and offset. These comments use the "Y", "U", and "V" labels loosely.
There's only one channel, which holds the interleaved data. The increment is set to 3, but if you want to access each component in order, just use 1 instead (as you would expect hopefully, since that's the whole point of this class)
The generated events use 0 for their event source IDs. The row skip is always 0, and the row stride is always width*3. But it would be better to use the proper accessor functions to be more general.
should receive FilterBankEvents from any standard format FilterBankGenerator (like RawCameraGenerator)
- See also:
- FilterBankGenerator for information on serialization format
Definition at line 35 of file InterleavedYUVGenerator.h.
|
Public Member Functions |
| InterleavedYUVGenerator (unsigned int mysid, FilterBankGenerator *fbg, EventBase::EventTypeID_t tid) |
| constructor
|
| InterleavedYUVGenerator (unsigned int mysid, unsigned int syc, unsigned int suc, unsigned int svc, FilterBankGenerator *fbg, EventBase::EventTypeID_t tid) |
| constructor, you can pass which channels to interleave
|
virtual | ~InterleavedYUVGenerator () |
| destructor
|
virtual void | processEvent (const EventBase &event) |
| should receive FilterBankEvents from any standard format FilterBankGenerator (like RawCameraGenerator)
|
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 void | freeCaches () |
| deletes storage of cached images and marks it invalid
|
virtual void | invalidateCaches () |
| marks all of the cached images as invalid (but doesn't free their memory)
|
Static Public Member Functions |
static std::string | getClassDescription () |
| Gives a short description of what this class of behaviors does... you should override this (but don't have to).
|
Static Public Attributes |
static const unsigned int | CHAN_YUV = 0 |
| so you can refer to the YUV channel symbolically.
|
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 stride parameter (to correspond to width*3 from FilterBankGenerator::setDimensions())
|
virtual void | destruct () |
| deletes the arrays
|
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) |
| 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())
|
Protected Attributes |
unsigned int | srcYChan |
| the channel of the source's Y channel
|
unsigned int | srcUChan |
| the channel of the source's U channel
|
unsigned int | srcVChan |
| the channel of the source's V channel
|
bool ** | isAllocated |
| flag for each image, set to true if the corresponding value in images will need to be freed, or false if it's a passthrough from the previous stage
|
Private Member Functions |
| InterleavedYUVGenerator (const InterleavedYUVGenerator &fbk) |
| don't call
|
const InterleavedYUVGenerator & | operator= (const InterleavedYUVGenerator &fbk) |
| don't call
|
Constructor & Destructor Documentation
virtual InterleavedYUVGenerator::~InterleavedYUVGenerator |
( |
|
) |
[inline, virtual] |
|
Member Function Documentation
void InterleavedYUVGenerator::calcImage |
( |
unsigned int |
layer, |
|
|
unsigned int |
chan |
|
) |
[protected, virtual] |
|
unsigned char * InterleavedYUVGenerator::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 152 of file InterleavedYUVGenerator.cc.
Referenced by LoadBuffer(). |
void InterleavedYUVGenerator::destruct |
( |
|
) |
[protected, virtual] |
|
void InterleavedYUVGenerator::freeCaches |
( |
|
) |
[virtual] |
|
|
deletes storage of cached images and marks it invalid
you should override this if the images cache pointer isn't actually an array of bytes... Don't forget to call it in your subclass's destructor or your version won't get called...
Reimplemented from FilterBankGenerator.
Definition at line 134 of file InterleavedYUVGenerator.cc.
Referenced by ~InterleavedYUVGenerator(). |
unsigned int InterleavedYUVGenerator::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 40 of file InterleavedYUVGenerator.cc. |
static std::string InterleavedYUVGenerator::getClassDescription |
( |
|
) |
[inline, static] |
|
|
Gives a short description of what this class of behaviors does... you should override this (but don't have to).
If you do override this, also consider overriding getDescription() to return it
Reimplemented from BehaviorBase.
Definition at line 50 of file InterleavedYUVGenerator.h. |
void InterleavedYUVGenerator::invalidateCaches |
( |
|
) |
[virtual] |
|
unsigned int InterleavedYUVGenerator::LoadBuffer |
( |
const char |
buf[], |
|
|
unsigned int |
len |
|
) |
[virtual] |
|
void InterleavedYUVGenerator::processEvent |
( |
const EventBase & |
event |
) |
[virtual] |
|
unsigned int InterleavedYUVGenerator::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 76 of file InterleavedYUVGenerator.cc. |
void InterleavedYUVGenerator::setDimensions |
( |
|
) |
[protected, virtual] |
|
void InterleavedYUVGenerator::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 120 of file InterleavedYUVGenerator.cc.
Referenced by InterleavedYUVGenerator(). |
Member Data Documentation
The documentation for this class was generated from the following files:
|