[FFmpeg-devel] [PATCH v2 45/71] avcodec/mpegvideo_enc: Factor setting length of B frame chain out
Andreas Rheinhardt
andreas.rheinhardt at outlook.com
Sat May 11 23:51:09 EEST 2024
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>
---
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 cd25cd3221..025204f395 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]) {
--
2.40.1
More information about the ffmpeg-devel
mailing list