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_