summaryrefslogtreecommitdiff
path: root/chromium/content/renderer/media/media_factory.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/renderer/media/media_factory.cc')
-rw-r--r--chromium/content/renderer/media/media_factory.cc52
1 files changed, 37 insertions, 15 deletions
diff --git a/chromium/content/renderer/media/media_factory.cc b/chromium/content/renderer/media/media_factory.cc
index 5e2119c7f4c..fe25c6b87ab 100644
--- a/chromium/content/renderer/media/media_factory.cc
+++ b/chromium/content/renderer/media/media_factory.cc
@@ -15,7 +15,7 @@
#include "build/buildflag.h"
#include "content/public/common/content_client.h"
#include "content/public/renderer/content_renderer_client.h"
-#include "content/renderer/media/audio_device_factory.h"
+#include "content/renderer/media/audio/audio_device_factory.h"
#include "content/renderer/media/render_media_log.h"
#include "content/renderer/media/renderer_webmediaplayer_delegate.h"
#include "content/renderer/media/stream/media_stream_renderer_factory_impl.h"
@@ -28,7 +28,6 @@
#include "media/base/decoder_factory.h"
#include "media/base/media_switches.h"
#include "media/base/renderer_factory_selector.h"
-#include "media/base/surface_manager.h"
#include "media/blink/remote_playback_client_wrapper_impl.h"
#include "media/blink/resource_fetch_context.h"
#include "media/blink/webencryptedmediaclient_impl.h"
@@ -46,12 +45,12 @@
#include "third_party/blink/public/platform/web_video_frame_submitter.h"
#include "third_party/blink/public/web/blink.h"
#include "third_party/blink/public/web/web_local_frame.h"
+#include "ui/base/ui_base_features.h"
#include "url/origin.h"
#if defined(OS_ANDROID)
#include "content/renderer/media/android/media_player_renderer_client_factory.h"
#include "content/renderer/media/android/renderer_media_player_manager.h"
-#include "content/renderer/media/android/renderer_surface_view_manager.h"
#include "content/renderer/media/android/stream_texture_wrapper_impl.h"
#include "media/base/android/media_codec_util.h"
#include "media/base/media.h"
@@ -139,6 +138,21 @@ void PostMediaContextProviderToCallback(
namespace content {
+// static
+bool MediaFactory::VideoSurfaceLayerEnabled() {
+ // LayoutTests do not support SurfaceLayer by default at the moment.
+ // See https://crbug.com/838128
+ content::RenderThreadImpl* render_thread =
+ content::RenderThreadImpl::current();
+ if (render_thread && render_thread->layout_test_mode() &&
+ !render_thread->LayoutTestModeUsesDisplayCompositorPixelDump()) {
+ return false;
+ }
+
+ return base::FeatureList::IsEnabled(media::kUseSurfaceLayerForVideo) &&
+ features::IsAshInBrowserProcess();
+}
+
MediaFactory::MediaFactory(
RenderFrameImpl* render_frame,
media::RequestRoutingTokenCallback request_routing_token_cb)
@@ -223,8 +237,6 @@ blink::WebMediaPlayer* MediaFactory::CreateMediaPlayer(
bool use_media_player_renderer = false;
#if defined(OS_ANDROID)
use_media_player_renderer = UseMediaPlayerRenderer(url);
- if (!use_media_player_renderer && !media_surface_manager_)
- media_surface_manager_ = new RendererSurfaceViewManager(render_frame_);
embedded_media_experience_enabled =
webkit_preferences.embedded_media_experience_enabled;
#endif // defined(OS_ANDROID)
@@ -278,8 +290,7 @@ blink::WebMediaPlayer* MediaFactory::CreateMediaPlayer(
scoped_refptr<base::SingleThreadTaskRunner>
video_frame_compositor_task_runner;
std::unique_ptr<blink::WebVideoFrameSubmitter> submitter;
- bool use_surface_layer_for_video =
- base::FeatureList::IsEnabled(media::kUseSurfaceLayerForVideo);
+ bool use_surface_layer_for_video = VideoSurfaceLayerEnabled();
if (use_surface_layer_for_video) {
// TODO(lethalantidote): Use a separate task_runner. https://crbug/753605.
video_frame_compositor_task_runner =
@@ -298,25 +309,36 @@ blink::WebMediaPlayer* MediaFactory::CreateMediaPlayer(
}
DCHECK(layer_tree_view);
+ scoped_refptr<base::SingleThreadTaskRunner> media_task_runner =
+ render_thread->GetMediaThreadTaskRunner();
+
+ if (!media_task_runner) {
+ // If the media thread failed to start, we will receive a null task runner.
+ // Fail the creation by returning null, and let callers handle the error.
+ // See https://crbug.com/775393.
+ return nullptr;
+ }
+
std::unique_ptr<media::WebMediaPlayerParams> params(
new media::WebMediaPlayerParams(
std::move(media_log),
- base::Bind(&ContentRendererClient::DeferMediaLoad,
- base::Unretained(GetContentClient()->renderer()),
- static_cast<RenderFrame*>(render_frame_),
- GetWebMediaPlayerDelegate()->has_played_media()),
- audio_renderer_sink, render_thread->GetMediaThreadTaskRunner(),
+ base::BindRepeating(&ContentRendererClient::DeferMediaLoad,
+ base::Unretained(GetContentClient()->renderer()),
+ static_cast<RenderFrame*>(render_frame_),
+ GetWebMediaPlayerDelegate()->has_played_media()),
+ audio_renderer_sink, media_task_runner,
render_thread->GetWorkerTaskRunner(),
render_thread->compositor_task_runner(),
video_frame_compositor_task_runner,
base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory,
base::Unretained(blink::MainThreadIsolate())),
- initial_cdm, media_surface_manager_, request_routing_token_cb_,
- media_observer, max_keyframe_distance_to_disable_background_video,
+ initial_cdm, request_routing_token_cb_, media_observer,
+ max_keyframe_distance_to_disable_background_video,
max_keyframe_distance_to_disable_background_video_mse,
enable_instant_source_buffer_gc, embedded_media_experience_enabled,
std::move(metrics_provider),
- base::Bind(&blink::WebSurfaceLayerBridge::Create, layer_tree_view),
+ base::BindOnce(&blink::WebSurfaceLayerBridge::Create,
+ layer_tree_view),
RenderThreadImpl::current()->SharedMainThreadContextProvider(),
use_surface_layer_for_video));