Commit 626b8aa343 for ffmpeg

commit 626b8aa3435cf19cdfdea165dc010dfafd51bfdc
Author: James Almer <jamrial@gmail.com>
Date:   Mon Oct 5 12:23:44 2026 -0300

    avformat/mov: factorize setting item output metadata

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

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 07521a138d..1fb457ae1f 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -11197,6 +11197,45 @@ fail:
     return err;
 }

+static int mov_parse_heif_item_references(AVFormatContext *s, HEIFItem *item,
+                                          AVPacketSideData **coded_side_data,
+                                          int *nb_coded_side_data)
+{
+    MOVContext *mov = s->priv_data;
+    int err;
+
+    for (int j = 0; j < item->nb_iref_list; j++) {
+        HEIFItem *ref = get_heif_item(mov, item->iref_list[j].item_id);
+
+        av_assert0(ref);
+        switch(ref->type) {
+        case MKTAG('E','x','i','f'):
+            err = mov_parse_exif_item(s, coded_side_data, nb_coded_side_data, ref);
+            if (err < 0 && (s->error_recognition & AV_EF_EXPLODE))
+                return err;
+            break;
+        default:
+            break;
+        }
+    }
+
+    /* rotation */
+    if (item->rotation || item->hflip || item->vflip) {
+        err = set_display_matrix_from_item(coded_side_data, nb_coded_side_data, item);
+        if (err < 0)
+            return err;
+    }
+
+    /* ICC profile */
+    if (item->icc_profile_size) {
+        err = set_icc_profile_from_item(coded_side_data, nb_coded_side_data, item);
+        if (err < 0)
+            return err;
+    }
+
+    return 0;
+}
+
 static int mov_parse_tiles(AVFormatContext *s)
 {
     MOVContext *mov = s->priv_data;
@@ -11282,37 +11321,10 @@ static int mov_parse_tiles(AVFormatContext *s)
         if (err < 0)
             return err;

-        for (int j = 0; j < grid->item->nb_iref_list; j++) {
-            HEIFItem *ref = get_heif_item(mov, grid->item->iref_list[j].item_id);
-
-            av_assert0(ref);
-            switch(ref->type) {
-            case MKTAG('E','x','i','f'):
-                err = mov_parse_exif_item(s, &stg->coded_side_data,
-                                             &stg->nb_coded_side_data, ref);
-                if (err < 0 && (s->error_recognition & AV_EF_EXPLODE))
-                    return err;
-                break;
-            default:
-                break;
-            }
-        }
-
-        /* rotation */
-        if (grid->item->rotation || grid->item->hflip || grid->item->vflip) {
-            err = set_display_matrix_from_item(&stg->coded_side_data,
-                                               &stg->nb_coded_side_data, grid->item);
-            if (err < 0)
-                return err;
-        }
-
-        /* ICC profile */
-        if (grid->item->icc_profile_size) {
-            err = set_icc_profile_from_item(&stg->coded_side_data,
-                                            &stg->nb_coded_side_data, grid->item);
-            if (err < 0)
-                return err;
-        }
+        err = mov_parse_heif_item_references(s, grid->item, &stg->coded_side_data,
+                                                            &stg->nb_coded_side_data);
+        if (err < 0)
+            return err;

         if (grid->item->name)
             av_dict_set(&stg->metadata, "title", grid->item->name, 0);
@@ -11364,32 +11376,16 @@ static int mov_parse_heif_items(AVFormatContext *s)

         sc->chunk_offsets[0] = item->extent_offset + offset;

+        err = mov_parse_heif_item_references(s, item, &st->codecpar->coded_side_data,
+                                                      &st->codecpar->nb_coded_side_data);
+        if (err < 0)
+            return err;
+
+        if (item->name)
+            av_dict_set(&st->metadata, "title", item->name, 0);
         if (item->item_id == mov->primary_item_id)
             st->disposition |= AV_DISPOSITION_DEFAULT;

-        for (int j = 0; j < item->nb_iref_list; j++) {
-            HEIFItem *ref = get_heif_item(mov, item->iref_list[j].item_id);
-
-            av_assert0(ref);
-            switch(ref->type) {
-            case MKTAG('E','x','i','f'):
-                err = mov_parse_exif_item(s, &st->codecpar->coded_side_data,
-                                             &st->codecpar->nb_coded_side_data, ref);
-                if (err < 0 && (s->error_recognition & AV_EF_EXPLODE))
-                    return err;
-                break;
-            default:
-                break;
-            }
-        }
-
-        if (item->rotation || item->hflip || item->vflip) {
-            err = set_display_matrix_from_item(&st->codecpar->coded_side_data,
-                                               &st->codecpar->nb_coded_side_data, item);
-            if (err < 0)
-                return err;
-        }
-
         mov_build_index(mov, st);
     }