summaryrefslogtreecommitdiff
path: root/camlibs/toshiba
diff options
context:
space:
mode:
authorSean Bruno <sean.bruno@dsl-only.net>2004-07-19 05:14:52 +0000
committerSean Bruno <sean.bruno@dsl-only.net>2004-07-19 05:14:52 +0000
commit08235e5032bf646ff9cfc4b95baeb031672aac73 (patch)
treed253fda6d4a6a9174c87057d90ae20fa316760c8 /camlibs/toshiba
parentaceb968cf55fd75e0993fd5e62f88c4a47b315b1 (diff)
downloadlibgphoto2-08235e5032bf646ff9cfc4b95baeb031672aac73.tar.gz
More work...too tired...must sleep...camera still not working.
git-svn-id: https://svn.code.sf.net/p/gphoto/code/trunk/libgphoto2@7259 67ed7778-7388-44ab-90cf-0a291f65f57c
Diffstat (limited to 'camlibs/toshiba')
-rw-r--r--camlibs/toshiba/pdrm65/pdrm65.c36
1 files changed, 17 insertions, 19 deletions
diff --git a/camlibs/toshiba/pdrm65/pdrm65.c b/camlibs/toshiba/pdrm65/pdrm65.c
index e89155b87..0554e085e 100644
--- a/camlibs/toshiba/pdrm65/pdrm65.c
+++ b/camlibs/toshiba/pdrm65/pdrm65.c
@@ -142,7 +142,8 @@ int pdrm65_get_pict(GPPort *port, const char *pic_number, CameraFile *file)
char pic_buf[JPEG_CHUNK];
uint8_t *image;
int pic_size = 0;
- int data_remaining = 0;
+ int rcvd_packets;
+ int packet_counter = 0;
int image_number = atoi(pic_number);
@@ -166,10 +167,10 @@ int pdrm65_get_pict(GPPort *port, const char *pic_number, CameraFile *file)
pdrm65_select_file(port, image_number);
- pic_size = ( (in_buf[6]*(256*256)) + (in_buf[5]*256) + in_buf[4] );
- GP_DEBUG("Picture is size %d KBytes", pic_size);
+ pic_size = ( (atoi(&in_buf[6])*(256*256)) + (atoi(&in_buf[5])*256) + atoi(&in_buf[4]) );
+ GP_DEBUG("Picture is size %d Bytes", pic_size);
+ GP_DEBUG("Picture with headers is %d KBytes", pic_size + (((pic_size / JPEG_CHUNK)+1) * 60));
- image = malloc(pic_size + (((pic_size / JPEG_CHUNK)+1)*60));
//1b 43 02 00 04 0e 12 00
//out_bf[0-1]=0x1b 0x43
@@ -180,33 +181,30 @@ int pdrm65_get_pict(GPPort *port, const char *pic_number, CameraFile *file)
out_buf[6]=0x12;
out_buf[7]=0x00;
gp_port_write(port,out_buf,8);
- while(data_remaining < sizeof(image))
+ packet_counter = (pic_size / JPEG_CHUNK);
+ image = malloc(JPEG_CHUNK + 60);
+
+ for (rcvd_packets = 0; rcvd_packets <= packet_counter; rcvd_packets++)
{
- GP_DEBUG("Size of image = %d, data_remaining = %d", sizeof(image), data_remaining);
//Get EXIF Header information for this packet
gp_port_read(port, in_buf, 64);
- memcpy(image+data_remaining, &in_buf[4],60);
+ memcpy(image+(rcvd_packets*(JPEG_CHUNK+60)), &in_buf[4], 60);
- if ((pic_size - data_remaining) > JPEG_CHUNK)
+ if (rcvd_packets != packet_counter)
{
gp_port_read(port, pic_buf, JPEG_CHUNK);
- memcpy(image+data_remaining+60, pic_buf, JPEG_CHUNK);
- data_remaining += (JPEG_CHUNK + 60);
+ memcpy(image+(rcvd_packets*(JPEG_CHUNK+60))+60, pic_buf, JPEG_CHUNK);
+ realloc(image, JPEG_CHUNK + 60);
}
else
{
- gp_port_read(port, pic_buf, (pic_size - data_remaining));
- memcpy(image+(pic_size-data_remaining+60), in_buf, (pic_size - data_remaining));
- data_remaining += (pic_size - data_remaining + 60 );
+ gp_port_read(port, pic_buf, (pic_size - (rcvd_packets * JPEG_CHUNK)));
+ memcpy(image+(rcvd_packets*(JPEG_CHUNK+60))+60, pic_buf,(pic_size - (rcvd_packets * JPEG_CHUNK)));
+ realloc(image, JPEG_CHUNK + 60);
}
-
gp_port_read(port, in_buf, 6);
gp_port_write(port, &ok, 1);
-
-
-
- GP_DEBUG("data_remaining = %d, sizeof image = %d, size of pic_size = %d", data_remaining, sizeof(image), pic_size);
-
+
}
gp_file_set_mime_type(file, GP_MIME_EXIF);
gp_file_set_data_and_size(file, image, pic_size);