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)