forked from FFmpeg/FFmpeg
fftools/ffmpeg: add more structure to FrameData
It now contains data from multiple sources, so group those items that always come from the decoder. Also, initialize them to invalid values, so that frames that did not originate from a decoder can be distinguished.
This commit is contained in:
parent
75d0af388f
commit
4d06742b93
4 changed files with 20 additions and 10 deletions
|
@ -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) {
|
||||
|
|
Loading…
Add table
Reference in a new issue