aboutsummaryrefslogtreecommitdiffstats
path: root/fftools
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2021-11-14 22:06:58 -0300
committerJames Almer <jamrial@gmail.com>2021-11-19 11:21:04 -0300
commite7f3279ba0ecd89eded5f91cb3bf5754761966db (patch)
tree568278c3244094690455add9983782d2a1ba527f /fftools
parentee3d6a20f6e11be23f3b75924d8a853b1af241f6 (diff)
downloadffmpeg-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.c11
-rw-r--r--fftools/ffmpeg_opt.c4
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);