Update of /cvsroot/playerstage/code/player/server/drivers/camera/compress
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29456/compress
Modified Files:
cameracompress.cc camerauncompress.cc
Log Message:
refactored camera compress drivers to remove unnecessary locking etc
Index: cameracompress.cc
===================================================================
RCS file:
/cvsroot/playerstage/code/player/server/drivers/camera/compress/cameracompress.cc,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** cameracompress.cc 10 Feb 2007 17:46:18 -0000 1.14
--- cameracompress.cc 31 Jul 2007 03:53:40 -0000 1.15
***************
*** 108,114 ****
private: virtual void Main();
! //private: int UpdateCamera();
! private: void WriteData();
! private: void SaveFrame(const char *filename);
// Input camera device
--- 108,112 ----
private: virtual void Main();
! private: void ProcessImage(player_camera_data_t & rawdata);
// Input camera device
***************
*** 120,127 ****
double camera_time;
bool camera_subscribed;
- bool NewCamData;
! // Acquired camera data
! player_camera_data_t camera_data;
char converted[PLAYER_CAMERA_IMAGE_SIZE];
--- 118,123 ----
double camera_time;
bool camera_subscribed;
! // scratch for converted data camera data
char converted[PLAYER_CAMERA_IMAGE_SIZE];
***************
*** 166,172 ****
this->quality = cf->ReadFloat(section, "image_quality", 0.8);
- // camera settings
- this->NewCamData = false;
-
return;
}
--- 162,165 ----
***************
*** 217,236 ****
if (Message::MatchMessage(hdr, PLAYER_MSGTYPE_DATA,
PLAYER_CAMERA_DATA_STATE, camera_id))
{
! assert(hdr->size >= sizeof(this->camera_data)-sizeof(camera_data.image));
! Lock();
player_camera_data_t * recv = reinterpret_cast<player_camera_data_t * >
(data);
! camera_data.width = recv->width;
! camera_data.height = recv->height;
! camera_data.bpp = recv->bpp;
! camera_data.format = recv->format;
! camera_data.fdiv = recv->fdiv;
! camera_data.compression = recv->compression;
! camera_data.image_count = recv->image_count;
! memcpy(camera_data.image, recv->image, recv->image_count);
! this->NewCamData=true;
! Unlock();
! if (this->camera_data.compression != PLAYER_CAMERA_COMPRESS_RAW)
PLAYER_WARN("compressing already compressed camera images (not good)");
!
return 0;
}
--- 210,221 ----
if (Message::MatchMessage(hdr, PLAYER_MSGTYPE_DATA,
PLAYER_CAMERA_DATA_STATE, camera_id))
{
! assert(hdr->size >= sizeof(player_camera_data_t));
player_camera_data_t * recv = reinterpret_cast<player_camera_data_t * >
(data);
! if (recv->compression != PLAYER_CAMERA_COMPRESS_RAW)
! {
PLAYER_WARN("compressing already compressed camera images (not good)");
! return -1;
! }
! ProcessImage(*recv);
return 0;
}
***************
*** 241,253 ****
void CameraCompress::Main()
{
- size_t size;
- char filename[256];
- char * ptr, * ptr1;
- int i, l;
-
while (true)
{
// Let the camera driver update this thread
- //this->camera->Wait();
InQueue->Wait();
--- 226,232 ----
***************
*** 255,345 ****
pthread_testcancel();
! ProcessMessages();
!
! // Get the latest camera data
! if (NewCamData)
! {
! switch (this->camera_data.bpp)
! {
! case 8:
! l = (this->camera_data.width) * (this->camera_data.height);
! ptr = this->converted; ptr1 = (char *)(this->camera_data.image);
! for (i = 0; i < l; i++)
! {
! ptr[0] = *ptr1;
! ptr[1] = *ptr1;
! ptr[2] = *ptr1;
! ptr += 3; ptr1++;
! }
! ptr = this->converted;
! break;
! case 24:
! ptr = (char *)(this->camera_data.image);
! break;
! case 32:
! l = (this->camera_data.width) * (this->camera_data.height);
! ptr = this->converted; ptr1 = (char *)(this->camera_data.image);
! for (i = 0; i < l; i++)
! {
! ptr[0] = ptr1[0];
! ptr[1] = ptr1[1];
! ptr[2] = ptr1[2];
! ptr += 3; ptr1 += 4;
! }
! ptr = this->converted;
! break;
! default:
! PLAYER_WARN("unsupported image depth (not good)");
! return;
! }
! this->data.image_count = jpeg_compress( (char*)this->data.image,
! ptr,
! this->camera_data.width,
! this->camera_data.height,
! PLAYER_CAMERA_IMAGE_SIZE,
! (int)(this->quality*100));
!
! if (this->save)
! {
! snprintf(filename, sizeof(filename),
"click-%04d.ppm",this->frameno++);
! FILE *fp = fopen(filename, "w+");
! fwrite (this->data.image, 1, this->data.image_count, fp);
! fclose(fp);
! }
!
! size = sizeof(this->data) - sizeof(this->data.image) +
this->data.image_count;
!
! this->data.width = (this->camera_data.width);
! this->data.height = (this->camera_data.height);
! this->data.bpp = 24;
! this->data.format = PLAYER_CAMERA_FORMAT_RGB888;
! this->data.compression = PLAYER_CAMERA_COMPRESS_JPEG;
! this->data.image_count = (this->data.image_count);
!
! Publish(device_addr, NULL, PLAYER_MSGTYPE_DATA,
PLAYER_CAMERA_DATA_STATE, (void*) &this->data, size, &this->camera_time);
! }
}
return;
}
! /*
! int CameraCompress::UpdateCamera()
{
size_t size;
! // Get the camera data.
! size = this->camera->GetData(this->camera_id,
! &this->camera_data,
! sizeof(this->camera_data), &this->camera_time);
!
! // Do some byte swapping
! this->camera_data.width = ntohs(this->camera_data.width);
! this->camera_data.height = ntohs(this->camera_data.height);
! this->camera_data.bpp = this->camera_data.bpp;
! this->camera_data.format = this->camera_data.format;
! this->camera_data.image_size = ntohl(this->camera_data.image_size);
! if (this->camera_data.compression != PLAYER_CAMERA_COMPRESS_RAW)
! PLAYER_WARN("compressing already compressed camera images (not good)");
! return 1;
! }*/
--- 234,309 ----
pthread_testcancel();
! ProcessMessages();
}
return;
}
!
! void CameraCompress::ProcessImage(player_camera_data_t & rawdata)
{
size_t size;
+ char filename[256];
+ char * ptr, * ptr1;
+ int i, l;
! switch (rawdata.bpp)
! {
! case 8:
! l = (rawdata.width) * (rawdata.height);
! ptr = this->converted;
! ptr1 = (char *)(rawdata.image);
! for (i = 0; i < l; i++)
! {
! ptr[0] = *ptr1;
! ptr[1] = *ptr1;
! ptr[2] = *ptr1;
! ptr += 3; ptr1++;
! }
! ptr = this->converted;
! break;
! case 24:
! ptr = (char *)(rawdata.image);
! break;
! case 32:
! l = (rawdata.width) * (rawdata.height);
! ptr = this->converted;
! ptr1 = (char *)(rawdata.image);
! for (i = 0; i < l; i++)
! {
! ptr[0] = ptr1[0];
! ptr[1] = ptr1[1];
! ptr[2] = ptr1[2];
! ptr += 3; ptr1 += 4;
! }
! ptr = this->converted;
! break;
! default:
! PLAYER_WARN("unsupported image depth (not good)");
! return;
! }
! this->data.image_count = jpeg_compress( (char*)this->data.image,
! ptr,
! rawdata.width,
! rawdata.height,
! PLAYER_CAMERA_IMAGE_SIZE,
! (int)(this->quality*100));
! if (this->save)
! {
! snprintf(filename, sizeof(filename), "click-%04d.ppm",this->frameno++);
! FILE *fp = fopen(filename, "w+");
! fwrite (this->data.image, 1, this->data.image_count, fp);
! fclose(fp);
! }
! size = sizeof(this->data) - sizeof(this->data.image) +
this->data.image_count;
!
! this->data.width = (rawdata.width);
! this->data.height = (rawdata.height);
! this->data.bpp = 24;
! this->data.format = PLAYER_CAMERA_FORMAT_RGB888;
! this->data.compression = PLAYER_CAMERA_COMPRESS_JPEG;
! this->data.image_count = (this->data.image_count);
!
! Publish(device_addr, NULL, PLAYER_MSGTYPE_DATA, PLAYER_CAMERA_DATA_STATE,
(void*) &this->data, size, &this->camera_time);
!
! }
Index: camerauncompress.cc
===================================================================
RCS file:
/cvsroot/playerstage/code/player/server/drivers/camera/compress/camerauncompress.cc,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** camerauncompress.cc 2 May 2006 10:26:28 -0000 1.1
--- camerauncompress.cc 31 Jul 2007 03:53:40 -0000 1.2
***************
*** 104,110 ****
private: virtual void Main();
! //private: int UpdateCamera();
! private: void WriteData();
! private: void SaveFrame(const char *filename);
// Input camera device
--- 104,108 ----
private: virtual void Main();
! private: void ProcessImage(player_camera_data_t & compdata);
// Input camera device
***************
*** 119,126 ****
// Acquired camera data
- player_camera_data_t camera_data;
char converted[PLAYER_CAMERA_IMAGE_SIZE];
! // Output (compressed) camera data
private: player_camera_data_t data;
--- 117,123 ----
// Acquired camera data
char converted[PLAYER_CAMERA_IMAGE_SIZE];
! // Output (uncompressed) camera data
private: player_camera_data_t data;
***************
*** 158,164 ****
this->save = cf->ReadInt(section,"save",0);
- // camera settings
- this->NewCamData = false;
-
return;
}
--- 155,158 ----
***************
*** 209,227 ****
if (Message::MatchMessage(hdr, PLAYER_MSGTYPE_DATA,
PLAYER_CAMERA_DATA_STATE, camera_id))
{
! assert(hdr->size >= sizeof(this->camera_data)-sizeof(camera_data.image));
! if (this->camera_data.compression != PLAYER_CAMERA_COMPRESS_JPEG)
! PLAYER_WARN("uncompressing raw camera images (not good)");
! Lock();
! if (this->NewCamData)
! {
! Unlock();
! return 0;
! }
! else
{
! memcpy(&camera_data, data, hdr->size);
! this->NewCamData=true;
! Unlock();
}
return 0;
}
--- 203,214 ----
if (Message::MatchMessage(hdr, PLAYER_MSGTYPE_DATA,
PLAYER_CAMERA_DATA_STATE, camera_id))
{
! assert(hdr->size >= sizeof(player_camera_data_t));
! player_camera_data_t * camera_data =
reinterpret_cast<player_camera_data_t *> (data);
! if (camera_data->compression != PLAYER_CAMERA_COMPRESS_JPEG)
{
! PLAYER_WARN("uncompressing raw camera images (not good)");
! return -1;
}
+ ProcessImage(*camera_data);
return 0;
}
***************
*** 232,242 ****
void CameraUncompress::Main()
{
- size_t size;
- char filename[256];
-
while (true)
{
// Let the camera driver update this thread
- //this->camera->Wait();
InQueue->Wait();
--- 219,225 ----
***************
*** 244,283 ****
pthread_testcancel();
! ProcessMessages();
- // Get the latest camera data
- Lock();
- if (NewCamData)
- {
- Unlock();
- jpeg_decompress( (unsigned char*)this->data.image,
-
PLAYER_CAMERA_IMAGE_SIZE,
- this->camera_data.image,
- this->camera_data.image_count);
! if (this->save)
! {
! snprintf(filename, sizeof(filename),
"click-%04d.ppm",this->frameno++);
! FILE *fp = fopen(filename, "w+");
! fwrite (this->data.image, 1, this->data.image_count, fp);
! fclose(fp);
! }
! size = sizeof(this->data) - sizeof(this->data.image) +
this->data.image_count;
! this->data.width = (this->camera_data.width);
! this->data.height = (this->camera_data.height);
! this->data.image_count = data.width*data.height*3;
! this->data.bpp = 24;
! this->data.format = PLAYER_CAMERA_FORMAT_RGB888;
! this->data.compression = PLAYER_CAMERA_COMPRESS_RAW;
!
! Publish(device_addr, NULL, PLAYER_MSGTYPE_DATA,
PLAYER_CAMERA_DATA_STATE, (void*) &this->data, size, &this->camera_time);
! Lock();
! NewCamData = false;
! }
! Unlock();
}
- return;
- }
--- 227,264 ----
pthread_testcancel();
! ProcessMessages();
! }
! return;
! }
! void CameraUncompress::ProcessImage(player_camera_data_t & compdata)
! {
! size_t size;
! char filename[256];
! jpeg_decompress( (unsigned char*)this->data.image,
! PLAYER_CAMERA_IMAGE_SIZE,
! compdata.image,
! compdata.image_count);
! if (this->save)
! {
! snprintf(filename, sizeof(filename), "click-%04d.ppm",this->frameno++);
! FILE *fp = fopen(filename, "w+");
! fwrite (this->data.image, 1, this->data.image_count, fp);
! fclose(fp);
}
+ size = sizeof(this->data) - sizeof(this->data.image) +
this->data.image_count;
+
+ this->data.width = (compdata.width);
+ this->data.height = (compdata.height);
+ this->data.image_count = data.width*data.height*3;
+ this->data.bpp = 24;
+ this->data.format = PLAYER_CAMERA_FORMAT_RGB888;
+ this->data.compression = PLAYER_CAMERA_COMPRESS_RAW;
+
+ Publish(device_addr, NULL, PLAYER_MSGTYPE_DATA, PLAYER_CAMERA_DATA_STATE,
(void*) &this->data, size, &this->camera_time);
+
+ }
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit