[MM][HBBTV] Enable the url demuxer for the hls video. 13/306613/4
authorSun-woo Nam <sunny.nam@samsung.com>
Fri, 23 Feb 2024 05:26:42 +0000 (21:26 -0800)
committerBot Blink <blinkbot@samsung.com>
Mon, 26 Feb 2024 09:09:09 +0000 (09:09 +0000)
DemuxerManager has been newly created in this version, so new path that selects
the url demuxer for HLS and HBBTV should be enabled.
Additionally, I fixed an issue with the video hole when url demuxer was enabled.

Change-Id: Ifa428bbb06881df449f93b818b4d750993da550e
Signed-off-by: Sun-woo Nam <sunny.nam@samsung.com>
media/base/pipeline_impl.cc
media/filters/demuxer_manager.cc
media/filters/demuxer_manager.h
media/mojo/clients/mojo_renderer.cc
tizen_src/chromium_impl/content/browser/media/tizen_renderer_impl.cc

index 7d935c5..2b991e6 100644 (file)
@@ -1296,6 +1296,11 @@ void PipelineImpl::RendererWrapper::InitializeRenderer(
   shared_state_.renderer->SetWasPlayedWithUserActivation(
       was_played_with_user_activation_);
 
+#if defined(TIZEN_VIDEO_HOLE)
+  LOG(INFO) << __func__ << " call SetVideoHole : " << is_video_hole_;
+  shared_state_.renderer->SetVideoHole(is_video_hole_);
+#endif
+
   // Initialize Renderer and report timeout UMA.
   std::string uma_name = "Media.InitializeRendererTimeout";
   base::UmaHistogramEnumeration(uma_name, CallbackTimeoutStatus::kCreate);
@@ -1304,11 +1309,6 @@ void PipelineImpl::RendererWrapper::InitializeRenderer(
       WrapCallbackWithTimeoutHandler(
           std::move(done_cb), /*timeout_delay=*/base::Seconds(10),
           base::BindOnce(&OnCallbackTimeout, uma_name)));
-
-#if defined(TIZEN_VIDEO_HOLE)
-  LOG(INFO) << __func__ << " call SetVideoHole : " << is_video_hole_;
-  shared_state_.renderer->SetVideoHole(is_video_hole_);
-#endif
 }
 
 void PipelineImpl::RendererWrapper::DestroyRenderer() {
index 72f21ce..4107d7d 100644 (file)
@@ -169,6 +169,19 @@ void DemuxerManager::OnPipelineError(PipelineStatus error) {
     return client_->OnError(std::move(error));
   }
 
+#if defined(TIZEN_MULTIMEDIA)
+  if (error == DEMUXER_ERROR_DETECTED_HLS) {
+    hls_fallback_ = HlsFallbackImplementation::kMediaPlayer;
+
+    client_->StopForDemuxerReset();
+    data_source_->Stop();
+    FreeResourcesAfterMediaThreadWait(base::BindOnce(
+        &DemuxerManager::RestartClientForHLS, weak_factory_.GetWeakPtr()));
+
+    return;
+  }
+#endif
+
 #if BUILDFLAG(ENABLE_HLS_DEMUXER) || BUILDFLAG(IS_ANDROID)
   bool can_play_hls =
       SelectHlsFallbackImplementation() != HlsFallbackImplementation::kNone;
@@ -392,7 +405,7 @@ PipelineStatus DemuxerManager::CreateDemuxer(
   }
 #endif  // BUILDFLAG(ENABLE_HLS_DEMUXER)
 
-#if BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_ANDROID) || defined(TIZEN_MULTIMEDIA)
   const bool media_player_hls =
       hls_fallback_ == HlsFallbackImplementation::kMediaPlayer;
   if (media_player_hls || client_->IsMediaPlayerRendererClient()) {
@@ -602,15 +615,21 @@ std::unique_ptr<Demuxer> DemuxerManager::CreateHlsDemuxer() {
 }
 #endif
 
-#if BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_ANDROID) || defined(TIZEN_MULTIMEDIA)
 std::unique_ptr<Demuxer> DemuxerManager::CreateMediaUrlDemuxer(
     bool expect_hls_content) {
   return std::make_unique<MediaUrlDemuxer>(
       media_task_runner_, loaded_url_, site_for_cookies_, top_frame_origin_,
+#if BUILDFLAG(IS_ANDROID)
       has_storage_access_, allow_media_player_renderer_credentials_,
+#else
+      // The platform media player in Tizen OS doesn't require these params
+      // except for the url, so they are not used for tizen multimedia.
+      true, true,
+#endif
       expect_hls_content);
 }
-#endif  // BUILDFLAG(IS_ANDROID)
+#endif  // BUILDFLAG(IS_ANDROID) || defined(TIZEN_MULTIMEDIA)
 
 void DemuxerManager::SetDemuxer(std::unique_ptr<Demuxer> demuxer) {
   DCHECK(!demuxer_);
index 68df485..e46d1ef 100644 (file)
@@ -185,7 +185,7 @@ class MEDIA_EXPORT DemuxerManager {
   std::unique_ptr<Demuxer> CreateHlsDemuxer();
 #endif
 
-#if BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(IS_ANDROID) || defined(TIZEN_MULTIMEDIA)
   std::unique_ptr<media::Demuxer> CreateMediaUrlDemuxer(bool hls_content);
 #endif  // BUILDFLAG(IS_ANDROID)
 
index f5b795b..f51b9b4 100644 (file)
@@ -257,8 +257,8 @@ base::TimeDelta MojoRenderer::GetMediaTime() {
 
 #if defined(TIZEN_VIDEO_HOLE)
 void MojoRenderer::SetVideoHole(bool is_video_hole) {
-  if (remote_renderer_.is_bound())
-    remote_renderer_->SetVideoHole(is_video_hole);
+  BindRemoteRendererIfNeeded();
+  remote_renderer_->SetVideoHole(is_video_hole);
 }
 
 void MojoRenderer::SetMediaGeometry(const gfx::RectF& rect) {
index d0c9c2c..e3bfcf1 100644 (file)
@@ -155,12 +155,18 @@ void TizenRendererImpl::Initialize(media::MediaResource* media_resource,
     return;
   }
 
-  audio_stream_ = media_resource_->GetFirstStream(media::DemuxerStream::AUDIO);
-  if (audio_stream_)
-    media_player_->SetMediaType(media::DemuxerStream::AUDIO);
-  video_stream_ = media_resource_->GetFirstStream(media::DemuxerStream::VIDEO);
-  if (video_stream_)
-    media_player_->SetMediaType(media::DemuxerStream::VIDEO);
+  if (media_resource_->GetType() != media::MediaResource::Type::KUrl) {
+    audio_stream_ =
+        media_resource_->GetFirstStream(media::DemuxerStream::AUDIO);
+    if (audio_stream_) {
+      media_player_->SetMediaType(media::DemuxerStream::AUDIO);
+    }
+    video_stream_ =
+        media_resource_->GetFirstStream(media::DemuxerStream::VIDEO);
+    if (video_stream_) {
+      media_player_->SetMediaType(media::DemuxerStream::VIDEO);
+    }
+  }
 
 #if defined(TIZEN_VIDEO_HOLE)
   if (web_contents) {