summaryrefslogtreecommitdiff
path: root/moticam.c
diff options
context:
space:
mode:
Diffstat (limited to 'moticam.c')
-rw-r--r--moticam.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/moticam.c b/moticam.c
index 4f46478..4e83225 100644
--- a/moticam.c
+++ b/moticam.c
@@ -51,6 +51,7 @@ struct moticam_device {
struct image *other_image;
struct libusb_transfer *usb_transfer;
bool usb_transfer_done;
+ int drop;
};
static char *
@@ -263,6 +264,8 @@ moticam_start(struct device *device)
}
mdev->current_image = &mdev->image[0];
mdev->other_image = &mdev->image[1];
+ /* Drop first frame. */
+ mdev->drop = 1;
/* Prepare and submit transfer. */
mdev->usb_transfer = libusb_alloc_transfer(0);
libusb_fill_bulk_transfer(mdev->usb_transfer, mdev->handle, 0x83,
@@ -283,12 +286,15 @@ moticam_read(struct device *device)
const int image_size = mdev->width * mdev->height;
struct image *image = NULL;
/* Image received? Return it, else drop. */
- if (mdev->usb_transfer->actual_length == image_size) {
+ if (!mdev->drop
+ && mdev->usb_transfer->actual_length == image_size) {
image = mdev->current_image;
image->refs = 1;
mdev->current_image = mdev->other_image;
mdev->other_image = image;
}
+ if (mdev->drop)
+ mdev->drop--;
/* Pending updates? */
if (mdev->exposure_pending) {
moticam_control_exposure(device, mdev->exposure_ms);
@@ -394,6 +400,7 @@ moticam_usb_open(libusb_context *usb, libusb_device *usb_device)
mdev->other_image = NULL;
mdev->usb_transfer = NULL;
mdev->usb_transfer_done = false;
+ mdev->drop = 1;
/* Open USB device. */
int r = libusb_open(usb_device, &mdev->handle);
if (r)