@@ -434,9 +434,15 @@ InputStream *ist_iter(InputStream *prev)
FrameData *frame_data(AVFrame *frame)
{
if (!frame->opaque_ref) {
- frame->opaque_ref = av_buffer_allocz(sizeof(FrameData));
+ FrameData *fd;
+
+ frame->opaque_ref = av_buffer_allocz(sizeof(*fd));
if (!frame->opaque_ref)
return NULL;
+ fd = (FrameData*)frame->opaque_ref->data;
+
+ fd->dec.frame_num = UINT64_MAX;
+ fd->dec.pts = AV_NOPTS_VALUE;
}
return (FrameData*)frame->opaque_ref->data;
@@ -626,9 +626,13 @@ typedef struct OutputFile {
// optionally attached as opaque_ref to decoded AVFrames
typedef struct FrameData {
- uint64_t idx;
- int64_t pts;
- AVRational tb;
+ // properties that come from the decoder
+ struct {
+ uint64_t frame_num;
+
+ int64_t pts;
+ AVRational tb;
+ } dec;
AVRational frame_rate_filter;
@@ -612,9 +612,9 @@ static int packet_decode(InputStream *ist, const AVPacket *pkt, AVFrame *frame)
av_frame_unref(frame);
return AVERROR(ENOMEM);
}
- fd->pts = frame->pts;
- fd->tb = dec->pkt_timebase;
- fd->idx = dec->frame_num - 1;
+ fd->dec.pts = frame->pts;
+ fd->dec.tb = dec->pkt_timebase;
+ fd->dec.frame_num = dec->frame_num - 1;
fd->bits_per_raw_sample = dec->bits_per_raw_sample;
frame->time_base = dec->pkt_timebase;
@@ -569,8 +569,8 @@ void enc_stats_write(OutputStream *ost, EncStats *es,
if ((frame && frame->opaque_ref) || (pkt && pkt->opaque_ref)) {
fd = (const FrameData*)(frame ? frame->opaque_ref->data : pkt->opaque_ref->data);
- tbi = fd->tb;
- ptsi = fd->pts;
+ tbi = fd->dec.tb;
+ ptsi = fd->dec.pts;
}
for (size_t i = 0; i < es->nb_components; i++) {
@@ -588,7 +588,7 @@ void enc_stats_write(OutputStream *ost, EncStats *es,
case ENC_STATS_PTS_TIME_IN: avio_printf(io, "%g", ptsi == INT64_MAX ?
INFINITY : ptsi * av_q2d(tbi)); continue;
case ENC_STATS_FRAME_NUM: avio_printf(io, "%"PRIu64, frame_num); continue;
- case ENC_STATS_FRAME_NUM_IN: avio_printf(io, "%"PRIu64, fd ? fd->idx : -1); continue;
+ case ENC_STATS_FRAME_NUM_IN: avio_printf(io, "%"PRIu64, fd ? fd->dec.frame_num : -1); continue;
}
if (frame) {