Revert "Add API for layer-specific metadata."

This reverts commit 0a6035a0939cfa65e3fcc83f0f6caaaa7bbc075b.

Reason: exclude the layer-specific metadata API from libaom v3.13.0.
Change-Id: Ie3f1218f4f87cd8368eb76aa9f38adb89f3f2b06
diff --git a/aom/aom_image.h b/aom/aom_image.h
index c4ad19a..248b5b6 100644
--- a/aom/aom_image.h
+++ b/aom/aom_image.h
@@ -154,33 +154,17 @@
  *
  * While encoding, when metadata is added to an aom_image via
  * aom_img_add_metadata(), the flag passed along with the metadata will
- * determine where the metadata OBU will be placed in the encoded OBU stream,
- * and whether it's layer-specific. Metadata will be emitted into the output
- * stream within the next temporal unit if it satisfies the specified insertion
- * flag.
+ * determine where the metadata OBU will be placed in the encoded OBU stream.
+ * Metadata will be emitted into the output stream within the next temporal unit
+ * if it satisfies the specified insertion flag.
  *
- * If the video contains multiple spatial and/or temporal layers,
- * a layer-specific metadata OBU only applies to the current frame's layer, as
- * determined by the frame's temporal_id and spatial_id. Some metadata types
- * cannot be layer-specific, as listed in Section 6.7.1 of the draft AV1
- * specification as of 2025-03-06.
- *
- * During decoding, when the library encounters a metadata OBU, it is emitted
- * with the next output aom_image. Its insert_flag is set to either
- * AOM_MIF_ANY_FRAME, or AOM_MIF_ANY_FRAME_LAYER_SPECIFIC if the OBU contains an
- * OBU header extension (i.e. the video contains multiple layers AND the
- * metadata was added using *_LAYER_SPECIFC insert flag if using libaom).
+ * During decoding, when the library encounters a metadata OBU, it is always
+ * flagged as AOM_MIF_ANY_FRAME and emitted with the next output aom_image.
  */
 typedef enum aom_metadata_insert_flags {
-  AOM_MIF_NON_KEY_FRAME = 0, /**< Adds metadata if it's not a keyframe */
+  AOM_MIF_NON_KEY_FRAME = 0, /**< Adds metadata if it's not keyframe */
   AOM_MIF_KEY_FRAME = 1,     /**< Adds metadata only if it's a keyframe */
-  AOM_MIF_ANY_FRAME = 2,     /**< Adds metadata to any type of frame */
-  /** Adds layer-specific metadata if it's not a keyframe */
-  AOM_MIF_NON_KEY_FRAME_LAYER_SPECIFIC = 16,
-  /** Adds layer-specific metadata only if it's a keyframe */
-  AOM_MIF_KEY_FRAME_LAYER_SPECIFIC = 17,
-  /** Adds layer-specific metadata to any type of frame */
-  AOM_MIF_ANY_FRAME_LAYER_SPECIFIC = 18,
+  AOM_MIF_ANY_FRAME = 2      /**< Adds metadata to any type of frame */
 } aom_metadata_insert_flags_t;
 
 /*!\brief Array of aom_metadata structs for an image. */
diff --git a/aom/internal/aom_image_internal.h b/aom/internal/aom_image_internal.h
index e11223a..ef0f166 100644
--- a/aom/internal/aom_image_internal.h
+++ b/aom/internal/aom_image_internal.h
@@ -29,14 +29,6 @@
   aom_metadata_t **metadata_array; /* Array of metadata structs */
 };
 
-/*! \brief Bit in aom_metadata_insert_flags marking metadata as layer-specific.
- */
-#define AOM_MIF_LAYER_SPECIFIC 0x10
-/*! \brief Bits in aom_metadata_insert_flags used to signal which frames to
- * add the metadata to (keyframes, non keyframes...).
- */
-#define AOM_MIF_INSERT_LOCATION_MASK 0x0f
-
 /*!\brief Alloc memory for aom_metadata_array struct.
  *
  * Allocate memory for aom_metadata_array struct.
diff --git a/aom/src/aom_image.c b/aom/src/aom_image.c
index 0b3cbde..a33262d 100644
--- a/aom/src/aom_image.c
+++ b/aom/src/aom_image.c
@@ -18,7 +18,6 @@
 #include "aom/aom_integer.h"
 #include "aom/internal/aom_image_internal.h"
 #include "aom_mem/aom_mem.h"
-#include "aom/aom_codec.h"
 
 static inline unsigned int align_image_dimension(unsigned int d,
                                                  unsigned int subsampling,
@@ -384,15 +383,6 @@
     img->metadata = aom_img_metadata_array_alloc(0);
     if (!img->metadata) return -1;
   }
-  // Some metadata types are not allowed to be layer specific, according to
-  // the Table in Section 6.7.1 of the AV1 specifiction.
-  // Do not check for OBU_METADATA_TYPE_HDR_CLL or OBU_METADATA_TYPE_HDR_MDCV
-  // because there are plans to alow them to be layer specific.
-  if ((insert_flag & AOM_MIF_LAYER_SPECIFIC) &&
-      (type == OBU_METADATA_TYPE_SCALABILITY ||
-       type == OBU_METADATA_TYPE_TIMECODE)) {
-    return -1;
-  }
   aom_metadata_t *metadata =
       aom_img_metadata_alloc(type, data, sz, insert_flag);
   if (!metadata) return -1;
diff --git a/av1/decoder/obu.c b/av1/decoder/obu.c
index 28ca200..6d6aa41 100644
--- a/av1/decoder/obu.c
+++ b/av1/decoder/obu.c
@@ -628,7 +628,7 @@
 
 // On failure, calls aom_internal_error() and does not return.
 static void read_metadata_itut_t35(AV1Decoder *const pbi, const uint8_t *data,
-                                   size_t sz, bool has_obu_extension_header) {
+                                   size_t sz) {
   if (sz == 0) {
     aom_internal_error(&pbi->error, AOM_CODEC_CORRUPT_FRAME,
                        "itu_t_t35_country_code is missing");
@@ -657,9 +657,7 @@
                        data[end_index]);
   }
   alloc_read_metadata(pbi, OBU_METADATA_TYPE_ITUT_T35, data, end_index,
-                      has_obu_extension_header
-                          ? AOM_MIF_ANY_FRAME_LAYER_SPECIFIC
-                          : AOM_MIF_ANY_FRAME);
+                      AOM_MIF_ANY_FRAME);
 }
 
 // On success, returns the number of bytes read from 'data'. On failure, calls
@@ -786,8 +784,7 @@
 // On success, returns the number of bytes read from 'data'. On failure, sets
 // pbi->common.error.error_code and returns 0, or calls aom_internal_error()
 // and does not return.
-static size_t read_metadata(AV1Decoder *pbi, const uint8_t *data, size_t sz,
-                            bool has_obu_extension_header) {
+static size_t read_metadata(AV1Decoder *pbi, const uint8_t *data, size_t sz) {
   size_t type_length;
   uint64_t type_value;
   if (aom_uleb_decode(data, sz, &type_value, &type_length) < 0) {
@@ -806,8 +803,7 @@
   }
   if (metadata_type == OBU_METADATA_TYPE_ITUT_T35) {
     // read_metadata_itut_t35() checks trailing bits.
-    read_metadata_itut_t35(pbi, data + type_length, sz - type_length,
-                           has_obu_extension_header);
+    read_metadata_itut_t35(pbi, data + type_length, sz - type_length);
     return sz;
   } else if (metadata_type == OBU_METADATA_TYPE_HDR_CLL) {
     size_t bytes_read =
@@ -1061,12 +1057,10 @@
         }
         pbi->num_tile_groups++;
         break;
-      case OBU_METADATA: {
-        decoded_payload_size =
-            read_metadata(pbi, data, payload_size, obu_header.has_extension);
+      case OBU_METADATA:
+        decoded_payload_size = read_metadata(pbi, data, payload_size);
         if (pbi->error.error_code != AOM_CODEC_OK) return -1;
         break;
-      }
       case OBU_TILE_LIST:
         if (CONFIG_NORMAL_TILE_MODE) {
           pbi->error.error_code = AOM_CODEC_UNSUP_BITSTREAM;
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 178a84a..a6a92bf 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -4222,24 +4222,23 @@
   for (size_t i = 0; i < arr->sz; i++) {
     aom_metadata_t *current_metadata = arr->metadata_array[i];
     if (current_metadata && current_metadata->payload) {
-      const int metadata_insert_location =
-          current_metadata->insert_flag & AOM_MIF_INSERT_LOCATION_MASK;
       if ((cm->current_frame.frame_type == KEY_FRAME &&
-           metadata_insert_location == AOM_MIF_KEY_FRAME) ||
+           current_metadata->insert_flag == AOM_MIF_KEY_FRAME) ||
           (cm->current_frame.frame_type != KEY_FRAME &&
-           metadata_insert_location == AOM_MIF_NON_KEY_FRAME) ||
-          metadata_insert_location == AOM_MIF_ANY_FRAME) {
+           current_metadata->insert_flag == AOM_MIF_NON_KEY_FRAME) ||
+          current_metadata->insert_flag == AOM_MIF_ANY_FRAME) {
         // OBU header is either one or two bytes.
         if (dst_size < 2) {
           aom_internal_error(cm->error, AOM_CODEC_ERROR,
                              "av1_write_metadata_array: output buffer full");
         }
-        const bool is_layer_specific_obu =
-            (current_metadata->insert_flag & AOM_MIF_LAYER_SPECIFIC) != 0;
+        // According to the AV1 spec draft version (as of git commit 5e04f)
+        // Section 6.7.1, some metadata types can be layer specific, but we
+        // currently only support non-layer specific metadata.
         obu_header_size = av1_write_obu_header(
             &cpi->ppi->level_params, &cpi->frame_header_count, OBU_METADATA,
             cm->seq_params->has_nonzero_operating_point_idc,
-            is_layer_specific_obu, 0, dst);
+            /*is_layer_specific_obu=*/false, 0, dst);
         assert(obu_header_size <= 2);
         obu_payload_size =
             av1_write_metadata_obu(current_metadata, dst + obu_header_size,
diff --git a/test/metadata_test.cc b/test/metadata_test.cc
index c34f4da..da0fb13 100644
--- a/test/metadata_test.cc
+++ b/test/metadata_test.cc
@@ -35,12 +35,6 @@
   0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17
 };
 
-const size_t kMetadataPayloadSizeT35Two = 10;
-// 0xB5 stands for the itut t35 metadata country code for the Unites States
-const uint8_t kMetadataPayloadT35Two[kMetadataPayloadSizeT35] = {
-  0xB5, 0x01, 0x02, 0x42, 0xff, 0xff, 0x00, 0x07, 0x08, 0x09
-};
-
 const size_t kMetadataPayloadSizeMdcv = 24;
 // Arbitrary content.
 const uint8_t kMetadataPayloadMdcv[kMetadataPayloadSizeMdcv] = {
@@ -102,18 +96,11 @@
     ASSERT_EQ(aom_img_add_metadata(current_frame, OBU_METADATA_TYPE_ITUT_T35,
                                    nullptr, 0, AOM_MIF_ANY_FRAME),
               -1);
-
     ASSERT_EQ(aom_img_add_metadata(current_frame, OBU_METADATA_TYPE_ITUT_T35,
                                    kMetadataPayloadT35, kMetadataPayloadSizeT35,
                                    AOM_MIF_ANY_FRAME),
               0);
 
-    ASSERT_EQ(
-        aom_img_add_metadata(current_frame, OBU_METADATA_TYPE_ITUT_T35,
-                             kMetadataPayloadT35Two, kMetadataPayloadSizeT35Two,
-                             AOM_MIF_ANY_FRAME_LAYER_SPECIFIC),
-        0);
-
     ASSERT_EQ(aom_img_add_metadata(current_frame, OBU_METADATA_TYPE_HDR_MDCV,
                                    kMetadataPayloadMdcv,
                                    kMetadataPayloadSizeMdcv, AOM_MIF_KEY_FRAME),
@@ -156,42 +143,32 @@
 
     ASSERT_NE(img.metadata, nullptr);
 
-    ASSERT_EQ(img.metadata->sz, is_key_frame ? 4 : 2);
+    ASSERT_EQ(img.metadata->sz, is_key_frame ? 3 : 1);
 
-    aom_metadata_t *metadata = img.metadata->metadata_array[0];
-    ASSERT_EQ(metadata->type, OBU_METADATA_TYPE_ITUT_T35);
-    ASSERT_EQ(metadata->insert_flag, AOM_MIF_ANY_FRAME);
-    ASSERT_EQ(metadata->sz, kMetadataPayloadSizeT35);
+    ASSERT_EQ(OBU_METADATA_TYPE_ITUT_T35,
+              img.metadata->metadata_array[0]->type);
+    ASSERT_EQ(kMetadataPayloadSizeT35, img.metadata->metadata_array[0]->sz);
     EXPECT_EQ(
-        memcmp(kMetadataPayloadT35, metadata->payload, kMetadataPayloadSizeT35),
+        memcmp(kMetadataPayloadT35, img.metadata->metadata_array[0]->payload,
+               kMetadataPayloadSizeT35),
         0);
 
-    metadata = img.metadata->metadata_array[1];
-    ASSERT_EQ(metadata->type, OBU_METADATA_TYPE_ITUT_T35);
-    // AOM_MIF_ANY_FRAME and not AOM_MIF_ANY_FRAME_LAYER_SPECIFIC because the
-    // stream does not contain layers.
-    ASSERT_EQ(metadata->insert_flag, AOM_MIF_ANY_FRAME);
-    ASSERT_EQ(metadata->sz, kMetadataPayloadSizeT35Two);
-    EXPECT_EQ(memcmp(kMetadataPayloadT35Two, metadata->payload,
-                     kMetadataPayloadSizeT35Two),
-              0);
-
     if (is_key_frame) {
-      metadata = img.metadata->metadata_array[2];
-      ASSERT_EQ(metadata->type, OBU_METADATA_TYPE_HDR_MDCV);
-      ASSERT_EQ(metadata->insert_flag, AOM_MIF_ANY_FRAME);
-      ASSERT_EQ(metadata->sz, kMetadataPayloadSizeMdcv);
-      EXPECT_EQ(memcmp(kMetadataPayloadMdcv, metadata->payload,
-                       kMetadataPayloadSizeMdcv),
-                0);
+      ASSERT_EQ(OBU_METADATA_TYPE_HDR_MDCV,
+                img.metadata->metadata_array[1]->type);
+      ASSERT_EQ(kMetadataPayloadSizeMdcv, img.metadata->metadata_array[1]->sz);
+      EXPECT_EQ(
+          memcmp(kMetadataPayloadMdcv, img.metadata->metadata_array[1]->payload,
+                 kMetadataPayloadSizeMdcv),
+          0);
 
-      metadata = img.metadata->metadata_array[3];
-      ASSERT_EQ(metadata->type, OBU_METADATA_TYPE_HDR_CLL);
-      ASSERT_EQ(metadata->insert_flag, AOM_MIF_ANY_FRAME);
-      ASSERT_EQ(metadata->sz, kMetadataPayloadSizeCll);
-      EXPECT_EQ(memcmp(kMetadataPayloadCll, metadata->payload,
-                       kMetadataPayloadSizeCll),
-                0);
+      ASSERT_EQ(OBU_METADATA_TYPE_HDR_CLL,
+                img.metadata->metadata_array[2]->type);
+      ASSERT_EQ(kMetadataPayloadSizeCll, img.metadata->metadata_array[2]->sz);
+      EXPECT_EQ(
+          memcmp(kMetadataPayloadCll, img.metadata->metadata_array[2]->payload,
+                 kMetadataPayloadSizeCll),
+          0);
     }
   }
 
@@ -266,12 +243,6 @@
                                    AOM_MIF_ANY_FRAME),
               0);
 
-    ASSERT_EQ(
-        aom_img_add_metadata(current_frame, OBU_METADATA_TYPE_ITUT_T35,
-                             kMetadataPayloadT35Two, kMetadataPayloadSizeT35Two,
-                             AOM_MIF_ANY_FRAME_LAYER_SPECIFIC),
-        0);
-
     ASSERT_EQ(aom_img_add_metadata(current_frame, OBU_METADATA_TYPE_HDR_MDCV,
                                    kMetadataPayloadMdcv,
                                    kMetadataPayloadSizeMdcv, AOM_MIF_KEY_FRAME),
@@ -317,40 +288,32 @@
 
     ASSERT_NE(img.metadata, nullptr);
 
-    ASSERT_EQ(img.metadata->sz, is_key_frame ? 4 : 2);
+    ASSERT_EQ(img.metadata->sz, is_key_frame ? 3 : 1);
 
-    aom_metadata_t *metadata = img.metadata->metadata_array[0];
-    ASSERT_EQ(metadata->type, OBU_METADATA_TYPE_ITUT_T35);
-    ASSERT_EQ(metadata->insert_flag, AOM_MIF_ANY_FRAME);
-    ASSERT_EQ(metadata->sz, kMetadataPayloadSizeT35);
+    ASSERT_EQ(OBU_METADATA_TYPE_ITUT_T35,
+              img.metadata->metadata_array[0]->type);
+    ASSERT_EQ(kMetadataPayloadSizeT35, img.metadata->metadata_array[0]->sz);
     EXPECT_EQ(
-        memcmp(kMetadataPayloadT35, metadata->payload, kMetadataPayloadSizeT35),
+        memcmp(kMetadataPayloadT35, img.metadata->metadata_array[0]->payload,
+               kMetadataPayloadSizeT35),
         0);
 
-    metadata = img.metadata->metadata_array[1];
-    ASSERT_EQ(metadata->type, OBU_METADATA_TYPE_ITUT_T35);
-    ASSERT_EQ(metadata->insert_flag, AOM_MIF_ANY_FRAME_LAYER_SPECIFIC);
-    ASSERT_EQ(metadata->sz, kMetadataPayloadSizeT35Two);
-    EXPECT_EQ(memcmp(kMetadataPayloadT35Two, metadata->payload,
-                     kMetadataPayloadSizeT35Two),
-              0);
-
     if (is_key_frame) {
-      metadata = img.metadata->metadata_array[2];
-      ASSERT_EQ(metadata->type, OBU_METADATA_TYPE_HDR_MDCV);
-      ASSERT_EQ(metadata->insert_flag, AOM_MIF_ANY_FRAME);
-      ASSERT_EQ(metadata->sz, kMetadataPayloadSizeMdcv);
-      EXPECT_EQ(memcmp(kMetadataPayloadMdcv, metadata->payload,
-                       kMetadataPayloadSizeMdcv),
-                0);
+      ASSERT_EQ(OBU_METADATA_TYPE_HDR_MDCV,
+                img.metadata->metadata_array[1]->type);
+      ASSERT_EQ(kMetadataPayloadSizeMdcv, img.metadata->metadata_array[1]->sz);
+      EXPECT_EQ(
+          memcmp(kMetadataPayloadMdcv, img.metadata->metadata_array[1]->payload,
+                 kMetadataPayloadSizeMdcv),
+          0);
 
-      metadata = img.metadata->metadata_array[3];
-      ASSERT_EQ(metadata->type, OBU_METADATA_TYPE_HDR_CLL);
-      ASSERT_EQ(metadata->insert_flag, AOM_MIF_ANY_FRAME);
-      ASSERT_EQ(metadata->sz, kMetadataPayloadSizeCll);
-      EXPECT_EQ(memcmp(kMetadataPayloadCll, metadata->payload,
-                       kMetadataPayloadSizeCll),
-                0);
+      ASSERT_EQ(OBU_METADATA_TYPE_HDR_CLL,
+                img.metadata->metadata_array[2]->type);
+      ASSERT_EQ(kMetadataPayloadSizeCll, img.metadata->metadata_array[2]->sz);
+      EXPECT_EQ(
+          memcmp(kMetadataPayloadCll, img.metadata->metadata_array[2]->payload,
+                 kMetadataPayloadSizeCll),
+          0);
     }
   }
 
@@ -439,33 +402,6 @@
             -1);
 }
 
-TEST(MetadataTest, AddLayerSpecificMetadataToImage) {
-  aom_image_t image;
-  image.metadata = nullptr;
-
-  ASSERT_EQ(
-      aom_img_add_metadata(
-          &image, OBU_METADATA_TYPE_ITUT_T35, kMetadataPayloadT35,
-          kMetadataPayloadSizeT35,
-          (aom_metadata_insert_flags_t)(AOM_MIF_ANY_FRAME_LAYER_SPECIFIC)),
-      0);
-  aom_img_metadata_array_free(image.metadata);
-}
-
-TEST(MetadataTest, AddLayerSpecificMetadataToImageNotAllowed) {
-  aom_image_t image;
-  image.metadata = nullptr;
-
-  // OBU_METADATA_TYPE_SCALABILITY cannot be layer specific.
-  ASSERT_EQ(
-      aom_img_add_metadata(
-          &image, OBU_METADATA_TYPE_SCALABILITY, kMetadataPayloadT35,
-          kMetadataPayloadSizeT35,
-          (aom_metadata_insert_flags_t)(AOM_MIF_ANY_FRAME_LAYER_SPECIFIC)),
-      -1);
-  aom_img_metadata_array_free(image.metadata);
-}
-
 TEST(MetadataTest, RemoveMetadataFromImage) {
   aom_image_t image;
   image.metadata = nullptr;
@@ -518,13 +454,9 @@
                                  kMetadataPayloadT35, kMetadataPayloadSizeT35,
                                  AOM_MIF_ANY_FRAME),
             0);
-  ASSERT_EQ(aom_img_add_metadata(&image, OBU_METADATA_TYPE_ITUT_T35,
-                                 kMetadataPayloadT35, kMetadataPayloadSizeT35,
-                                 AOM_MIF_ANY_FRAME_LAYER_SPECIFIC),
-            0);
 
   EXPECT_EQ(aom_img_get_metadata(nullptr, 0), nullptr);
-  EXPECT_EQ(aom_img_get_metadata(&image, 2u), nullptr);
+  EXPECT_EQ(aom_img_get_metadata(&image, 1u), nullptr);
   EXPECT_EQ(aom_img_get_metadata(&image, 10u), nullptr);
 
   const aom_metadata_t *metadata = aom_img_get_metadata(&image, 0);
@@ -533,15 +465,6 @@
   EXPECT_EQ(
       memcmp(kMetadataPayloadT35, metadata->payload, kMetadataPayloadSizeT35),
       0);
-  EXPECT_EQ(metadata->insert_flag, AOM_MIF_ANY_FRAME);
-
-  metadata = aom_img_get_metadata(&image, 1);
-  ASSERT_NE(metadata, nullptr);
-  ASSERT_EQ(metadata->sz, kMetadataPayloadSizeT35);
-  EXPECT_EQ(
-      memcmp(kMetadataPayloadT35, metadata->payload, kMetadataPayloadSizeT35),
-      0);
-  EXPECT_EQ(metadata->insert_flag, AOM_MIF_ANY_FRAME_LAYER_SPECIFIC);
 
   aom_img_metadata_array_free(image.metadata);
 }