Always include the actual decoder implementation when RTCVideoDecoderAV1 is used.

Bug: webrtc:13573, b/236814111
Change-Id: I053fcec3d85fdc9f8d3b72af1735b4091ec5f7c6
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/267620
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Peter Hanspers <peterhanspers@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37418}
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 969bd10..bd14a9f 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -674,7 +674,6 @@
 
       deps = [
         ":base_objc",
-        ":libaom_av1_decoder",
         ":native_video",
         ":videocodec_objc",
         ":videotoolbox_objc",
@@ -688,6 +687,10 @@
         defines += [ "RTC_USE_LIBAOM_AV1_ENCODER" ]
         deps += [ ":libaom_av1_encoder" ]
       }
+
+      if (rtc_include_dav1d_in_internal_decoder_factory) {
+        deps += [ ":dav1d_decoder" ]
+      }
     }
 
     rtc_library("vpx_codec_constants") {
@@ -738,7 +741,7 @@
       ]
     }
 
-    rtc_library("libaom_av1_decoder") {
+    rtc_library("dav1d_decoder") {
       visibility = [ "*" ]
       allow_poison = [ "software_video_codecs" ]
       sources = [
@@ -750,7 +753,7 @@
         ":base_objc",
         ":wrapped_native_codec_objc",
         "../media:rtc_media_base",
-        "../modules/video_coding/codecs/av1:libaom_av1_decoder",
+        "../modules/video_coding/codecs/av1:dav1d_decoder",
       ]
     }
 
diff --git a/sdk/objc/api/video_codec/RTCVideoDecoderAV1.h b/sdk/objc/api/video_codec/RTCVideoDecoderAV1.h
index d618237..3f6a689 100644
--- a/sdk/objc/api/video_codec/RTCVideoDecoderAV1.h
+++ b/sdk/objc/api/video_codec/RTCVideoDecoderAV1.h
@@ -22,6 +22,4 @@
  */
 + (id<RTC_OBJC_TYPE(RTCVideoDecoder)>)av1Decoder;
 
-+ (bool)isSupported;
-
 @end
diff --git a/sdk/objc/api/video_codec/RTCVideoDecoderAV1.mm b/sdk/objc/api/video_codec/RTCVideoDecoderAV1.mm
index cc40f5a..81f5f93 100644
--- a/sdk/objc/api/video_codec/RTCVideoDecoderAV1.mm
+++ b/sdk/objc/api/video_codec/RTCVideoDecoderAV1.mm
@@ -15,21 +15,13 @@
 #import "RTCVideoDecoderAV1.h"
 #import "RTCWrappedNativeVideoDecoder.h"
 
-#include "modules/video_coding/codecs/av1/libaom_av1_decoder.h"
+#include "modules/video_coding/codecs/av1/dav1d_decoder.h"
 
 @implementation RTC_OBJC_TYPE (RTCVideoDecoderAV1)
 
 + (id<RTC_OBJC_TYPE(RTCVideoDecoder)>)av1Decoder {
-  std::unique_ptr<webrtc::VideoDecoder> nativeDecoder(webrtc::CreateLibaomAv1Decoder());
-  if (nativeDecoder == nullptr) {
-    return nil;
-  }
   return [[RTC_OBJC_TYPE(RTCWrappedNativeVideoDecoder) alloc]
-      initWithNativeDecoder:std::move(nativeDecoder)];
-}
-
-+ (bool)isSupported {
-  return webrtc::kIsLibaomAv1DecoderSupported;
+      initWithNativeDecoder:std::unique_ptr<webrtc::VideoDecoder>(webrtc::CreateDav1dDecoder())];
 }
 
 @end
diff --git a/sdk/objc/components/video_codec/RTCDefaultVideoDecoderFactory.m b/sdk/objc/components/video_codec/RTCDefaultVideoDecoderFactory.m
index f4a97a8..6e3baa8 100644
--- a/sdk/objc/components/video_codec/RTCDefaultVideoDecoderFactory.m
+++ b/sdk/objc/components/video_codec/RTCDefaultVideoDecoderFactory.m
@@ -13,11 +13,14 @@
 #import "RTCH264ProfileLevelId.h"
 #import "RTCVideoDecoderH264.h"
 #import "api/video_codec/RTCVideoCodecConstants.h"
-#import "api/video_codec/RTCVideoDecoderAV1.h"
 #import "api/video_codec/RTCVideoDecoderVP8.h"
 #import "api/video_codec/RTCVideoDecoderVP9.h"
 #import "base/RTCVideoCodecInfo.h"
 
+#if defined(RTC_DAV1D_IN_INTERNAL_DECODER_FACTORY)
+#import "api/video_codec/RTCVideoDecoderAV1.h"  // nogncheck
+#endif
+
 @implementation RTC_OBJC_TYPE (RTCDefaultVideoDecoderFactory)
 
 - (NSArray<RTC_OBJC_TYPE(RTCVideoCodecInfo) *> *)supportedCodecs {
@@ -53,10 +56,9 @@
         addObject:[[RTC_OBJC_TYPE(RTCVideoCodecInfo) alloc] initWithName:kRTCVideoCodecVp9Name]];
   }
 
-  if ([RTC_OBJC_TYPE(RTCVideoDecoderAV1) isSupported]) {
-    [result
-        addObject:[[RTC_OBJC_TYPE(RTCVideoCodecInfo) alloc] initWithName:kRTCVideoCodecAv1Name]];
-  }
+#if defined(RTC_DAV1D_IN_INTERNAL_DECODER_FACTORY)
+  [result addObject:[[RTC_OBJC_TYPE(RTCVideoCodecInfo) alloc] initWithName:kRTCVideoCodecAv1Name]];
+#endif
 
   return result;
 }
@@ -69,10 +71,13 @@
   } else if ([info.name isEqualToString:kRTCVideoCodecVp9Name] &&
              [RTC_OBJC_TYPE(RTCVideoDecoderVP9) isSupported]) {
     return [RTC_OBJC_TYPE(RTCVideoDecoderVP9) vp9Decoder];
-  } else if ([info.name isEqualToString:kRTCVideoCodecAv1Name] &&
-             [RTC_OBJC_TYPE(RTCVideoDecoderAV1) isSupported]) {
+  }
+
+#if defined(RTC_DAV1D_IN_INTERNAL_DECODER_FACTORY)
+  if ([info.name isEqualToString:kRTCVideoCodecAv1Name]) {
     return [RTC_OBJC_TYPE(RTCVideoDecoderAV1) av1Decoder];
   }
+#endif
 
   return nil;
 }
diff --git a/tools_webrtc/libs/generate_licenses.py b/tools_webrtc/libs/generate_licenses.py
index f888a53..83feda0 100755
--- a/tools_webrtc/libs/generate_licenses.py
+++ b/tools_webrtc/libs/generate_licenses.py
@@ -42,6 +42,7 @@
     ],
     'boringssl': ['third_party/boringssl/src/LICENSE'],
     'crc32c': ['third_party/crc32c/src/LICENSE'],
+    'dav1d': ['third_party/dav1d/LICENSE'],
     'errorprone': [
         'third_party/android_deps/libs/'
         'com_google_errorprone_error_prone_core/LICENSE'