[FFmpeg-cvslog] avcodec/mpegvideo_enc: Factor setting length of B frame chain out
Andreas Rheinhardt
git at videolan.org
Wed Jun 12 14:15:58 EEST 2024
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Mon Oct 9 00:44:58 2023 +0200| [17b5fc2e51a3bb5a7fc10cbd177d88ef1c025527] | committer: Andreas Rheinhardt
avcodec/mpegvideo_enc: Factor setting length of B frame chain out
It already avoids a goto and will be useful in the future
to be able to specify each functions tasks and obligations.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=17b5fc2e51a3bb5a7fc10cbd177d88ef1c025527
---
libavcodec/mpegvideo_enc.c | 33 +++++++++++++++++++++++++--------
1 file changed, 25 insertions(+), 8 deletions(-)
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index b87f03d303..60710eee98 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -1472,13 +1472,15 @@ fail:
return best_b_count;
}
-static int select_input_picture(MpegEncContext *s)
+/**
+ * Determines whether an input picture is discarded or not
+ * and if not determines the length of the next chain of B frames
+ * and puts these pictures (including the P frame) into
+ * reordered_input_picture.
+ */
+static int set_bframe_chain_length(MpegEncContext *s)
{
- int i, ret;
-
- for (int i = 1; i <= MAX_B_FRAMES; i++)
- s->reordered_input_picture[i - 1] = s->reordered_input_picture[i];
- s->reordered_input_picture[MAX_B_FRAMES] = NULL;
+ int i;
/* set next picture type & ordering */
if (!s->reordered_input_picture[0] && s->input_picture[0]) {
@@ -1491,7 +1493,7 @@ static int select_input_picture(MpegEncContext *s)
ff_vbv_update(s, 0);
- goto no_output_pic;
+ return 0;
}
}
@@ -1598,7 +1600,22 @@ static int select_input_picture(MpegEncContext *s)
}
}
}
-no_output_pic:
+
+ return 0;
+}
+
+static int select_input_picture(MpegEncContext *s)
+{
+ int ret;
+
+ for (int i = 1; i <= MAX_B_FRAMES; i++)
+ s->reordered_input_picture[i - 1] = s->reordered_input_picture[i];
+ s->reordered_input_picture[MAX_B_FRAMES] = NULL;
+
+ ret = set_bframe_chain_length(s);
+ if (ret < 0)
+ return ret;
+
av_frame_unref(s->new_pic);
if (s->reordered_input_picture[0]) {
More information about the ffmpeg-cvslog
mailing list