diff --git a/aom/aom_image.h b/aom/aom_image.h
index a5e97ef..863277e 100644
--- a/aom/aom_image.h
+++ b/aom/aom_image.h
@@ -355,11 +355,10 @@
  *
  * Removes all metadata in image metadata list and sets metadata list pointer
  * to NULL.
- * Returns the number of deleted metadata structs.
  *
  * \param[in]    img       Image descriptor
  */
-size_t aom_img_remove_metadata(aom_image_t *img);
+void aom_img_remove_metadata(aom_image_t *img);
 
 /*!\brief Allocate memory for aom_metadata struct.
  *
@@ -383,7 +382,7 @@
  *
  * \param[in]    metadata       Metadata struct pointer
  */
-int aom_img_metadata_free(aom_metadata_t *metadata);
+void aom_img_metadata_free(aom_metadata_t *metadata);
 
 #ifdef __cplusplus
 }  // extern "C"
diff --git a/aom/internal/aom_image_internal.h b/aom/internal/aom_image_internal.h
index 2629d65..7f2fd18 100644
--- a/aom/internal/aom_image_internal.h
+++ b/aom/internal/aom_image_internal.h
@@ -43,11 +43,10 @@
 /*!\brief Free metadata array struct.
  *
  * Free metadata array struct and all metadata structs inside.
- * Returns the number of deleted metadata structs.
  *
  * \param[in]    arr       Metadata array struct pointer
  */
-size_t aom_img_metadata_array_free(aom_metadata_array_t *arr);
+void aom_img_metadata_array_free(aom_metadata_array_t *arr);
 
 typedef void *(*aom_alloc_img_data_cb_fn_t)(void *priv, size_t size);
 
diff --git a/aom/src/aom_image.c b/aom/src/aom_image.c
index 2148253..5e2edb4 100644
--- a/aom/src/aom_image.c
+++ b/aom/src/aom_image.c
@@ -308,11 +308,11 @@
   return metadata;
 }
 
-int aom_img_metadata_free(aom_metadata_t *metadata) {
-  if (!metadata) return -1;
-  if (metadata->payload) free(metadata->payload);
-  free(metadata);
-  return 0;
+void aom_img_metadata_free(aom_metadata_t *metadata) {
+  if (metadata) {
+    if (metadata->payload) free(metadata->payload);
+    free(metadata);
+  }
 }
 
 aom_metadata_array_t *aom_img_metadata_array_alloc(size_t sz) {
@@ -331,19 +331,16 @@
   return arr;
 }
 
-size_t aom_img_metadata_array_free(aom_metadata_array_t *arr) {
-  size_t deleted_metadatas = 0;
-  if (!arr) return deleted_metadatas;
-  if (arr->metadata_array) {
-    for (size_t i = 0; i < arr->sz; i++) {
-      if (aom_img_metadata_free(arr->metadata_array[i]) == 0) {
-        deleted_metadatas++;
+void aom_img_metadata_array_free(aom_metadata_array_t *arr) {
+  if (arr) {
+    if (arr->metadata_array) {
+      for (size_t i = 0; i < arr->sz; i++) {
+        aom_img_metadata_free(arr->metadata_array[i]);
       }
+      free(arr->metadata_array);
     }
-    free(arr->metadata_array);
+    free(arr);
   }
-  free(arr);
-  return deleted_metadatas;
 }
 
 int aom_img_add_metadata(aom_image_t *img, uint32_t type, const uint8_t *data,
@@ -376,11 +373,9 @@
   return -1;
 }
 
-size_t aom_img_remove_metadata(aom_image_t *img) {
+void aom_img_remove_metadata(aom_image_t *img) {
   if (img && img->metadata) {
-    size_t sz = aom_img_metadata_array_free(img->metadata);
+    aom_img_metadata_array_free(img->metadata);
     img->metadata = NULL;
-    return sz;
   }
-  return 0;
 }
diff --git a/aom_scale/generic/yv12config.c b/aom_scale/generic/yv12config.c
index 8de3531..062b896 100644
--- a/aom_scale/generic/yv12config.c
+++ b/aom_scale/generic/yv12config.c
@@ -11,6 +11,7 @@
 
 #include <assert.h>
 
+#include "aom/internal/aom_image_internal.h"
 #include "aom_mem/aom_mem.h"
 #include "aom_ports/mem.h"
 #include "aom_scale/yv12config.h"
@@ -288,13 +289,11 @@
   return AOM_CODEC_MEM_ERROR;
 }
 
-size_t aom_remove_metadata_from_frame_buffer(YV12_BUFFER_CONFIG *ybf) {
+void aom_remove_metadata_from_frame_buffer(YV12_BUFFER_CONFIG *ybf) {
   if (ybf && ybf->metadata) {
-    size_t sz = aom_img_metadata_array_free(ybf->metadata);
+    aom_img_metadata_array_free(ybf->metadata);
     ybf->metadata = NULL;
-    return sz;
   }
-  return 0;
 }
 
 int aom_copy_metadata_to_frame_buffer(YV12_BUFFER_CONFIG *ybf,
diff --git a/aom_scale/yv12config.h b/aom_scale/yv12config.h
index 43856f0..f7655a2 100644
--- a/aom_scale/yv12config.h
+++ b/aom_scale/yv12config.h
@@ -141,11 +141,10 @@
  *
  * Frees metadata in frame buffer.
  * Frame buffer metadata pointer will be set to NULL.
- * Returns the number of deleted metadata structs.
  *
  * \param[in]    ybf       Frame buffer struct pointer
  */
-size_t aom_remove_metadata_from_frame_buffer(YV12_BUFFER_CONFIG *ybf);
+void aom_remove_metadata_from_frame_buffer(YV12_BUFFER_CONFIG *ybf);
 
 /*!\brief Copy metadata to YUV_BUFFER_CONFIG struct.
  *
diff --git a/av1/encoder/lookahead.c b/av1/encoder/lookahead.c
index 818b3c3..5a995b0 100644
--- a/av1/encoder/lookahead.c
+++ b/av1/encoder/lookahead.c
@@ -13,6 +13,7 @@
 
 #include "config/aom_config.h"
 
+#include "aom_scale/yv12config.h"
 #include "av1/common/common.h"
 #include "av1/encoder/encoder.h"
 #include "av1/encoder/extend.h"
diff --git a/test/metadata_test.cc b/test/metadata_test.cc
index 4bf9595..53aa429 100644
--- a/test/metadata_test.cc
+++ b/test/metadata_test.cc
@@ -101,7 +101,7 @@
   aom_metadata_t *metadata = aom_img_metadata_alloc(
       OBU_METADATA_TYPE_ITUT_T35, kExampleData, kExampleDataSize);
   ASSERT_NE(metadata, nullptr);
-  EXPECT_EQ(aom_img_metadata_free(metadata), 0);
+  aom_img_metadata_free(metadata);
 }
 
 TEST(MetadataTest, MetadataArrayAllocation) {
@@ -113,7 +113,7 @@
   metadata_array->metadata_array[1] = aom_img_metadata_alloc(
       OBU_METADATA_TYPE_ITUT_T35, kExampleData, kExampleDataSize);
 
-  EXPECT_EQ(aom_img_metadata_array_free(metadata_array), 2u);
+  aom_img_metadata_array_free(metadata_array);
 }
 
 TEST(MetadataTest, AddMetadataToImage) {
@@ -123,7 +123,7 @@
   ASSERT_EQ(aom_img_add_metadata(&image, OBU_METADATA_TYPE_ITUT_T35,
                                  kExampleData, kExampleDataSize),
             0);
-  EXPECT_EQ(aom_img_metadata_array_free(image.metadata), 1u);
+  aom_img_metadata_array_free(image.metadata);
   EXPECT_EQ(aom_img_add_metadata(NULL, OBU_METADATA_TYPE_ITUT_T35, kExampleData,
                                  kExampleDataSize),
             -1);
@@ -136,8 +136,8 @@
   ASSERT_EQ(aom_img_add_metadata(&image, OBU_METADATA_TYPE_ITUT_T35,
                                  kExampleData, kExampleDataSize),
             0);
-  EXPECT_EQ(aom_img_remove_metadata(&image), 1u);
-  EXPECT_EQ(aom_img_remove_metadata(NULL), 0u);
+  aom_img_remove_metadata(&image);
+  aom_img_remove_metadata(NULL);
 }
 
 TEST(MetadataTest, CopyMetadataToFrameBuffer) {
@@ -155,18 +155,18 @@
   EXPECT_EQ(status, 0);
   status = aom_copy_metadata_to_frame_buffer(NULL, metadata_array);
   EXPECT_EQ(status, -1);
-  EXPECT_EQ(aom_img_metadata_array_free(metadata_array), 1u);
+  aom_img_metadata_array_free(metadata_array);
 
   // Metadata_array_2
   aom_metadata_array_t *metadata_array_2 = aom_img_metadata_array_alloc(0);
   ASSERT_NE(metadata_array_2, nullptr);
   status = aom_copy_metadata_to_frame_buffer(&yvBuf, metadata_array_2);
   EXPECT_EQ(status, -1);
-  EXPECT_EQ(aom_img_metadata_array_free(metadata_array_2), 0u);
+  aom_img_metadata_array_free(metadata_array_2);
 
   // YV12_BUFFER_CONFIG
   status = aom_copy_metadata_to_frame_buffer(&yvBuf, NULL);
   EXPECT_EQ(status, -1);
-  EXPECT_EQ(aom_remove_metadata_from_frame_buffer(NULL), 0u);
-  EXPECT_EQ(aom_remove_metadata_from_frame_buffer(&yvBuf), 1u);
+  aom_remove_metadata_from_frame_buffer(&yvBuf);
+  aom_remove_metadata_from_frame_buffer(NULL);
 }
