00001 #ifndef _REC_ROBOTINO_IMAGESENDER_IMAGEMEMORY_H_
00002 #define _REC_ROBOTINO_IMAGESENDER_IMAGEMEMORY_H_
00003
00004 #include <string>
00005
00006 #define REC_ROBOTINO_IMAGESENDER_IMAGEMEMORY_RAWIMAGEDATASIZE 2359296 //1024*768*3
00007 #define REC_ROBOTINO_IMAGESENDER_IMAGEMEMORY_JPGDATASIZE 500000
00008 #define REC_ROBOTINO_IMAGESENDER_IMAGEMEMORY_KEY( serverPort ) QString("REC_ROBOTINO_IMAGESENDER_%1").arg( serverPort )
00009
00010 namespace rec
00011 {
00012 namespace robotino
00013 {
00014 namespace imagesender
00015 {
00016 class ImageMemory
00017 {
00018 public:
00019 ImageMemory()
00020 {
00021 }
00022
00023 ImageMemory( const ImageMemory& other )
00024 {
00025 copy( other );
00026 }
00027
00028 ImageMemory& operator=( const ImageMemory& other )
00029 {
00030 copy( other );
00031 return *this;
00032 }
00033
00034 void copy( const ImageMemory& other )
00035 {
00036 width = other.width;
00037 height = other.height;
00038 numChannels = other.numChannels;
00039 bitsPerChannel = other.bitsPerChannel;
00040 step = other.step;
00041 sequenceNumber = other.sequenceNumber;
00042 jpgSequenceNumber = other.jpgSequenceNumber;
00043
00044 dataSize = other.dataSize;
00045 memcpy( data, other.data, dataSize );
00046
00047 jpgDataSize = other.jpgDataSize;
00048 memcpy( jpgData, other.jpgData, jpgDataSize );
00049
00050 numJpgRequests = other.numJpgRequests;
00051 numRawRequests = other.numRawRequests;
00052 }
00053
00054 void reset()
00055 {
00056 width = 0;
00057 height = 0;
00058 numChannels = 0;
00059 bitsPerChannel = 0;
00060 step = 0;
00061 sequenceNumber = 0;
00062 jpgSequenceNumber = 0;
00063
00064 dataSize = 0;
00065 memset( data, 0, REC_ROBOTINO_IMAGESENDER_IMAGEMEMORY_RAWIMAGEDATASIZE );
00066
00067 jpgDataSize = 0;
00068 memset( jpgData, 0, REC_ROBOTINO_IMAGESENDER_IMAGEMEMORY_JPGDATASIZE );
00069
00070 numJpgRequests = 0;
00071 numRawRequests = 0;
00072 }
00073
00074 void registerJpgRequest( int num = 1 )
00075 {
00076 numJpgRequests += num;
00077 }
00078
00079 void unregisterJpgRequest( int num = 1 )
00080 {
00081 if( num > numJpgRequests )
00082 {
00083 numJpgRequests = 0;
00084 }
00085 else
00086 {
00087 numJpgRequests -= num;
00088 }
00089 }
00090
00091 void registerRawRequest( int num = 1 )
00092 {
00093 numRawRequests += num;
00094 }
00095
00096 void unregisterRawRequest( int num = 1 )
00097 {
00098 if( num > numRawRequests )
00099 {
00100 numRawRequests = 0;
00101 }
00102 else
00103 {
00104 numRawRequests -= num;
00105 }
00106 }
00107
00108 unsigned int width;
00109 unsigned int height;
00110 unsigned int numChannels;
00111 unsigned int bitsPerChannel;
00112 unsigned int step;
00113 unsigned int sequenceNumber;
00114 unsigned int jpgSequenceNumber;
00115
00116 unsigned int dataSize;
00117 unsigned char data[REC_ROBOTINO_IMAGESENDER_IMAGEMEMORY_RAWIMAGEDATASIZE];
00118
00119 unsigned int jpgDataSize;
00120 unsigned char jpgData[REC_ROBOTINO_IMAGESENDER_IMAGEMEMORY_JPGDATASIZE];
00121
00122 int numJpgRequests;
00123 int numRawRequests;
00124 };
00125 }
00126 }
00127 }
00128
00129 #endif //_REC_ROBOTINO_IMAGESENDER_IMAGEMEMORY_H_