Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

InterleavedYUVGenerator Class Reference

#include <InterleavedYUVGenerator.h>

Inheritance diagram for InterleavedYUVGenerator:

Inheritance graph
[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 InterleavedYUVGeneratoroperator= (const InterleavedYUVGenerator &fbk)
 don't call


Constructor & Destructor Documentation

InterleavedYUVGenerator::InterleavedYUVGenerator unsigned int  mysid,
FilterBankGenerator fbg,
EventBase::EventTypeID_t  tid
 

constructor

Definition at line 9 of file InterleavedYUVGenerator.cc.

InterleavedYUVGenerator::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

Definition at line 19 of file InterleavedYUVGenerator.cc.

virtual InterleavedYUVGenerator::~InterleavedYUVGenerator  )  [inline, virtual]
 

destructor

Definition at line 43 of file InterleavedYUVGenerator.h.

InterleavedYUVGenerator::InterleavedYUVGenerator const InterleavedYUVGenerator fbk  )  [private]
 

don't call


Member Function Documentation

void InterleavedYUVGenerator::calcImage unsigned int  layer,
unsigned int  chan
[protected, virtual]
 

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())

This is where you'll want to put your user-specific code for calculating the image data

Implements FilterBankGenerator.

Definition at line 165 of file InterleavedYUVGenerator.cc.

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]
 

deletes the arrays

Reimplemented from FilterBankGenerator.

Definition at line 111 of file InterleavedYUVGenerator.cc.

Referenced by ~InterleavedYUVGenerator().

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]
 

marks all of the cached images as invalid (but doesn't free their memory)

You probably want to call this right before you send the FilterBankEvent

Reimplemented from FilterBankGenerator.

Definition at line 142 of file InterleavedYUVGenerator.cc.

unsigned int InterleavedYUVGenerator::LoadBuffer const char  buf[],
unsigned int  len
[virtual]
 

The LoadBuffer() functions of the included subclasses aren't tested, so don't assume they'll work without a little debugging...

Reimplemented from FilterBankGenerator.

Definition at line 48 of file InterleavedYUVGenerator.cc.

const InterleavedYUVGenerator& InterleavedYUVGenerator::operator= const InterleavedYUVGenerator fbk  )  [private]
 

don't call

void InterleavedYUVGenerator::processEvent const EventBase event  )  [virtual]
 

should receive FilterBankEvents from any standard format FilterBankGenerator (like RawCameraGenerator)

Reimplemented from FilterBankGenerator.

Definition at line 30 of file InterleavedYUVGenerator.cc.

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]
 

resets stride parameter (to correspond to width*3 from FilterBankGenerator::setDimensions())

Reimplemented from FilterBankGenerator.

Definition at line 104 of file InterleavedYUVGenerator.cc.

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

const unsigned int InterleavedYUVGenerator::CHAN_YUV = 0 [static]
 

so you can refer to the YUV channel symbolically.

Definition at line 48 of file InterleavedYUVGenerator.h.

Referenced by CameraBehavior::processEvent().

bool** InterleavedYUVGenerator::isAllocated [protected]
 

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

Definition at line 75 of file InterleavedYUVGenerator.h.

Referenced by createImageCache(), destruct(), freeCaches(), invalidateCaches(), and setNumImages().

unsigned int InterleavedYUVGenerator::srcUChan [protected]
 

the channel of the source's U channel

Definition at line 72 of file InterleavedYUVGenerator.h.

Referenced by calcImage().

unsigned int InterleavedYUVGenerator::srcVChan [protected]
 

the channel of the source's V channel

Definition at line 73 of file InterleavedYUVGenerator.h.

Referenced by calcImage().

unsigned int InterleavedYUVGenerator::srcYChan [protected]
 

the channel of the source's Y channel

Definition at line 71 of file InterleavedYUVGenerator.h.

Referenced by calcImage(), and createImageCache().


The documentation for this class was generated from the following files:

Tekkotsu v2.4.1
Generated Tue Aug 16 16:35:03 2005 by Doxygen 1.4.4