[FFmpeg-cvslog] avformat/mov: split off lcevc stream group initialization to its own function

James Almer git at videolan.org
Sat Oct 5 20:38:09 EEST 2024


ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Sat Oct  5 10:36:30 2024 -0300| [e907bf677a6bf50de2fe30c8674162bf26e4e83d] | committer: James Almer

avformat/mov: split off lcevc stream group initialization to its own function

Signed-off-by: James Almer <jamrial at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e907bf677a6bf50de2fe30c8674162bf26e4e83d
---

 libavformat/mov.c | 95 +++++++++++++++++++++++++++++++------------------------
 1 file changed, 53 insertions(+), 42 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index a1cace6474..78388f4122 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -10301,6 +10301,56 @@ static AVStream *mov_find_reference_track(AVFormatContext *s, AVStream *st,
     return NULL;
 }
 
+static int mov_parse_lcevc_streams(AVFormatContext *s)
+{
+    int err;
+
+    for (int i = 0; i < s->nb_streams; i++) {
+        AVStreamGroup *stg;
+        AVStream *st = s->streams[i];
+        AVStream *st_base;
+        MOVStreamContext *sc = st->priv_data;
+        int j = 0;
+
+        /* Find an enhancement stream. */
+        if (st->codecpar->codec_id != AV_CODEC_ID_LCEVC ||
+            !(sc->tref_flags & MOV_TREF_FLAG_ENHANCEMENT))
+            continue;
+
+        st->codecpar->codec_type = AVMEDIA_TYPE_DATA;
+
+        stg = avformat_stream_group_create(s, AV_STREAM_GROUP_PARAMS_LCEVC, NULL);
+        if (!stg)
+            return AVERROR(ENOMEM);
+
+        stg->id = st->id;
+        stg->params.lcevc->width  = st->codecpar->width;
+        stg->params.lcevc->height = st->codecpar->height;
+        st->codecpar->width = 0;
+        st->codecpar->height = 0;
+
+        while (st_base = mov_find_reference_track(s, st, j)) {
+            err = avformat_stream_group_add_stream(stg, st_base);
+            if (err < 0)
+                return err;
+
+            j = st_base->index + 1;
+        }
+        if (!j) {
+            av_log(s, AV_LOG_ERROR, "Failed to find base stream for enhancement stream\n");
+            return AVERROR_INVALIDDATA;
+        }
+
+        err = avformat_stream_group_add_stream(stg, st);
+        if (err < 0)
+            return err;
+
+        stg->params.lcevc->lcevc_index = stg->nb_streams - 1;
+    }
+
+    return 0;
+}
+
 static int mov_read_header(AVFormatContext *s)
 {
     MOVContext *mov = s->priv_data;
@@ -10387,48 +10437,9 @@ static int mov_read_header(AVFormatContext *s)
     export_orphan_timecode(s);
 
     /* Create LCEVC stream groups. */
-    for (i = 0; i < s->nb_streams; i++) {
-        AVStreamGroup *stg;
-        AVStream *st = s->streams[i];
-        AVStream *st_base;
-        MOVStreamContext *sc = st->priv_data;
-
-        /* Find an enhancement stream. */
-        if (st->codecpar->codec_id != AV_CODEC_ID_LCEVC ||
-            !(sc->tref_flags & MOV_TREF_FLAG_ENHANCEMENT))
-            continue;
-
-        st->codecpar->codec_type = AVMEDIA_TYPE_DATA;
-
-        stg = avformat_stream_group_create(s, AV_STREAM_GROUP_PARAMS_LCEVC, NULL);
-        if (!stg)
-            return AVERROR(ENOMEM);
-
-        stg->id = st->id;
-        stg->params.lcevc->width  = st->codecpar->width;
-        stg->params.lcevc->height = st->codecpar->height;
-        st->codecpar->width = 0;
-        st->codecpar->height = 0;
-
-        j = 0;
-        while (st_base = mov_find_reference_track(s, st, j)) {
-            err = avformat_stream_group_add_stream(stg, st_base);
-            if (err < 0)
-                return err;
-
-            j = st_base->index + 1;
-        }
-        if (!j) {
-            av_log(s, AV_LOG_ERROR, "Failed to find base stream for enhancement stream\n");
-            return AVERROR_INVALIDDATA;
-        }
-
-        err = avformat_stream_group_add_stream(stg, st);
-        if (err < 0)
-            return err;
-
-        stg->params.lcevc->lcevc_index = stg->nb_streams - 1;
-    }
+    err = mov_parse_lcevc_streams(s);
+    if (err < 0)
+        return err;
 
     for (i = 0; i < s->nb_streams; i++) {
         AVStream *st = s->streams[i];



More information about the ffmpeg-cvslog mailing list