diff options
author | Marcus Meissner <marcus@jet.franken.de> | 2012-04-09 18:29:12 +0000 |
---|---|---|
committer | Marcus Meissner <marcus@jet.franken.de> | 2012-04-09 18:29:12 +0000 |
commit | 3e160382d85e645dabd5ea30448e89af909170f7 (patch) | |
tree | 96e0452fd2af04878fc0f1a8f7045dae841be290 | |
parent | 01b54d1750d8328d14d8c88d000bbae3cf69460a (diff) | |
download | libgphoto2-3e160382d85e645dabd5ea30448e89af909170f7.tar.gz |
handle objectsize 64bit in sendobject
git-svn-id: https://svn.code.sf.net/p/gphoto/code/branches/libgphoto2-2_4/libgphoto2@13966 67ed7778-7388-44ab-90cf-0a291f65f57c
-rw-r--r-- | camlibs/ptp2/ptp-pack.c | 12 | ||||
-rw-r--r-- | camlibs/ptp2/ptp.h | 1 |
2 files changed, 8 insertions, 5 deletions
diff --git a/camlibs/ptp2/ptp-pack.c b/camlibs/ptp2/ptp-pack.c index b46401b68..05082ea03 100644 --- a/camlibs/ptp2/ptp-pack.c +++ b/camlibs/ptp2/ptp-pack.c @@ -476,16 +476,19 @@ ptp_pack_OI (PTPParams *params, PTPObjectInfo *oi, unsigned char** oidataptr) uint8_t filenamelen; uint8_t capturedatelen=0; /* let's allocate some memory first; correct assuming zero length dates */ - oidata=malloc(PTP_oi_MaxLen); + oidata=malloc(PTP_oi_MaxLen + params->ocs64*4); + *oidataptr=oidata; /* the caller should free it after use! */ #if 0 char *capture_date="20020101T010101"; /* XXX Fake date */ #endif - memset (oidata, 0, PTP_oi_MaxLen); + memset (oidata, 0, PTP_oi_MaxLen + params->ocs64*4); htod32a(&oidata[PTP_oi_StorageID],oi->StorageID); htod16a(&oidata[PTP_oi_ObjectFormat],oi->ObjectFormat); htod16a(&oidata[PTP_oi_ProtectionStatus],oi->ProtectionStatus); htod32a(&oidata[PTP_oi_ObjectCompressedSize],oi->ObjectCompressedSize); + if (params->ocs64) + oidata += 4; htod16a(&oidata[PTP_oi_ThumbFormat],oi->ThumbFormat); htod32a(&oidata[PTP_oi_ThumbCompressedSize],oi->ThumbCompressedSize); htod32a(&oidata[PTP_oi_ThumbPixWidth],oi->ThumbPixWidth); @@ -526,9 +529,7 @@ ptp_pack_OI (PTPParams *params, PTPObjectInfo *oi, unsigned char** oidataptr) } #endif /* XXX this function should return dataset length */ - - *oidataptr=oidata; - return (PTP_oi_Filename+filenamelen*2+(capturedatelen+1)*3); + return (PTP_oi_Filename+filenamelen*2+(capturedatelen+1)*3)+params->ocs64*4; } static time_t @@ -588,6 +589,7 @@ ptp_unpack_OI (PTPParams *params, unsigned char* data, PTPObjectInfo *oi, unsign /* Stupid Samsung Galaxy developers emit a 64bit objectcompressedsize */ if ((data[PTP_oi_filenamelen] == 0) && (data[PTP_oi_filenamelen+4] != 0)) { + params->ocs64 = 1; data += 4; } oi->ThumbFormat=dtoh16a(&data[PTP_oi_ThumbFormat]); diff --git a/camlibs/ptp2/ptp.h b/camlibs/ptp2/ptp.h index e689eb338..7447fdbc2 100644 --- a/camlibs/ptp2/ptp.h +++ b/camlibs/ptp2/ptp.h @@ -2108,6 +2108,7 @@ struct _PTPParams { /* PTP IO: if we have MTP style split header/data transfers */ int split_header_data; + int ocs64; /* 64bit objectsize */ /* PTP: MTP specific structure. */ MTPProperties *props; |