|
|
|
@ -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) |
|
|
|
|