[VD] Enable forwarding device with getUserMedia 45/324945/7
authorEgene Joshua Bugtong <e.bugtong@samsung.com>
Mon, 2 Jun 2025 09:13:04 +0000 (09:13 +0000)
committerBot Blink <blinkbot@samsung.com>
Thu, 5 Jun 2025 02:45:59 +0000 (02:45 +0000)
For WebRTC test suite automation, this enables forwarding device with getUserMedia
when <tizen:metadata key="http://samsung.com/tv/metadata/audio.out.capture" value="true" />
is enabled in config.xml.

Change-Id: I1bbacf27c85d219b24d54e4fa9ad41d78257ff91
Signed-off-by: e.bugtong <e.bugtong@samsung.com>
content/browser/renderer_host/media/media_capture_devices_impl.cc
content/browser/renderer_host/media/media_devices_dispatcher_host.cc
third_party/blink/renderer/modules/mediastream/media_devices.cc
tizen_src/chromium_impl/media/audio/tizen/capi_usb_audio_input_stream.cc

index 246d5d096a773f90b13ae7a8ebf4748c484bb5f2..e684dec3549aa83a0e0cc05acec318e843d9f2a0 100644 (file)
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 
+#if BUILDFLAG(IS_TIZEN_TV)
+#include "wrt/src/common/application_data.h"
+#endif
+
 namespace content {
 
 namespace {
@@ -24,6 +28,19 @@ void EnsureMonitorCaptureDevices() {
               BrowserMainLoop::GetInstance()->media_stream_manager())));
 }
 
+#if BUILDFLAG(IS_TIZEN_TV)
+bool IsAudioOutCaptureEnabled() {
+  const char* kAudioOutCapture=
+    "http://samsung.com/tv/metadata/audio.out.capture";
+  auto& app_data = wrt::ApplicationData::GetInstance();
+  if (app_data.GetMetadata(kAudioOutCapture) == "true") {
+    LOG(INFO) << "audio.out.capture value is true";
+    return true;
+  }
+  return false;
+}
+#endif
+
 }  // namespace
 
 MediaCaptureDevices* MediaCaptureDevices::GetInstance() {
@@ -145,7 +162,11 @@ void MediaCaptureDevicesImpl::UpdateAudioDevicesOnUIThread(
   devices_enumerated_ = true;
 #if BUILDFLAG(IS_TIZEN_TV)
   blink::MediaStreamDevices all_devices = devices;
-  audio_forward_devices_ = ExtractAudioForwardDevices(all_devices);
+  // Check metadata for audio.out.capture to enable audio forwarding device
+  // used to capture system output audio
+  if (!IsAudioOutCaptureEnabled()) {
+    audio_forward_devices_ = ExtractAudioForwardDevices(all_devices);
+  }
   audio_devices_ = all_devices;
 #else
   audio_devices_ = devices;
index bf7a3b4cbd47614ad76b4d24fb335d3ae0175db8..bef89d213bb977ba224e5f7162f50248659f3265 100644 (file)
 #include "content/browser/media/capture/sub_capture_target_id_web_contents_helper.h"
 #endif
 
+#if BUILDFLAG(IS_TIZEN_TV)
+#include "wrt/src/common/application_data.h"
+#endif
+
 using blink::mojom::MediaDeviceType;
 
 namespace content {
@@ -66,6 +70,19 @@ ToVectorAudioInputDeviceCapabilitiesPtr(
   return result;
 }
 
+#if BUILDFLAG(IS_TIZEN_TV)
+bool IsAudioOutCaptureEnabled() {
+  const char* kAudioOutCapture=
+    "http://samsung.com/tv/metadata/audio.out.capture";
+  auto& app_data = wrt::ApplicationData::GetInstance();
+  if (app_data.GetMetadata(kAudioOutCapture) == "true") {
+    LOG(INFO) << "audio.out.capture value is true";
+    return true;
+  }
+  return false;
+}
+#endif
+
 }  // namespace
 
 struct MediaDevicesDispatcherHost::AudioInputCapabilitiesRequest {
@@ -509,13 +526,18 @@ void MediaDevicesDispatcherHost::GotAudioInputEnumeration(
               << ",default id:" << default_device_id;
 
 #if BUILDFLAG(IS_TIZEN_TV)
-    // Tizen forwarding device is used to capture all tizen output audio,
-    // only available for getDisplayMedia. make it's capibility be invisible
-    // for other case.
-    if (is_forwarding_device(device_info.label)) {
-      LOG(INFO) << "ignore tizen forwarding device capability.";
-      continue;
+    // Check metadata for audio.out.capture to enable audio forwarding device
+    // used to capture system output audio
+    if (!IsAudioOutCaptureEnabled()) {
+      // Tizen forwarding device is used to capture all tizen output audio,
+      // only available for getDisplayMedia. make it's capibility be invisible
+      // for other case.
+      if (is_forwarding_device(device_info.label)) {
+        LOG(INFO) << "ignore tizen forwarding device capability.";
+        continue;
+      }
     }
+
 #endif
 
     if (device_info.device_id == default_device_id)
index f0977ee49892af6c4d1432569296eefa54d95185..8052e2f53260a4ec7916c74fa9a29cd5d39128e7 100644 (file)
@@ -63,6 +63,7 @@
 
 #if BUILDFLAG(IS_TIZEN_TV)
 #include "media/capture/video/tizen/create_face_detection_library.h"
+#include "wrt/src/common/application_data.h"
 #endif  // BUILDFLAG(IS_TIZEN_TV)
 
 namespace blink {
@@ -359,6 +360,19 @@ MediaStreamConstraints* ToMediaStreamConstraints(
   return constraints;
 }
 
+#if BUILDFLAG(IS_TIZEN_TV)
+bool IsAudioOutCaptureEnabled() {
+  const char* kAudioOutCapture=
+    "http://samsung.com/tv/metadata/audio.out.capture";
+  auto& app_data = wrt::ApplicationData::GetInstance();
+  if (app_data.GetMetadata(kAudioOutCapture) == "true") {
+    LOG(INFO) << "audio.out.capture value is true";
+    return true;
+  }
+  return false;
+}
+#endif
+
 }  // namespace
 
 const char MediaDevices::kSupplementName[] = "MediaDevices";
@@ -1036,10 +1050,14 @@ void MediaDevices::DevicesEnumerated(
       WebMediaDeviceInfo device_info = enumeration[i][j];
       String device_label = String::FromUTF8(device_info.label);
 #if BUILDFLAG(IS_TIZEN_TV)
-      // Block tizen forwarding device, refer to:
-      // https://review.tizen.org/gerrit/319068/
-      if (device_label.Find("forwarding") != kNotFound) {
-        continue;
+      // Check metadata for audio.out.capture to enable audio forwarding device
+      // used to capture system output audio
+      if (!IsAudioOutCaptureEnabled()) {
+        // Block tizen forwarding device, refer to:
+        // https://review.tizen.org/gerrit/319068/
+        if (device_label.Find("forwarding") != kNotFound) {
+          continue;
+        }
       }
 #endif
 
index 87c63ab52dfc2926717c0e304114e0d257cdc867..349c3a0a7c20bcb8a9b58cc26cd271bca5f06b3f 100644 (file)
@@ -13,6 +13,7 @@
 
 #if BUILDFLAG(IS_TIZEN_TV)
 #include "wrt/src/common/privilege.h"
+#include "wrt/src/common/application_data.h"
 #endif
 
 #include <sound_manager_internal.h>
@@ -21,6 +22,18 @@ namespace media {
 #if BUILDFLAG(IS_TIZEN_TV)
 constexpr char kMediaCapturePrivilege[] =
     "http://tizen.org/privilege/mediacapture";
+
+
+bool IsAudioOutCaptureEnabled() {
+  const char* kAudioOutCapture=
+    "http://samsung.com/tv/metadata/audio.out.capture";
+  auto& app_data = wrt::ApplicationData::GetInstance();
+  if (app_data.GetMetadata(kAudioOutCapture) == "true") {
+    LOG(INFO) << "audio.out.capture value is true";
+    return true;
+  }
+  return false;
+}
 #endif
 
 CapiUsbAudioInputStream::CapiUsbAudioInputStream(
@@ -111,7 +124,7 @@ bool CapiUsbAudioInputStream::OpenMic() {
   if (device_type == SOUND_DEVICE_FORWARDING) {
     auto has_privilege =
         wrt::privilege::FindPrivilegeFromCynara(kMediaCapturePrivilege);
-    if (!has_privilege) {
+    if (!has_privilege && !IsAudioOutCaptureEnabled()) {
       LOG(ERROR) << "No system audio capture privilege.";
       return false;
     }