diff options
author | Clément Bœsch <cboesch@gopro.com> | 2017-01-31 17:27:46 +0100 |
---|---|---|
committer | Clément Bœsch <cboesch@gopro.com> | 2017-01-31 17:27:46 +0100 |
commit | b9292a9698375510c5668cde4ce80dea79d8ec02 (patch) | |
tree | 432f988db2b09d26bc017e63a24ae130e35a4e33 /libavdevice | |
parent | fa02765886294b07a1553570d5c9b5757a78e7f0 (diff) | |
parent | 5d0f85f1b2469b60d0838330aabe5353fdd9ef1d (diff) | |
download | ffmpeg-b9292a9698375510c5668cde4ce80dea79d8ec02.tar.gz |
Merge commit '5d0f85f1b2469b60d0838330aabe5353fdd9ef1d'
* commit '5d0f85f1b2469b60d0838330aabe5353fdd9ef1d':
libdc1394: Fill in packet data directly
Merged-by: Clément Bœsch <cboesch@gopro.com>
Diffstat (limited to 'libavdevice')
-rw-r--r-- | libavdevice/libdc1394.c | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/libavdevice/libdc1394.c b/libavdevice/libdc1394.c index 60c6146652..c5fdd1070f 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; static const struct dc1394_frame_format { @@ -178,16 +179,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: @@ -263,17 +261,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) @@ -380,17 +378,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) |