mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-29 22:00:58 +02:00
libdc1394: Fill in packet data directly
Drop the packet embedded in the context.
This commit is contained in:
parent
e344e65109
commit
5d0f85f1b2
@ -69,7 +69,8 @@ typedef struct dc1394_data {
|
|||||||
char *pixel_format; /**< Set by a private option. */
|
char *pixel_format; /**< Set by a private option. */
|
||||||
char *framerate; /**< Set by a private option. */
|
char *framerate; /**< Set by a private option. */
|
||||||
|
|
||||||
AVPacket packet;
|
int size;
|
||||||
|
int stream_index;
|
||||||
} dc1394_data;
|
} dc1394_data;
|
||||||
|
|
||||||
struct dc1394_frame_format {
|
struct dc1394_frame_format {
|
||||||
@ -177,16 +178,13 @@ static inline int dc1394_read_common(AVFormatContext *c,
|
|||||||
vst->codecpar->format = fmt->pix_fmt;
|
vst->codecpar->format = fmt->pix_fmt;
|
||||||
vst->avg_frame_rate = framerate;
|
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->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_fps = fps;
|
||||||
*select_fmt = fmt;
|
*select_fmt = fmt;
|
||||||
out:
|
out:
|
||||||
@ -262,17 +260,17 @@ static int dc1394_v1_read_packet(AVFormatContext *c, AVPacket *pkt)
|
|||||||
res = dc1394_dma_single_capture(&dc1394->camera);
|
res = dc1394_dma_single_capture(&dc1394->camera);
|
||||||
|
|
||||||
if (res == DC1394_SUCCESS) {
|
if (res == DC1394_SUCCESS) {
|
||||||
dc1394->packet.data = (uint8_t *)(dc1394->camera.capture_buffer);
|
pkt->data = (uint8_t *)dc1394->camera.capture_buffer;
|
||||||
dc1394->packet.pts = (dc1394->current_frame * 1000000) / dc1394->frame_rate;
|
pkt->size = dc1394->size;
|
||||||
res = dc1394->packet.size;
|
pkt->pts = (dc1394->current_frame * 1000000) / dc1394->frame_rate;
|
||||||
|
pkt->flags |= AV_PKT_FLAG_KEY;
|
||||||
|
pkt->stream_index = dc1394->stream_index;
|
||||||
} else {
|
} else {
|
||||||
av_log(c, AV_LOG_ERROR, "DMA capture failed\n");
|
av_log(c, AV_LOG_ERROR, "DMA capture failed\n");
|
||||||
dc1394->packet.data = NULL;
|
return AVERROR_INVALIDDATA;
|
||||||
res = -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*pkt = dc1394->packet;
|
return pkt->size;
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dc1394_v1_close(AVFormatContext * context)
|
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);
|
res = dc1394_capture_dequeue(dc1394->camera, DC1394_CAPTURE_POLICY_WAIT, &dc1394->frame);
|
||||||
if (res == DC1394_SUCCESS) {
|
if (res == DC1394_SUCCESS) {
|
||||||
dc1394->packet.data = (uint8_t *) dc1394->frame->image;
|
pkt->data = (uint8_t *)dc1394->frame->image;
|
||||||
dc1394->packet.pts = dc1394->current_frame * 1000000 / dc1394->frame_rate;
|
pkt->size = dc1394->frame->image_bytes;
|
||||||
res = 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 {
|
} else {
|
||||||
av_log(c, AV_LOG_ERROR, "DMA capture failed\n");
|
av_log(c, AV_LOG_ERROR, "DMA capture failed\n");
|
||||||
dc1394->packet.data = NULL;
|
return AVERROR_INVALIDDATA;
|
||||||
res = -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*pkt = dc1394->packet;
|
return pkt->size;
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dc1394_v2_close(AVFormatContext * context)
|
static int dc1394_v2_close(AVFormatContext * context)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user