mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-19 22:10:34 +00:00
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
@ -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…
Reference in New Issue
Block a user