From: Toby C. <th...@us...> - 2008-02-18 11:42:46
|
Update of /cvsroot/playerstage/code/player/server/drivers/base In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12245/server/drivers/base Modified Files: imagebase.cc imagebase.h Log Message: applied [ 1895643 ] CVS: big simpleshape patch [ 1895540 ] CVS: imagebase cannot handle compressed camera images Index: imagebase.h =================================================================== RCS file: /cvsroot/playerstage/code/player/server/drivers/base/imagebase.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** imagebase.h 23 Aug 2007 19:58:42 -0000 1.2 --- imagebase.h 18 Feb 2008 19:42:49 -0000 1.3 *************** *** 66,70 **** ImageBase(ConfigFile *cf, int section, bool overwrite_cmds, size_t queue_maxlen, int interf); ImageBase(ConfigFile *cf, int section, bool overwrite_cmds = true, size_t queue_maxlen = PLAYER_MSGQUEUE_DEFAULT_MAXLEN); ! virtual ~ImageBase() {}; // Setup/shutdown routines. --- 66,74 ---- ImageBase(ConfigFile *cf, int section, bool overwrite_cmds, size_t queue_maxlen, int interf); ImageBase(ConfigFile *cf, int section, bool overwrite_cmds = true, size_t queue_maxlen = PLAYER_MSGQUEUE_DEFAULT_MAXLEN); ! virtual ~ImageBase() ! { ! if (stored_data.image) delete [](stored_data.image); ! PLAYER_WARN("image deleted from the memory"); ! } // Setup/shutdown routines. *************** *** 75,78 **** --- 79,86 ---- int ProcessMessage (QueuePointer &resp_queue, player_msghdr * hdr, void * data); + private: + ImageBase(); // no default constructor + ImageBase(const ImageBase &); // no copy constructor + protected: virtual int ProcessFrame() = 0; *************** *** 86,89 **** bool HaveData; }; - - --- 94,95 ---- Index: imagebase.cc =================================================================== RCS file: /cvsroot/playerstage/code/player/server/drivers/base/imagebase.cc,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** imagebase.cc 1 Nov 2007 22:16:17 -0000 1.3 --- imagebase.cc 18 Feb 2008 19:42:49 -0000 1.4 *************** *** 28,33 **** --- 28,39 ---- /////////////////////////////////////////////////////////////////////////// + #include <stddef.h> + #include <string.h> + #include <assert.h> #include "imagebase.h" #include <libplayerxdr/playerxdr.h> + #if HAVE_JPEGLIB_H + #include <libplayerjpeg/playerjpeg.h> + #endif //////////////////////////////////////////////////////////////////////////////// *************** *** 38,42 **** { memset(&this->camera_addr, 0, sizeof(player_devaddr_t)); ! HaveData = false; --- 44,49 ---- { memset(&this->camera_addr, 0, sizeof(player_devaddr_t)); ! stored_data.image = NULL; ! stored_data.image_count = 0; HaveData = false; *************** *** 56,60 **** { memset(&this->camera_addr, 0, sizeof(player_devaddr_t)); ! HaveData = false; --- 63,68 ---- { memset(&this->camera_addr, 0, sizeof(player_devaddr_t)); ! stored_data.image = NULL; ! stored_data.image_count = 0; HaveData = false; *************** *** 96,100 **** } - //////////////////////////////////////////////////////////////////////////////// // Shutdown the device (called by server thread). --- 104,107 ---- *************** *** 112,118 **** int ImageBase::ProcessMessage (QueuePointer &resp_queue, player_msghdr * hdr, void * data) { assert(hdr); ! assert(data); ! if(Message::MatchMessage (hdr, PLAYER_MSGTYPE_DATA, PLAYER_CAMERA_DATA_STATE, camera_addr)) { --- 119,128 ---- int ImageBase::ProcessMessage (QueuePointer &resp_queue, player_msghdr * hdr, void * data) { + uint32_t new_image_count; + player_camera_data_t * compdata = reinterpret_cast<player_camera_data_t *>(data); + assert(hdr); ! assert(compdata); ! if(Message::MatchMessage (hdr, PLAYER_MSGTYPE_DATA, PLAYER_CAMERA_DATA_STATE, camera_addr)) { *************** *** 120,125 **** if (!HaveData) { ! player_camera_data_t_copy(&stored_data, (player_camera_data_t *)data); ! HaveData = true; } Unlock(); --- 130,188 ---- if (!HaveData) { ! this->stored_data.width = (compdata->width); ! this->stored_data.height = (compdata->height); ! this->stored_data.fdiv = (compdata->fdiv); ! #if HAVE_JPEGLIB_H ! if (compdata->compression != PLAYER_CAMERA_COMPRESS_JPEG) ! { ! #endif ! this->stored_data.compression = (compdata->compression); ! this->stored_data.format = (compdata->format); ! this->stored_data.bpp = (compdata->bpp); ! if ((this->stored_data.image_count) != (compdata->image_count)) ! { ! this->stored_data.image_count = (compdata->image_count); ! if (this->stored_data.image) delete [](this->stored_data.image); ! this->stored_data.image = NULL; ! if (this->stored_data.image_count) ! { ! this->stored_data.image = new uint8_t[this->stored_data.image_count]; ! assert(this->stored_data.image); ! } ! } ! if (this->stored_data.image_count) ! { ! assert(this->stored_data.image); ! memcpy(this->stored_data.image, compdata->image, this->stored_data.image_count); ! } ! #if HAVE_JPEGLIB_H ! } else ! { ! this->stored_data.compression = PLAYER_CAMERA_COMPRESS_RAW; ! this->stored_data.format = PLAYER_CAMERA_FORMAT_RGB888; ! this->stored_data.bpp = 24; ! new_image_count = (this->stored_data.width) * (this->stored_data.height) * 3; ! if ((this->stored_data.image_count) != new_image_count) ! { ! this->stored_data.image_count = new_image_count; ! if (this->stored_data.image) delete [](this->stored_data.image); ! this->stored_data.image = NULL; ! if (this->stored_data.image_count) ! { ! this->stored_data.image = new uint8_t[this->stored_data.image_count]; ! assert(this->stored_data.image); ! } ! } ! if (this->stored_data.image_count) ! { ! assert(this->stored_data.image); ! jpeg_decompress(reinterpret_cast<unsigned char *>(this->stored_data.image), ! this->stored_data.image_count, ! reinterpret_cast<unsigned char *>(compdata->image), ! compdata->image_count); ! } ! } ! #endif ! HaveData = true; } Unlock(); |