Tekkotsu Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

SegCam Class Reference

Forwards segmented images from camera over wireless. More...

#include <SegCam.h>

Inheritance diagram for SegCam:

Detailed Description

Forwards segmented images from camera over wireless.

The format used for serialization is basically defined by the subclass of FilterBankGenerator being used. I suggest looking at that classes's documentation to determine the format used. (Generally either SegmentedColorGenerator or RLEGenerator)

However, SegCam will add a few fields at the beginning of each packet to assist in processing the image stream.

I emphasize: beginning of each Vision packet, before the FilterBankGenerator header.

  • <string:"TekkotsuImage">
  • <Config::vision_config::encoding_t: Config::vision_config::ENCODE_SINGLE_CHANNEL> (always just sends a single channel)
  • <Config::vision_config::compression_t: Config::vision_config::COMPRESS_RLE> (This is misleading - may actually be uncompressed, but this signals it's a segmented color image)
  • <unsigned int: width> (this is the width of the largest channel - note different channels can be sent at different resolutions! Provides cheap "compression" of chromaticity channels)
  • <unsigned int: height> (similarly, height of largest channel)
  • <unsigned int: timestamp> (time image was taken, milliseconds since boot)
  • <unsigned int: framenumber> (incremented for each frame, so we can tell if/when we drop one)

Alternatively, SegCam may send a "Close Connection" packet when the server is shutting down. This is to help UDP connections, which otherwise wouldn't realize that they need to start trying to reconnect.

  • <string:"CloseConnection">

This is exactly the same protocol that is followed by the RawCam behavior as well - the same code can parse either stream.

However, one odd bit - since the RLEGenerator doesn't save the color information itself, SegCam will do it instead. So, if SegCam is using RLE compression, it will tack a footer at the end of the packet: (from SegmentedColorGenerator::encodeColors())

  • <unsigned int: num_cols> (number of different colors available)
  • for each of num_col:
    • <char: red> red color to use for display of this index
    • <char: green> green color to use for display of this index
    • <char: blue> blue color to use for display of this index

You can tell whether to expect the color footer by the creator string that follows the SegCam header. (The compression field listed is considering segmented color itself a type of compression, whether or not it's RLE encoded, so you can't use that to tell whether the data is RLE encoded until you get to the data section.)

This is a binary protocol -- the fields listed indicate binary values in the AIBO's byte order (little endian). Strings are encoded using the LoadSave::encode(char*,unsigned int, unsigned int) method.

Definition at line 58 of file SegCam.h.

List of all members.

Public Member Functions

 SegCam ()
 constructor
 ~SegCam ()
 destructor
virtual void doStart ()
 Delegate function for subclasses to be notified when the behavior starts up.
virtual void doStop ()
 Delegate function for subclasses to be notified when the behavior starts up.
virtual void doEvent ()
 Delegate function for event processing, the event itself is pointed to (only for the duration of the doEvent() call!) by event.
virtual std::string getDescription () const
 Gives a short description of what this particular instantiation does (in case a more specific description is needed on an individual basis).

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 TCP_WIRELESS_BUFFER_SIZE = 301*1024
 300KB for use up to 640x480 pixels / 8 min expected runs * 5 bytes per run + some padding
static const unsigned int UDP_WIRELESS_BUFFER_SIZE = 64*1024
 64KB is the max udp packet size

Protected Member Functions

void closeServer ()
 tear down the server socket (visRLE)
void setupServer ()
 setup the server socket (visRLE )
bool openPacket (FilterBankGenerator &fbkgen, unsigned int time, unsigned int layer)
 opens a new packet, writes header info; returns true if open, false if otherwise open (check cur==NULL for error)
bool writeRLE (const FilterBankEvent &fbke)
 writes a color image
bool writeSeg (const FilterBankEvent &fbke)
 writes a color image
void closePacket ()
 closes and sends a packet, does nothing if no packet open
bool sendCloseConnectionPacket ()
 sends a packet signaling the server is closing the connection (good for UDP connections)

Static Protected Member Functions

static int networkCallback (char *buf, int bytes)
 function for network data to be sent to -- forwards to theOne's receiveData()

Protected Attributes

SocketvisRLE
 socket to send image stream over
char * packet
 buffer being filled out to be sent
char * cur
 current location in packet
unsigned int avail
 number of bytes remaining in packet
unsigned int max_buf
 the buffer size requested from Wireless when the socket was allocated
unsigned int lastProcessedTime
 the time that the last event was processed

Static Protected Attributes

static SegCamtheOne = NULL

Private Member Functions

 SegCam (const SegCam &)
 don't call
SegCamoperator= (const SegCam &)
 don't call

Constructor & Destructor Documentation

SegCam::SegCam (  ) 

constructor

Definition at line 18 of file SegCam.cc.

SegCam::~SegCam (  ) 

destructor

Definition at line 64 of file SegCam.h.

SegCam::SegCam ( const SegCam  )  [private]

don't call


Member Function Documentation

void SegCam::closePacket (  )  [protected]

closes and sends a packet, does nothing if no packet open

Definition at line 197 of file SegCam.cc.

Referenced by doEvent(), writeRLE(), and writeSeg().

void SegCam::closeServer (  )  [protected]

tear down the server socket (visRLE)

Definition at line 91 of file SegCam.cc.

Referenced by doEvent(), and doStop().

void SegCam::doEvent (  )  [virtual]

Delegate function for event processing, the event itself is pointed to (only for the duration of the doEvent() call!) by event.

Default implementation watches for 'private' text message events (those forwarded by a BehaviorSwitchControl from ControllerGUI input) and will publically rebroadcast them. The idea is that your own processEvent gets first dibs, but if the behavior doesn't handle the text message, it will be handed off for others.

Reimplemented from CameraStreamBehavior.

Definition at line 41 of file SegCam.cc.

void SegCam::doStart (  )  [virtual]

Delegate function for subclasses to be notified when the behavior starts up.

Should be overridden by subclasses to subscribe to events, install motion commands, etc.

doStart() is basically a hook to allow subclasses to jump in and do some customization of behavior parameters while the behavior is starting. If you are writing a behavior class and do not expect further derivation, just override doStart() yourself. However, if you do expect further derivation of your class, consider using preStart() or postStart() instead, and leave doStart() for the 'leaf' classes.

Reimplemented from BehaviorBase.

Definition at line 26 of file SegCam.cc.

void SegCam::doStop (  )  [virtual]

Delegate function for subclasses to be notified when the behavior starts up.

May be overridden to cleanup when the behavior is shutting down. However events will automatically be unsubscribed, and by using addMotion(), motions will automatically be removed by stop(), so you may not need any cleanup.

Reimplemented from BehaviorBase.

Definition at line 34 of file SegCam.cc.

static std::string SegCam::getClassDescription (  )  [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 CameraStreamBehavior.

Definition at line 79 of file SegCam.h.

Referenced by getDescription().

virtual std::string SegCam::getDescription (  )  const [virtual]

Gives a short description of what this particular instantiation does (in case a more specific description is needed on an individual basis).

By default simply returns getName(), because any calls from a BehaviorBase function to getClassDescription() are going to call BehaviorBase::getClassDescription(), not ~YourSubClass~getClassDescription(), because static functions can't be virtual in C++ (doh!)

This means that getDescription called on a pointer to a BehaviorBase of unknown subtype would always return an empty string, which is pretty useless. So instead we return the name in this situation. If you want getDescription to return getClassDescription, you'll have to override it in your subclass to do so.

Reimplemented from CameraStreamBehavior.

Definition at line 84 of file SegCam.h.

static int SegCam::networkCallback ( char *  buf,
int  bytes 
) [static, protected]

function for network data to be sent to -- forwards to theOne's receiveData()

Definition at line 89 of file SegCam.h.

Referenced by setupServer().

bool SegCam::openPacket ( FilterBankGenerator fbkgen,
unsigned int  time,
unsigned int  layer 
) [protected]

opens a new packet, writes header info; returns true if open, false if otherwise open (check cur==NULL for error)

see the class documentation for SegCam for the protocol documentation

Definition at line 129 of file SegCam.cc.

Referenced by writeRLE(), and writeSeg().

SegCam& SegCam::operator= ( const SegCam  )  [private]

don't call

bool SegCam::sendCloseConnectionPacket (  )  [protected]

sends a packet signaling the server is closing the connection (good for UDP connections)

Definition at line 207 of file SegCam.cc.

Referenced by closeServer().

void SegCam::setupServer (  )  [protected]

setup the server socket (visRLE )

Definition at line 103 of file SegCam.cc.

Referenced by doEvent(), and doStart().

bool SegCam::writeRLE ( const FilterBankEvent fbke  )  [protected]

writes a color image

Definition at line 155 of file SegCam.cc.

Referenced by doEvent().

bool SegCam::writeSeg ( const FilterBankEvent fbke  )  [protected]

writes a color image

Definition at line 180 of file SegCam.cc.

Referenced by doEvent().


Member Data Documentation

unsigned int SegCam::avail [protected]

number of bytes remaining in packet

Definition at line 107 of file SegCam.h.

Referenced by closePacket(), openPacket(), writeRLE(), and writeSeg().

char* SegCam::cur [protected]

current location in packet

Definition at line 106 of file SegCam.h.

Referenced by closePacket(), doEvent(), openPacket(), writeRLE(), and writeSeg().

unsigned int SegCam::lastProcessedTime [protected]

the time that the last event was processed

Reimplemented from CameraStreamBehavior.

Definition at line 109 of file SegCam.h.

Referenced by closePacket(), and doEvent().

unsigned int SegCam::max_buf [protected]

the buffer size requested from Wireless when the socket was allocated

Definition at line 108 of file SegCam.h.

Referenced by openPacket(), and setupServer().

char* SegCam::packet [protected]

buffer being filled out to be sent

Definition at line 105 of file SegCam.h.

Referenced by closePacket(), doEvent(), and openPacket().

const unsigned int SegCam::TCP_WIRELESS_BUFFER_SIZE = 301*1024 [static]

300KB for use up to 640x480 pixels / 8 min expected runs * 5 bytes per run + some padding

Definition at line 69 of file SegCam.h.

Referenced by setupServer().

SegCam * SegCam::theOne = NULL [static, protected]

global instance of SegCam acting as server

Definition at line 87 of file SegCam.h.

Referenced by networkCallback(), SegCam(), and ~SegCam().

const unsigned int SegCam::UDP_WIRELESS_BUFFER_SIZE = 64*1024 [static]

64KB is the max udp packet size

Definition at line 71 of file SegCam.h.

Referenced by setupServer().

Socket* SegCam::visRLE [protected]

socket to send image stream over

Definition at line 104 of file SegCam.h.

Referenced by closePacket(), closeServer(), doEvent(), openPacket(), sendCloseConnectionPacket(), and setupServer().


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

Tekkotsu v5.1CVS
Generated Mon May 9 04:59:15 2016 by Doxygen 1.6.3