[FFmpeg-cvslog] fftools/ffmpeg: Avoid allocating+freeing frame, check allocations
Andreas Rheinhardt
git at videolan.org
Sun Dec 5 19:00:12 EET 2021
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Fri Dec 3 20:30:33 2021 +0100| [b886512ef2503fc585c302484be71475d3100480] | committer: Andreas Rheinhardt
fftools/ffmpeg: Avoid allocating+freeing frame, check allocations
Fixes a potential crash upon av_frame_alloc() failure.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b886512ef2503fc585c302484be71475d3100480
---
fftools/ffmpeg.c | 11 ++++-------
fftools/ffmpeg_opt.c | 4 ++++
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index 47e6a8683e..b0b32a69f2 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -1291,7 +1291,7 @@ static void do_video_out(OutputFile *of,
int forced_keyframe = 0;
double pts_time;
- if (i < nb0_frames && ost->last_frame) {
+ if (i < nb0_frames && ost->last_frame->buf[0]) {
in_picture = ost->last_frame;
} else
in_picture = next_picture;
@@ -1419,13 +1419,10 @@ static void do_video_out(OutputFile *of,
do_video_stats(ost, frame_size);
}
- if (!ost->last_frame)
- ost->last_frame = av_frame_alloc();
av_frame_unref(ost->last_frame);
- if (next_picture && ost->last_frame)
- av_frame_ref(ost->last_frame, next_picture);
- else
- av_frame_free(&ost->last_frame);
+ if (next_picture)
+ if (av_frame_ref(ost->last_frame, next_picture) < 0)
+ goto error;
return;
error:
diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c
index eea57a6974..a703798586 100644
--- a/fftools/ffmpeg_opt.c
+++ b/fftools/ffmpeg_opt.c
@@ -1905,6 +1905,10 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc, in
ost->avfilter = get_ost_filters(o, oc, ost);
if (!ost->avfilter)
exit_program(1);
+
+ ost->last_frame = av_frame_alloc();
+ if (!ost->last_frame)
+ exit_program(1);
} else {
MATCH_PER_STREAM_OPT(copy_initial_nonkeyframes, i, ost->copy_initial_nonkeyframes, oc ,st);
}
More information about the ffmpeg-cvslog
mailing list