[M130 Migration]Add Audio Stream new featuers 30/324630/2
authorxiaofang <fang.xiao@samsung.com>
Thu, 22 May 2025 03:03:43 +0000 (11:03 +0800)
committerBot Blink <blinkbot@samsung.com>
Fri, 23 May 2025 23:38:51 +0000 (23:38 +0000)
1. add new metadata
<metadata key="http://developer.samsung.com/metadata/use.sw.decoder" value="true" />
<metadata key="http://developer.samsung.com/metadata/webaudio.use.voice.stream" value="true" />
2. audio use sw decoder when use.sw.decoder set
3. enable webaudiovoicestream feature when webaudio.use.voice.stream set

Refer:
https://review.tizen.org/gerrit/c/platform/framework/web/chromium-efl/+/316162
https://review.tizen.org/gerrit/c/platform/framework/web/chromium-efl/+/317019

Change-Id: Ic47a8388dcdf94bbe6f910724fbced8472637208
Signed-off-by: xiaofang <fang.xiao@samsung.com>
content/public/common/content_switches.cc
content/public/common/content_switches.h
tizen_src/chromium_impl/media/audio/tizen/capi_audio_output.cc
tizen_src/chromium_impl/media/audio/tizen/capi_audio_output.h
tizen_src/chromium_impl/media/filters/esplusplayer_util.cc
tizen_src/chromium_impl/media/filters/esplusplayer_util.h
tizen_src/chromium_impl/media/filters/media_capabilities.cc
tizen_src/chromium_impl/media/filters/media_player_esplusplayer_tv.cc
wrt/src/browser/tv/wrt_native_window_tv.cc

index 0b3e0aa3778a60bcee21c0b721457905fb49a18f..8b50fa0dba8ef189aa2835096a6f0b4bf8878de1 100644 (file)
@@ -1050,6 +1050,8 @@ const char kEnableMediaSubtitleNotification[] =
 // Enables multiplayers feature for web app
 const char kEnableMultiPlayerForWebapp[] = "enable-multiplayer-for-webapp";
 const char kDefaultAudioInputDeviceId[] = "default-audio-input-device-id";
+const char kEnableUseSwDecoder[] = "enable-use-sw-decoder";
+const char kEnableWebAudioUseVoiceStream[] = "enable-webaudio-use-voicestream";
 #endif
 
 #if defined(ENABLE_IPC_FUZZER)
index 21313a3cdba592d271f8930e11a91ba9a7b8c355..cbfe89eb4d687ed09a94b6f8a1e22790feb4293a 100644 (file)
@@ -308,6 +308,8 @@ CONTENT_EXPORT extern const char kDualDecodingWebRTC[];
 CONTENT_EXPORT extern const char kEnableMediaSubtitleNotification[];
 CONTENT_EXPORT extern const char kEnableMultiPlayerForWebapp[];
 CONTENT_EXPORT extern const char kDefaultAudioInputDeviceId[];
+CONTENT_EXPORT extern const char kEnableUseSwDecoder[];
+CONTENT_EXPORT extern const char kEnableWebAudioUseVoiceStream[];
 #endif
 
 #if defined(ENABLE_IPC_FUZZER)
index 452109da67fb0023239d0cf3766a01875424917a..92227696a90e1cba89f1ed9e59ce68abd8b7ae02 100644 (file)
 #include "media/audio/audio_manager_base.h"
 #include "media/base/audio_parameters.h"
 
+#if BUILDFLAG(IS_TIZEN_TV)
+#include "base/command_line.h"
+#include "content/public/common/content_switches.h"
+#include "ewk/efl_integration/common/content_switches_efl.h"
+#include "tizen_src/ewk/efl_integration/ewk_privilege_checker.h"
+#endif
+
 namespace {
 
 #define ENUM_CASE(x) \
@@ -91,9 +98,48 @@ bool CapiAudioOutputStream::Open() {
 
   state_ = media::kIsOpened;
 
+#if BUILDFLAG(IS_TIZEN_TV)
+  if (IsWebaudioVoiceStreamEnabled()) {
+    LOG(INFO) << __func__ << " Webaudio use voice stream privilege set.";
+    sound_stream_info_h stream_info;
+    int ret = sound_manager_create_stream_information(
+        SOUND_STREAM_TYPE_VOICE_INFORMATION, focusStateChangedCallback, this,
+        &stream_info);
+    if (SOUND_MANAGER_ERROR_NONE != ret || stream_info == nullptr) {
+      LOG(ERROR) << __func__ << " Fail to create stream info. ret : " << ret;
+      stream_info = nullptr;
+      return false;
+    }
+    ret = audio_out_set_sound_stream_info(audio_out_, stream_info);
+    if (AUDIO_IO_ERROR_NONE != ret) {
+      LOG(ERROR) << __func__ << " Fail to set stream info. ret : " << ret;
+      return false;
+    }
+  }
+#endif
+
   return true;
 }
 
+#if BUILDFLAG(IS_TIZEN_TV)
+bool CapiAudioOutputStream::IsWebaudioVoiceStreamEnabled() const {
+  const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
+  return cmd_line->HasSwitch(switches::kEnableWebAudioUseVoiceStream);
+}
+void CapiAudioOutputStream::focusStateChangedCallback(
+    sound_stream_info_h stream_info,
+    sound_stream_focus_mask_e focus_mask,
+    sound_stream_focus_state_e focus_state,
+    sound_stream_focus_change_reason_e reason_for_change,
+    int sound_behavior,
+    const char* extra_info,
+    void* user_data) {
+  LOG(INFO) << __func__ << " focus state changed to " << (int)focus_state
+            << " with reason " << (int)reason_for_change << " and extra info "
+            << extra_info;
+}
+#endif
+
 void CapiAudioOutputStream::Start(AudioSourceCallback* callback) {
   DCHECK(manager_->GetTaskRunner()->BelongsToCurrentThread());
   DCHECK(state_ == media::kIsOpened);
@@ -162,6 +208,7 @@ void CapiAudioOutputStream::GetVolume(double* volume) {
 }
 
 void CapiAudioOutputStream::Flush() {
+  LOG(INFO) << __func__ << " : state_ : " << static_cast<InternalState>(state_);
   DCHECK(manager_->GetTaskRunner()->BelongsToCurrentThread());
   if (state_ != media::kIsStarted)
     return;
index e8c0f0e9016c6a7d4208bd53c998950221fad532..943cce3b770083663a53c3e73ebd6487fd4e0ba9 100644 (file)
@@ -45,6 +45,17 @@ class CapiAudioOutputStream : public AudioOutputStream {
                                  size_t nbytes,
                                  void* user_data);
   void WriteAudioData(size_t nbytes);
+#if BUILDFLAG(IS_TIZEN_TV)
+  bool IsWebaudioVoiceStreamEnabled() const;
+  static void focusStateChangedCallback(
+      sound_stream_info_h stream_info,
+      sound_stream_focus_mask_e focus_mask,
+      sound_stream_focus_state_e focus_state,
+      sound_stream_focus_change_reason_e reason_for_change,
+      int sound_behavior,
+      const char* extra_info,
+      void* user_data);
+#endif
 
   const AudioParameters params_;
   AudioManagerBase* manager_;
index 3230484fb4e774289a0a8ec48cdc2cd9d1dda635..1ec9f57b5012f7a40b938403c5d756cd8a7d7493 100644 (file)
@@ -482,6 +482,11 @@ bool IsMultiPlayerSupported() {
   return cmd_line->HasSwitch(switches::kEnableMultiPlayerForWebapp);
 }
 
+bool IsSwDecoderUsed() {
+  const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
+  return cmd_line->HasSwitch(switches::kEnableUseSwDecoder);
+}
+
 int GetMaxCodecFramerate(esplusplayer_video_mime_type mime_type) {
   LOG(INFO) << "GetMaxCodecFramerate for mime_type:" << mime_type;
   int max_framerate = media::kMaxFramerate;
index d39a19dc62098444527e4adff22bed7d262453c0..5936ff22c0ca6b9db940a342b2761c6a5851de4c 100644 (file)
@@ -63,6 +63,7 @@ esplusplayer_display_rotation_type ConvertToESPlusPlayerDisplayRotation(
 bool IsMultiviewMode();
 int GetMaxCodecFramerate(esplusplayer_video_mime_type mime_type);
 bool IsMultiPlayerSupported();
+bool IsSwDecoderUsed();
 bool SetAppInfo(esplusplayer_handle player, const char* type);
 #endif
 
index 67f8d6f7cbdad87219013a12f9bda092e4ba3378..90445fcfa165d0e8d0ad72b18372b794bd6e0ce0 100644 (file)
@@ -59,6 +59,10 @@ std::size_t TVMaxCount(MediaType type) {
     const auto chipset = GetTVChipset();
     count = (chipset == "OSCARP") ? 4 : 2;
   }
+
+  if (media::IsSwDecoderUsed()) {
+    count = 1000;
+  }
 #endif  // BUILDFLAG(IS_TIZEN_TV)
 
   LOG(INFO) << "Return " << count << " as max count.";
index 5158335c38f576dc23c27a754f0ae0299d55e0e8..c0abf7dab45dbdba57331a3e975b563fde779f23 100644 (file)
@@ -86,6 +86,15 @@ void MediaPlayerESPlusPlayerTV::Initialize(VideoRendererSink* sink) {
       return;
     }
   }
+
+  // Set Audio SW decoder for webapp which set
+  // "http://developer.samsung.com/metadata/use.sw.decoder"
+  if (media::IsSwDecoderUsed()) {
+    LOG_ID(INFO, player_id_)
+        << "(" << static_cast<void*>(this) << ") "
+        << "Set Audio SW decoder when use.sw.decoder metadata set";
+    SetSwAudioDecoder();
+  }
 #endif
 
   if (GetMediaPlayerClient())
index 1941bc8a386c9afd140457d4bb7797b27e4d342b..026fff0f5387382e56f62d531338629f126151a1 100644 (file)
@@ -174,6 +174,10 @@ const char* kScreenshotPath = "/home/owner/apps_rw/xwalk-service/screenshot/";
 
 const char* kMultiPlayerSupport =
     "http://samsung.com/tv/metadata/multiplayer.support";
+const char* kUseSwDecoder =
+    "http://developer.samsung.com/metadata/use.sw.decoder";
+const char* kWebAudioUseVoiceStream =
+    "http://developer.samsung.com/metadata/webaudio.use.voice.stream";
 
 const int kPannelToGraphicSize = 2;
 const int kRotationDelayMS = 500;
@@ -851,6 +855,15 @@ void WRTNativeWindowTV::SetAppMetaDataInfo() {
     current_command_line->AppendSwitch(switches::kEnableMultiPlayerForWebapp);
   }
 
+  if (meta_data_info.GetValue(kUseSwDecoder) == "true") {
+    auto current_command_line = base::CommandLine::ForCurrentProcess();
+    current_command_line->AppendSwitch(switches::kEnableUseSwDecoder);
+  }
+  if (meta_data_info.GetValue(kWebAudioUseVoiceStream) == "true") {
+    auto current_command_line = base::CommandLine::ForCurrentProcess();
+    current_command_line->AppendSwitch(switches::kEnableWebAudioUseVoiceStream);
+  }
+
   const bool enable_game_mode = (meta_data_info.GetValue(kGameMode) == "true");
   const bool enable_upstream_architecture =
       (meta_data_info.GetValue(kUpstreamArchitecture) == "true");