[FFmpeg-devel] [PATCH v5 2/2] lavf/mpegenc: fix termination on error conditions

Nicolas Gaullier nicolas.gaullier at cji.paris
Sat Mar 26 00:54:52 EET 2022


Avoid an infinite 'retry' loop in output_packet when flushing.

Signed-off-by: Nicolas Gaullier <nicolas.gaullier at cji.paris>
---
 libavformat/mpegenc.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c
index e0955a7d33..e113a42867 100644
--- a/libavformat/mpegenc.c
+++ b/libavformat/mpegenc.c
@@ -1002,7 +1002,7 @@ static int output_packet(AVFormatContext *ctx, int flush)
     MpegMuxContext *s = ctx->priv_data;
     AVStream *st;
     StreamInfo *stream;
-    int i, avail_space = 0, es_size, trailer_size;
+    int i, has_avail_data = 0, avail_space = 0, es_size, trailer_size;
     int best_i = -1;
     int best_score = INT_MIN;
     int ignore_constraints = 0;
@@ -1028,6 +1028,7 @@ retry:
         if (avail_data == 0)
             continue;
         av_assert0(avail_data > 0);
+        has_avail_data = 1;
 
         if (space < s->packet_size && !ignore_constraints)
             continue;
@@ -1048,6 +1049,8 @@ retry:
         int64_t best_dts = INT64_MAX;
         int has_premux = 0;
 
+        if (!has_avail_data)
+            return 0;
         for (i = 0; i < ctx->nb_streams; i++) {
             AVStream *st = ctx->streams[i];
             StreamInfo *stream = st->priv_data;
-- 
2.34.0.windows.1



More information about the ffmpeg-devel mailing list