Chromium Code Reviews| 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..c89cb85282c0b6d6f2b7c2d221185ed2cff0ce4d 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)) { |
|
scherkus (not reviewing)
2013/11/04 21:53:10
perhaps I'm missing it ... but where is media_stre
michaelbai
2013/11/04 22:00:26
It's my bad, there was underscore there.
Do we hav
|
| + 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) |