| Index: content/renderer/render_view_impl.cc
|
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
|
| index 517613091d9c4a0b2c8b537770369b3b0eb12759..6eb8f67eee9b1c25426e3aaa93ec34cbadf7fdbf 100644
|
| --- a/content/renderer/render_view_impl.cc
|
| +++ b/content/renderer/render_view_impl.cc
|
| @@ -3079,82 +3079,16 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer(
|
| FOR_EACH_OBSERVER(
|
| RenderViewObserver, observers_, WillCreateMediaPlayer(frame, client));
|
|
|
| - const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
|
| -#if defined(ENABLE_WEBRTC)
|
| - if (!InitializeMediaStreamClient())
|
| - return NULL;
|
| -
|
| -#if !defined(GOOGLE_TV)
|
| - if (media_stream_client_->IsMediaStream(url)) {
|
| -#if defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL)
|
| - bool found_neon =
|
| - (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0;
|
| - UMA_HISTOGRAM_BOOLEAN("Platform.WebRtcNEONFound", found_neon);
|
| -#endif // defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL)
|
| - return new WebMediaPlayerMS(
|
| - frame, client, AsWeakPtr(), media_stream_client_, new RenderMediaLog());
|
| - }
|
| -#endif // !defined(GOOGLE_TV)
|
| -#endif // defined(ENABLE_WEBRTC)
|
| + WebMediaPlayer* player = CreateWebMediaPlayerForMediaStream(frame, url,
|
| + client);
|
| + if (player)
|
| + return player;
|
|
|
| #if defined(OS_ANDROID)
|
| - GpuChannelHost* gpu_channel_host =
|
| - RenderThreadImpl::current()->EstablishGpuChannelSync(
|
| - CAUSE_FOR_GPU_LAUNCH_VIDEODECODEACCELERATOR_INITIALIZE);
|
| - if (!gpu_channel_host) {
|
| - LOG(ERROR) << "Failed to establish GPU channel for media player";
|
| - return NULL;
|
| - }
|
| -
|
| - scoped_ptr<StreamTextureFactory> stream_texture_factory;
|
| - if (UsingSynchronousRendererCompositor()) {
|
| - SynchronousCompositorFactory* factory =
|
| - SynchronousCompositorFactory::GetInstance();
|
| - stream_texture_factory = factory->CreateStreamTextureFactory(routing_id_);
|
| - } else {
|
| - scoped_refptr<cc::ContextProvider> context_provider =
|
| - RenderThreadImpl::current()->SharedMainThreadContextProvider();
|
| -
|
| - if (!context_provider.get()) {
|
| - LOG(ERROR) << "Failed to get context3d for media player";
|
| - return NULL;
|
| - }
|
| -
|
| - stream_texture_factory.reset(new StreamTextureFactoryImpl(
|
| - context_provider->Context3d(), gpu_channel_host, routing_id_));
|
| - }
|
| -
|
| - scoped_ptr<WebMediaPlayerAndroid> web_media_player_android(
|
| - new WebMediaPlayerAndroid(
|
| - frame,
|
| - client,
|
| - AsWeakPtr(),
|
| - media_player_manager_,
|
| - stream_texture_factory.release(),
|
| - RenderThreadImpl::current()->GetMediaThreadMessageLoopProxy(),
|
| - new RenderMediaLog()));
|
| -#if defined(ENABLE_WEBRTC) && defined(GOOGLE_TV)
|
| - if (media_stream_client_->IsMediaStream(url)) {
|
| - RTCVideoDecoderFactoryTv* factory = RenderThreadImpl::current()
|
| - ->GetMediaStreamDependencyFactory()->decoder_factory_tv();
|
| - // |media_stream_client| and |factory| outlives |web_media_player_android|.
|
| - if (!factory->AcquireDemuxer() ||
|
| - !web_media_player_android->InjectMediaStream(
|
| - media_stream_client_,
|
| - factory,
|
| - base::Bind(
|
| - base::IgnoreResult(&RTCVideoDecoderFactoryTv::ReleaseDemuxer),
|
| - base::Unretained(factory)))) {
|
| - LOG(ERROR) << "Failed to inject media stream.";
|
| - return NULL;
|
| - }
|
| - }
|
| -#endif // defined(ENABLE_WEBRTC) && defined(GOOGLE_TV)
|
| - return web_media_player_android.release();
|
| -#endif // defined(OS_ANDROID)
|
| -
|
| + return CreateAndroidWebMediaPlayer(frame, url, client);
|
| +#else
|
| scoped_refptr<media::AudioRendererSink> sink;
|
| - if (!cmd_line->HasSwitch(switches::kDisableAudio)) {
|
| + if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableAudio)) {
|
| sink = RenderThreadImpl::current()->GetAudioRendererMixerManager()->
|
| CreateInput(routing_id_);
|
| DVLOG(1) << "Using AudioRendererMixerManager-provided sink: " << sink.get();
|
| @@ -3169,6 +3103,7 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer(
|
| RenderThreadImpl::current()->GetGpuFactories(),
|
| new RenderMediaLog());
|
| return new WebMediaPlayerImpl(frame, client, AsWeakPtr(), params);
|
| +#endif // defined(OS_ANDROID)
|
| }
|
|
|
| WebCookieJar* RenderViewImpl::cookieJar(WebFrame* frame) {
|
| @@ -6314,6 +6249,30 @@ void RenderViewImpl::draggableRegionsChanged() {
|
| DraggableRegionsChanged(webview()->mainFrame()));
|
| }
|
|
|
| +WebMediaPlayer* RenderViewImpl::CreateWebMediaPlayerForMediaStream(
|
| + WebFrame* frame,
|
| + const WebKit::WebURL& url,
|
| + WebMediaPlayerClient* client) {
|
| +#if defined(ENABLE_WEBRTC)
|
| + if (!InitializeMediaStreamClient()) {
|
| + LOG(ERROR) << "Failed to initialize MediaStreamClient";
|
| + return NULL;
|
| + }
|
| +#if !defined(GOOGLE_TV)
|
| + if (media_stream_client_->IsMediaStream(url)) {
|
| +#if defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL)
|
| + bool found_neon =
|
| + (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0;
|
| + UMA_HISTOGRAM_BOOLEAN("Platform.WebRtcNEONFound", found_neon);
|
| +#endif // defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL)
|
| + return new WebMediaPlayerMS(frame, client, AsWeakPtr(),
|
| + media_stream_client_, new RenderMediaLog());
|
| + }
|
| +#endif // !defined(GOOGLE_TV)
|
| +#endif // defined(ENABLE_WEBRTC)
|
| + return NULL;
|
| +}
|
| +
|
| #if defined(OS_ANDROID)
|
| WebContentDetectionResult RenderViewImpl::detectContentAround(
|
| const WebHitTestResult& touch_hit) {
|
| @@ -6369,6 +6328,65 @@ bool RenderViewImpl::openDateTimeChooser(
|
| return date_time_picker_client_->Open();
|
| }
|
|
|
| +WebMediaPlayer* RenderViewImpl::CreateAndroidWebMediaPlayer(
|
| + WebFrame* frame,
|
| + const WebKit::WebURL& url,
|
| + WebMediaPlayerClient* client) {
|
| + GpuChannelHost* gpu_channel_host =
|
| + RenderThreadImpl::current()->EstablishGpuChannelSync(
|
| + CAUSE_FOR_GPU_LAUNCH_VIDEODECODEACCELERATOR_INITIALIZE);
|
| + if (!gpu_channel_host) {
|
| + LOG(ERROR) << "Failed to establish GPU channel for media player";
|
| + return NULL;
|
| + }
|
| +
|
| + scoped_ptr<StreamTextureFactory> stream_texture_factory;
|
| + if (UsingSynchronousRendererCompositor()) {
|
| + SynchronousCompositorFactory* factory =
|
| + SynchronousCompositorFactory::GetInstance();
|
| + stream_texture_factory = factory->CreateStreamTextureFactory(routing_id_);
|
| + } else {
|
| + scoped_refptr<cc::ContextProvider> context_provider =
|
| + RenderThreadImpl::current()->SharedMainThreadContextProvider();
|
| +
|
| + if (!context_provider.get()) {
|
| + LOG(ERROR) << "Failed to get context3d for media player";
|
| + return NULL;
|
| + }
|
| +
|
| + stream_texture_factory.reset(new StreamTextureFactoryImpl(
|
| + context_provider->Context3d(), gpu_channel_host, routing_id_));
|
| + }
|
| +
|
| + scoped_ptr<WebMediaPlayerAndroid> web_media_player_android(
|
| + new WebMediaPlayerAndroid(
|
| + frame,
|
| + client,
|
| + AsWeakPtr(),
|
| + media_player_manager_,
|
| + stream_texture_factory.release(),
|
| + RenderThreadImpl::current()->GetMediaThreadMessageLoopProxy(),
|
| + new RenderMediaLog()));
|
| +#if defined(ENABLE_WEBRTC) && defined(GOOGLE_TV)
|
| + if (media_stream_client_ && media_stream_client_->IsMediaStream(url)) {
|
| + RTCVideoDecoderFactoryTv* factory = RenderThreadImpl::current()
|
| + ->GetMediaStreamDependencyFactory()->decoder_factory_tv();
|
| + // |media_stream_client| and |factory| outlives |web_media_player_android|.
|
| + if (!factory->AcquireDemuxer() ||
|
| + !web_media_player_android->InjectMediaStream(
|
| + media_stream_client_,
|
| + factory,
|
| + base::Bind(
|
| + base::IgnoreResult(&RTCVideoDecoderFactoryTv::ReleaseDemuxer),
|
| + base::Unretained(factory)))) {
|
| + LOG(ERROR) << "Failed to inject media stream.";
|
| + return NULL;
|
| + }
|
| + }
|
| +#endif // defined(ENABLE_WEBRTC) && defined(GOOGLE_TV)
|
| + return web_media_player_android.release();
|
| +}
|
| +
|
| #endif // defined(OS_ANDROID)
|
|
|
| #if defined(OS_MACOSX)
|
|
|