From 4130584c764aecb55ccb259ad8e9816a6fd423b9 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Tue, 28 Apr 2015 22:40:51 +0200 Subject: Support CMOSIS bug resulting in missing payload --- private.h | 6 +++--- reader.c | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/private.h b/private.h index a0611f3..ff36e92 100644 --- a/private.h +++ b/private.h @@ -5,9 +5,9 @@ #include #include "ipecamera.h" -//#define IPECAMERA_BUG_EXTRA_DATA -#define IPECAMERA_BUG_MULTIFRAME_PACKETS //**< this is by design, start of packet comes directly after the end of last one in streaming mode */ -//#define IPECAMERA_BUG_INCOMPLETE_PACKETS +#define IPECAMERA_BUG_MISSING_PAYLOAD //**< CMOSIS fails to provide a first payload for each frame, therefore the frame is 32 bit shorter */ +#define IPECAMERA_BUG_MULTIFRAME_PACKETS //**< This is by design, start of packet comes directly after the end of last one in streaming mode */ +//#define IPECAMERA_BUG_INCOMPLETE_PACKETS //**< Support incomplete packets, i.e. check for frame magic even if full frame size is not reached yet (slow) */ #define IPECAMERA_BUG_POSTPONED_READ #define IPECAMERA_DEBUG_BROKEN_FRAMES "/mnt/frames" //#define IPECAMERA_DEBUG_RAW_PACKETS "/mnt/frames" diff --git a/reader.c b/reader.c index db700cd..63806f1 100644 --- a/reader.c +++ b/reader.c @@ -38,6 +38,11 @@ int ipecamera_compute_buffer_size(ipecamera_t *ctx, size_t lines) { raw_size = lines * line_size; raw_size *= 16 / ctx->cmosis_outputs; raw_size += header_size + footer_size; + +#ifdef IPECAMERA_BUG_MISSING_PAYLOAD + // As I understand, the first 32-byte packet is missing, so we need to substract 32 + raw_size -= 32; +#endif /* IPECAMERA_BUG_MISSING_PAYLOAD */ } padded_blocks = raw_size / IPECAMERA_DMA_PACKET_LENGTH + ((raw_size % IPECAMERA_DMA_PACKET_LENGTH)?1:0); -- cgit v1.2.3