Homepage Demos Overview Downloads Tutorials Reference
Credits

JPEGGenerator Class Reference

#include <JPEGGenerator.h>

Inheritance diagram for JPEGGenerator:

Inheritance graph
[legend]
List of all members.

Detailed Description

Generates FilterBankEvents containing JPEG compressed images.

There's only one channel per resolution layer, which holds the compressed data. This is mostly intended for being sent over wireless, but if you know how JPEG works, you may be able to interpret the compressed data directly and glean useful information from it. After all, compression is all about throwing away unimportant details and storing the salient information.

The generated events use 0 for their event source IDs. The row skip and row stride are 0. (they don't really apply here)

This can either compress a greyscale image or an interleaved YUV image. If the source generator's type is not InterleavedYUVGenerator, it will assume greyscale. Call setSource() to override this.

The InterleavedYUVGenerator is separated from this because it wouldn't really make things much faster to combine the algorithms, and others might find the interleaved format handy for passing to other libraries which expect that format, such as what happened with libjpeg.

Todo:
possible speedup by using jpeg_write_raw_data

Definition at line 35 of file JPEGGenerator.h.

Public Types

enum  src_mode_t { SRC_AUTO, SRC_GRAYSCALE, SRC_COLOR }

Public Member Functions

 JPEGGenerator (EventBase::EventGeneratorID_t gid, unsigned int sid, unsigned int mysid)
 constructor
 JPEGGenerator (EventBase::EventGeneratorID_t gid, unsigned int sid, unsigned int mysid, src_mode_t sMode)
 constructor
virtual ~JPEGGenerator ()
 destructor
virtual void setSourceMode (src_mode_t mode)
 set srcMode and curMode as well if mode==SRC_AUTO
virtual src_mode_t getSourceMode () const
 returns srcMode
virtual src_mode_t getCurrentSourceFormat () const
 returns curMode
virtual void processEvent (const EventBase &event)
 should receive FilterBankEvents from a RawCameraGenerator (or a subclass thereof)
virtual unsigned int getBinSize () const
 if we don't already know bytesUsed, let's assume the size will be smaller than the original uncompressed. If we fail this assumption, probably better to fail anyway.
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 getQuality () const
 returns quality
virtual void setQuality (unsigned int q)
 sets quality; this will invalidate the cache if q does not equal current quality
virtual unsigned int getImageSize (unsigned int layer, unsigned int chan) const
 returns the number of bytes used for the image returned by getImage() - will return 0 if the image hasn't been calculated yet (so call it after getImage())

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 JPEG_HEADER_PAD = 500
 add a bit to the expected size in getBinSize just to leave a little extra room for small images

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 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
virtual void destruct ()
 deletes the arrays

Protected Attributes

src_mode_t srcMode
 how to interpret source channel of next filter bank event
src_mode_t curMode
 how to interpret getImage's current image
unsigned int ** bytesUsed
 number of bytes used per image to actually store data;
jpeg_compress_struct cinfo
 used to interface with libjpeg - holds compression parameters and state
jpeg_error_mgr jerr
 used to interface with libjpeg - gives us access to error information
unsigned int quality
 quality level to pass to libjpeg; -1U causes Config::vision_config::rawcam_compress_quality to be used

Private Member Functions

 JPEGGenerator (const JPEGGenerator &fbk)
 don't call
const JPEGGeneratoroperator= (const JPEGGenerator &fbk)
 don't call


Member Enumeration Documentation

enum JPEGGenerator::src_mode_t
 

Enumeration values:
SRC_AUTO  if src is not a InterleavedYUVGenerator, SRC_GREYSCALE, otherwise SRC_COLOR
SRC_GRAYSCALE 
SRC_COLOR 

Definition at line 38 of file JPEGGenerator.h.


Constructor & Destructor Documentation

JPEGGenerator::JPEGGenerator EventBase::EventGeneratorID_t  gid,
unsigned int  sid,
unsigned int  mysid
 

constructor

Definition at line 16 of file JPEGGenerator.cc.

JPEGGenerator::JPEGGenerator EventBase::EventGeneratorID_t  gid,
unsigned int  sid,
unsigned int  mysid,
src_mode_t  sMode
 

constructor

Definition at line 26 of file JPEGGenerator.cc.

JPEGGenerator::~JPEGGenerator  )  [virtual]
 

destructor

Definition at line 36 of file JPEGGenerator.cc.

JPEGGenerator::JPEGGenerator const JPEGGenerator fbk  )  [private]
 

don't call


Member Function Documentation

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

This function is taken pretty directly from the write_jpeg_mem() function from Sony's W3AIBO sample code.

I have adapted it for this object, and added the ability to process greyscale images as well as color.

Implements FilterBankGenerator.

Definition at line 168 of file JPEGGenerator.cc.

unsigned char * JPEGGenerator::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 157 of file JPEGGenerator.cc.

Referenced by LoadBuffer().

void JPEGGenerator::destruct  )  [protected, virtual]
 

deletes the arrays

Reimplemented from FilterBankGenerator.

Definition at line 231 of file JPEGGenerator.cc.

Referenced by ~JPEGGenerator().

unsigned int JPEGGenerator::getBinSize  )  const [virtual]
 

if we don't already know bytesUsed, let's assume the size will be smaller than the original uncompressed. If we fail this assumption, probably better to fail anyway.

Reimplemented from FilterBankGenerator.

Definition at line 62 of file JPEGGenerator.cc.

static std::string JPEGGenerator::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 59 of file JPEGGenerator.h.

virtual src_mode_t JPEGGenerator::getCurrentSourceFormat  )  const [inline, virtual]
 

returns curMode

Definition at line 57 of file JPEGGenerator.h.

Referenced by calcImage(), LoadBuffer(), SaveBuffer(), RawCamBehavior::writeColor(), and RawCamBehavior::writeSingleChannel().

virtual unsigned int JPEGGenerator::getImageSize unsigned int  layer,
unsigned int  chan
const [inline, virtual]
 

returns the number of bytes used for the image returned by getImage() - will return 0 if the image hasn't been calculated yet (so call it after getImage())

Definition at line 82 of file JPEGGenerator.h.

Referenced by CameraBehavior::processEvent().

virtual unsigned int JPEGGenerator::getQuality  )  const [inline, virtual]
 

returns quality

Definition at line 72 of file JPEGGenerator.h.

Referenced by CameraBehavior::processEvent().

virtual src_mode_t JPEGGenerator::getSourceMode  )  const [inline, virtual]
 

returns srcMode

Definition at line 55 of file JPEGGenerator.h.

Referenced by processEvent().

unsigned int JPEGGenerator::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 73 of file JPEGGenerator.cc.

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

don't call

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

should receive FilterBankEvents from a RawCameraGenerator (or a subclass thereof)

The const casts in this function are regretable but necessary since the corresponding OPEN-R functions require mutable arguments, even though they shouldn't be modifying the data

Reimplemented from FilterBankGenerator.

Definition at line 48 of file JPEGGenerator.cc.

unsigned int JPEGGenerator::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 109 of file JPEGGenerator.cc.

void JPEGGenerator::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 141 of file JPEGGenerator.cc.

virtual void JPEGGenerator::setQuality unsigned int  q  )  [inline, virtual]
 

sets quality; this will invalidate the cache if q does not equal current quality

Definition at line 74 of file JPEGGenerator.h.

Referenced by CameraBehavior::processEvent().

virtual void JPEGGenerator::setSourceMode src_mode_t  mode  )  [inline, virtual]
 

set srcMode and curMode as well if mode==SRC_AUTO

Definition at line 53 of file JPEGGenerator.h.


Member Data Documentation

unsigned int** JPEGGenerator::bytesUsed [protected]
 

number of bytes used per image to actually store data;

Definition at line 93 of file JPEGGenerator.h.

Referenced by calcImage(), destruct(), getBinSize(), getImageSize(), LoadBuffer(), SaveBuffer(), and setNumImages().

struct jpeg_compress_struct JPEGGenerator::cinfo [mutable, protected]
 

used to interface with libjpeg - holds compression parameters and state

Definition at line 95 of file JPEGGenerator.h.

Referenced by calcImage(), JPEGGenerator(), and ~JPEGGenerator().

src_mode_t JPEGGenerator::curMode [protected]
 

how to interpret getImage's current image

Definition at line 91 of file JPEGGenerator.h.

Referenced by getCurrentSourceFormat(), processEvent(), and setSourceMode().

struct jpeg_error_mgr JPEGGenerator::jerr [mutable, protected]
 

used to interface with libjpeg - gives us access to error information

Definition at line 96 of file JPEGGenerator.h.

Referenced by JPEGGenerator().

const unsigned int JPEGGenerator::JPEG_HEADER_PAD = 500 [static]
 

add a bit to the expected size in getBinSize just to leave a little extra room for small images

Definition at line 37 of file JPEGGenerator.h.

Referenced by calcImage(), createImageCache(), and getBinSize().

unsigned int JPEGGenerator::quality [protected]
 

quality level to pass to libjpeg; -1U causes Config::vision_config::rawcam_compress_quality to be used

Definition at line 98 of file JPEGGenerator.h.

Referenced by calcImage(), getQuality(), and setQuality().

src_mode_t JPEGGenerator::srcMode [protected]
 

how to interpret source channel of next filter bank event

Definition at line 90 of file JPEGGenerator.h.

Referenced by getSourceMode(), and setSourceMode().


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

Tekkotsu v2.2.2
Generated Tue Jan 4 15:45:26 2005 by Doxygen 1.4.0