summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Meissner <marcus@jet.franken.de>2012-04-09 18:29:12 +0000
committerMarcus Meissner <marcus@jet.franken.de>2012-04-09 18:29:12 +0000
commit3e160382d85e645dabd5ea30448e89af909170f7 (patch)
tree96e0452fd2af04878fc0f1a8f7045dae841be290
parent01b54d1750d8328d14d8c88d000bbae3cf69460a (diff)
downloadlibgphoto2-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.c12
-rw-r--r--camlibs/ptp2/ptp.h1
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;