From 5d0f85f1b2469b60d0838330aabe5353fdd9ef1d Mon Sep 17 00:00:00 2001 From: Vittorio Giovara Date: Wed, 13 Jul 2016 12:56:51 -0400 Subject: libdc1394: Fill in packet data directly Drop the packet embedded in the context. --- libavdevice/libdc1394.c | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) (limited to 'libavdevice') diff --git a/libavdevice/libdc1394.c b/libavdevice/libdc1394.c index 72e2e8bcc8..a0ea592c9f 100644 --- a/libavdevice/libdc1394.c +++ b/libavdevice/libdc1394.c @@ -69,7 +69,8 @@ typedef struct dc1394_data { char *pixel_format; /**< Set by a private option. */ char *framerate; /**< Set by a private option. */ - AVPacket packet; + int size; + int stream_index; } dc1394_data; struct dc1394_frame_format { @@ -177,16 +178,13 @@ static inline int dc1394_read_common(AVFormatContext *c, vst->codecpar->format = fmt->pix_fmt; vst->avg_frame_rate = framerate; - /* packet init */ - av_init_packet(&dc1394->packet); - dc1394->packet.size = av_image_get_buffer_size(fmt->pix_fmt, - fmt->width, fmt->height, 1); - dc1394->packet.stream_index = vst->index; - dc1394->packet.flags |= AV_PKT_FLAG_KEY; - dc1394->current_frame = 0; + dc1394->stream_index = vst->index; + dc1394->size = av_image_get_buffer_size(fmt->pix_fmt, + fmt->width, fmt->height, 1); - vst->codecpar->bit_rate = av_rescale(dc1394->packet.size * 8, fps->frame_rate, 1000); + vst->codecpar->bit_rate = av_rescale(dc1394->size * 8, + fps->frame_rate, 1000); *select_fps = fps; *select_fmt = fmt; out: @@ -262,17 +260,17 @@ static int dc1394_v1_read_packet(AVFormatContext *c, AVPacket *pkt) res = dc1394_dma_single_capture(&dc1394->camera); if (res == DC1394_SUCCESS) { - dc1394->packet.data = (uint8_t *)(dc1394->camera.capture_buffer); - dc1394->packet.pts = (dc1394->current_frame * 1000000) / dc1394->frame_rate; - res = dc1394->packet.size; + pkt->data = (uint8_t *)dc1394->camera.capture_buffer; + pkt->size = dc1394->size; + pkt->pts = (dc1394->current_frame * 1000000) / dc1394->frame_rate; + pkt->flags |= AV_PKT_FLAG_KEY; + pkt->stream_index = dc1394->stream_index; } else { av_log(c, AV_LOG_ERROR, "DMA capture failed\n"); - dc1394->packet.data = NULL; - res = -1; + return AVERROR_INVALIDDATA; } - *pkt = dc1394->packet; - return res; + return pkt->size; } static int dc1394_v1_close(AVFormatContext * context) @@ -374,17 +372,17 @@ static int dc1394_v2_read_packet(AVFormatContext *c, AVPacket *pkt) res = dc1394_capture_dequeue(dc1394->camera, DC1394_CAPTURE_POLICY_WAIT, &dc1394->frame); if (res == DC1394_SUCCESS) { - dc1394->packet.data = (uint8_t *) dc1394->frame->image; - dc1394->packet.pts = dc1394->current_frame * 1000000 / dc1394->frame_rate; - res = dc1394->frame->image_bytes; + pkt->data = (uint8_t *)dc1394->frame->image; + pkt->size = dc1394->frame->image_bytes; + pkt->pts = dc1394->current_frame * 1000000 / dc1394->frame_rate; + pkt->flags |= AV_PKT_FLAG_KEY; + pkt->stream_index = dc1394->stream_index; } else { av_log(c, AV_LOG_ERROR, "DMA capture failed\n"); - dc1394->packet.data = NULL; - res = -1; + return AVERROR_INVALIDDATA; } - *pkt = dc1394->packet; - return res; + return pkt->size; } static int dc1394_v2_close(AVFormatContext * context) -- cgit v1.2.3