diff options
Diffstat (limited to 'ipecamera/reader.c')
-rw-r--r-- | ipecamera/reader.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/ipecamera/reader.c b/ipecamera/reader.c index 587fc19..9be6533 100644 --- a/ipecamera/reader.c +++ b/ipecamera/reader.c @@ -51,6 +51,7 @@ static int ipecamera_data_callback(void *user, pcilib_dma_flags_t flags, size_t int eof = 0; #ifdef IPECAMERA_BUG_MULTIFRAME_PACKETS + size_t real_size; size_t extra_data = 0; #endif /* IPECAMERA_BUG_MULTIFRAME_PACKETS */ @@ -64,6 +65,16 @@ static int ipecamera_data_callback(void *user, pcilib_dma_flags_t flags, size_t } if (startpos) { + // pass padding to rawdata callback + if (ctx->event.params.rawdata.callback) { + res = ctx->event.params.rawdata.callback(0, NULL, PCILIB_EVENT_FLAG_RAW_DATA_ONLY, startpos, buf, ctx->event.params.rawdata.user); + if (res <= 0) { + if (res < 0) return res; + ctx->run_reader = 0; + } + } + + buf += startpos; bufsize -= startpos; } @@ -85,6 +96,9 @@ static int ipecamera_data_callback(void *user, pcilib_dma_flags_t flags, size_t } #ifdef IPECAMERA_BUG_MULTIFRAME_PACKETS + // for rawdata_callback with complete padding + real_size = bufsize; + if (ctx->cur_size + bufsize > ctx->raw_size) { size_t need; @@ -118,7 +132,11 @@ static int ipecamera_data_callback(void *user, pcilib_dma_flags_t flags, size_t if (ctx->cur_size >= ctx->full_size) eof = 1; if (ctx->event.params.rawdata.callback) { +#ifdef IPECAMERA_BUG_MULTIFRAME_PACKETS + res = ctx->event.params.rawdata.callback(ctx->event_id, (pcilib_event_info_t*)(ctx->frame + ctx->buffer_pos), (eof?PCILIB_EVENT_FLAG_EOF:PCILIB_EVENT_FLAGS_DEFAULT), real_size, buf, ctx->event.params.rawdata.user); +#else /* IPECAMERA_BUG_MULTIFRAME_PACKETS */ res = ctx->event.params.rawdata.callback(ctx->event_id, (pcilib_event_info_t*)(ctx->frame + ctx->buffer_pos), (eof?PCILIB_EVENT_FLAG_EOF:PCILIB_EVENT_FLAGS_DEFAULT), bufsize, buf, ctx->event.params.rawdata.user); +#endif /* IPECAMERA_BUG_MULTIFRAME_PACKETS */ if (res <= 0) { if (res < 0) return res; ctx->run_reader = 0; |