make eos preview capture more robust

git-svn-id: https://svn.code.sf.net/p/gphoto/code/trunk/libgphoto2@12663 67ed7778-7388-44ab-90cf-0a291f65f57c
This commit is contained in:
Marcus Meissner
2010-01-28 09:41:53 +00:00
parent 47a0eb7f20
commit 56dbb82d2e

View File

@@ -1474,6 +1474,22 @@ camera_capture_preview (Camera *camera, CameraFile *file, GPContext *context)
}
while (tries--) {
PTPCanon_changes_entry *entries = NULL;
int nrofentries = 0;
/* Poll for camera events */
while (1) {
ret = ptp_canon_eos_getevent (params, &entries, &nrofentries);
if (ret != PTP_RC_OK) {
gp_log (GP_LOG_ERROR,"ptp2_capture_eos_preview", "getevent failed!");
return GP_ERROR;
}
if (nrofentries == 0)
break;
free (entries);
nrofentries = 0;
entries = NULL;
}
ret = ptp_canon_eos_get_viewfinder_image (params , &data, &size);
if (ret == PTP_RC_OK) {
uint32_t len = dtoh32a(data);
@@ -1492,24 +1508,8 @@ camera_capture_preview (Camera *camera, CameraFile *file, GPContext *context)
return GP_OK;
} else {
if (ret == 0xa102) { /* means "not there yet" ... so wait */
PTPCanon_changes_entry *entries = NULL;
int nrofentries = 0;
gp_context_idle (context);
usleep (50*1000);
/* Poll for camera events */
while (1) {
ret = ptp_canon_eos_getevent (params, &entries, &nrofentries);
if (ret != PTP_RC_OK) {
gp_log (GP_LOG_ERROR,"ptp2_capture_eos_preview", "getevent failed!");
return GP_ERROR;
}
if (nrofentries == 0)
break;
free (entries);
nrofentries = 0;
entries = NULL;
}
continue;
}
gp_log (GP_LOG_ERROR,"ptp2_capture_eos_preview", "get_viewfinder_image failed: 0x%x", ret);