diff options
author | James Almer <jamrial@gmail.com> | 2021-11-14 22:06:58 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2021-11-19 11:21:04 -0300 |
commit | e7f3279ba0ecd89eded5f91cb3bf5754761966db (patch) | |
tree | 568278c3244094690455add9983782d2a1ba527f /fftools | |
parent | ee3d6a20f6e11be23f3b75924d8a853b1af241f6 (diff) | |
download | ffmpeg-e7f3279ba0ecd89eded5f91cb3bf5754761966db.tar.gz |
ffmpeg: Allocate InputStream.decoded_frame early
Based on a commit by Andreas Rheinhardt.
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'fftools')
-rw-r--r-- | fftools/ffmpeg.c | 11 | ||||
-rw-r--r-- | fftools/ffmpeg_opt.c | 4 |
2 files changed, 6 insertions, 9 deletions
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 5a0e95bf23..e88ca554ae 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -2332,15 +2332,11 @@ static int send_frame_to_filters(InputStream *ist, AVFrame *decoded_frame) static int decode_audio(InputStream *ist, AVPacket *pkt, int *got_output, int *decode_failed) { - AVFrame *decoded_frame; + AVFrame *decoded_frame = ist->decoded_frame; AVCodecContext *avctx = ist->dec_ctx; int ret, err = 0; AVRational decoded_frame_tb; - if (!ist->decoded_frame && !(ist->decoded_frame = av_frame_alloc())) - return AVERROR(ENOMEM); - decoded_frame = ist->decoded_frame; - update_benchmark(NULL); ret = decode(avctx, decoded_frame, got_output, pkt); update_benchmark("decode_audio %d.%d", ist->file_index, ist->st->index); @@ -2397,7 +2393,7 @@ static int decode_audio(InputStream *ist, AVPacket *pkt, int *got_output, static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output, int64_t *duration_pts, int eof, int *decode_failed) { - AVFrame *decoded_frame; + AVFrame *decoded_frame = ist->decoded_frame; int i, ret = 0, err = 0; int64_t best_effort_timestamp; int64_t dts = AV_NOPTS_VALUE; @@ -2408,9 +2404,6 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output, int64_ if (!eof && pkt && pkt->size == 0) return 0; - if (!ist->decoded_frame && !(ist->decoded_frame = av_frame_alloc())) - return AVERROR(ENOMEM); - decoded_frame = ist->decoded_frame; if (ist->dts != AV_NOPTS_VALUE) dts = av_rescale_q(ist->dts, AV_TIME_BASE_Q, ist->st->time_base); if (pkt) { diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index f1fc4f742d..98bd3b47b6 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -889,6 +889,10 @@ static void add_input_streams(OptionsContext *o, AVFormatContext *ic) exit_program(1); } + ist->decoded_frame = av_frame_alloc(); + if (!ist->decoded_frame) + exit_program(1); + ist->filter_frame = av_frame_alloc(); if (!ist->filter_frame) exit_program(1); |