[go: nahoru, domu]

media/gpu/VP9Decoder: Deny vp9 k-SVC decoding on ChromeOS ARM devices

We deny VP9 k-SVC decoding request on ChromeOS ARM devices in
RTCVideoDecoderAdapter by the value of kVp9kSVCHWDecoding flag. It
works because the flag default value is determined at compilation time
as ChromeOS x86 devices support it and ARM devices don't. Recently,
some of ChromeOS ARM devices can decode VP9 k-SVC stream (b/190629171),
so it is hard to distinguish whether a device supports.
This CL denies vp9 k-SVC decoding on VP9Decoder if a device is
ChromeOS ARM because v4l2 stateless decoder API doesn't support VP9
k-SVC decoding. V4L2VideoDecoder in stateful decoder API decodes VP9
k-SVC stream depending on Vp9kSVCHWDecoding flag value.

Bug: b:190629171
Test: meet call on trogdor --enable_features=Vp9kSVCHWDecoding
Change-Id: I35e75104cecb1ce25702133816bff05cb0a877b0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3369172
Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
Reviewed-by: Miguel Casas-Sanchez <mcasas@chromium.org>
Commit-Queue: Hirokazu Honda <hiroh@chromium.org>
Cr-Commit-Position: refs/heads/main@{#988396}
diff --git a/media/gpu/vp9_decoder.cc b/media/gpu/vp9_decoder.cc
index 9579d48..e07e1c7 100644
--- a/media/gpu/vp9_decoder.cc
+++ b/media/gpu/vp9_decoder.cc
@@ -27,20 +27,23 @@
   if (!cue_data)
     return true;
 
+  bool enable_vp9_ksvc =
 // On windows, currently only d3d11 supports decoding VP9 kSVC stream, we
 // shouldn't combine the switch kD3D11Vp9kSVCHWDecoding to kVp9kSVCHWDecoding
 // due to we want keep returning false to MediaCapability.
 #if BUILDFLAG(IS_WIN)
-  if (!base::FeatureList::IsEnabled(media::kD3D11Vp9kSVCHWDecoding)) {
-    DLOG(ERROR) << "Vp9 k-SVC hardware decoding is disabled";
-    return false;
-  }
+      base::FeatureList::IsEnabled(media::kD3D11Vp9kSVCHWDecoding);
+#elif defined(IS_CHROMEOS) && defined(ARCH_CPU_ARM_FAMILY)
+      // V4L2 stateless API decoder is not capable of decoding VP9 k-SVC stream.
+      false;
 #else
-  if (!base::FeatureList::IsEnabled(media::kVp9kSVCHWDecoding)) {
+      base::FeatureList::IsEnabled(media::kVp9kSVCHWDecoding);
+#endif
+
+  if (!enable_vp9_ksvc) {
     DLOG(ERROR) << "Vp9 k-SVC hardware decoding is disabled";
     return false;
   }
-#endif
 
   size_t num_of_layers = decoder_buffer.side_data_size() / sizeof(uint32_t);
   if (num_of_layers > 3u) {