OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/render_frame_impl.h" | 5 #include "content/renderer/render_frame_impl.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 #include "content/renderer/media/android/stream_texture_factory_impl.h" | 207 #include "content/renderer/media/android/stream_texture_factory_impl.h" |
208 #include "content/renderer/media/android/webmediaplayer_android.h" | 208 #include "content/renderer/media/android/webmediaplayer_android.h" |
209 #include "content/renderer/media/android/webmediasession_android.h" | 209 #include "content/renderer/media/android/webmediasession_android.h" |
210 #include "media/base/android/media_codec_util.h" | 210 #include "media/base/android/media_codec_util.h" |
211 #include "third_party/WebKit/public/platform/WebFloatPoint.h" | 211 #include "third_party/WebKit/public/platform/WebFloatPoint.h" |
212 #else | 212 #else |
213 #include "cc/blink/context_provider_web_context.h" | 213 #include "cc/blink/context_provider_web_context.h" |
214 #endif | 214 #endif |
215 | 215 |
216 #if defined(ENABLE_PEPPER_CDMS) | 216 #if defined(ENABLE_PEPPER_CDMS) |
| 217 #include "content/renderer/media/cdm/render_cdm_factory.h" |
217 #include "content/renderer/media/cdm/pepper_cdm_wrapper_impl.h" | 218 #include "content/renderer/media/cdm/pepper_cdm_wrapper_impl.h" |
218 #elif defined(ENABLE_BROWSER_CDMS) | 219 #elif defined(ENABLE_BROWSER_CDMS) |
| 220 #include "content/renderer/media/cdm/render_cdm_factory.h" |
219 #include "content/renderer/media/cdm/renderer_cdm_manager.h" | 221 #include "content/renderer/media/cdm/renderer_cdm_manager.h" |
220 #endif | 222 #endif |
221 | 223 |
222 #if defined(ENABLE_MOJO_MEDIA) | 224 #if defined(ENABLE_MOJO_MEDIA) |
223 #include "content/renderer/media/media_interface_provider.h" | 225 #include "content/renderer/media/media_interface_provider.h" |
224 #endif | 226 #endif |
225 | 227 |
226 #if defined(ENABLE_MOJO_CDM) | 228 #if defined(ENABLE_MOJO_CDM) |
227 #include "media/mojo/services/mojo_cdm_factory.h" // nogncheck | 229 #include "media/mojo/services/mojo_cdm_factory.h" // nogncheck |
228 #else | |
229 #include "content/renderer/media/cdm/render_cdm_factory.h" | |
230 #endif | 230 #endif |
231 | 231 |
232 #if defined(ENABLE_MOJO_RENDERER) | 232 #if defined(ENABLE_MOJO_RENDERER) |
233 #include "media/mojo/services/mojo_renderer_factory.h" // nogncheck | 233 #include "media/mojo/services/mojo_renderer_factory.h" // nogncheck |
234 #else | 234 #else |
235 #include "media/renderers/default_renderer_factory.h" | 235 #include "media/renderers/default_renderer_factory.h" |
236 #endif | 236 #endif |
237 | 237 |
238 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) | 238 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) |
239 #include "media/mojo/services/mojo_decoder_factory.h" // nogncheck | 239 #include "media/mojo/services/mojo_decoder_factory.h" // nogncheck |
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
753 main_resource_ssl_status.security_bits != ssl_status.security_bits || | 753 main_resource_ssl_status.security_bits != ssl_status.security_bits || |
754 main_resource_ssl_status.connection_status != | 754 main_resource_ssl_status.connection_status != |
755 ssl_status.connection_status); | 755 ssl_status.connection_status); |
756 } | 756 } |
757 | 757 |
758 #if defined(OS_ANDROID) | 758 #if defined(OS_ANDROID) |
759 // Returns true if WMPI should be used for playback, false otherwise. | 759 // Returns true if WMPI should be used for playback, false otherwise. |
760 // | 760 // |
761 // Note that HLS and MP4 detection are pre-redirect and path-based. It is | 761 // Note that HLS and MP4 detection are pre-redirect and path-based. It is |
762 // possible to load such a URL and find different content. | 762 // possible to load such a URL and find different content. |
763 bool UseWebMediaPlayerImpl(blink::WebMediaPlayer::LoadType load_type, | 763 bool UseWebMediaPlayerImpl(const GURL& url) { |
764 const GURL& url) { | |
765 if (load_type == blink::WebMediaPlayer::LoadTypeMediaSource) | |
766 return media::IsUnifiedMediaPipelineEnabledForMse(); | |
767 | |
768 // WMPI does not support HLS. | 764 // WMPI does not support HLS. |
769 if (media::MediaCodecUtil::IsHLSPath(url)) | 765 if (media::MediaCodecUtil::IsHLSPath(url)) |
770 return false; | 766 return false; |
771 | 767 |
772 // Don't use WMPI if the container likely contains a codec we can't decode in | 768 // Don't use WMPI if the container likely contains a codec we can't decode in |
773 // software and hardware decoders are not available. | 769 // software and platform decoders are not available. |
774 if (base::EndsWith(url.path(), ".mp4", | 770 if (base::EndsWith(url.path(), ".mp4", |
775 base::CompareCase::INSENSITIVE_ASCII) && | 771 base::CompareCase::INSENSITIVE_ASCII) && |
776 !media::HasPlatformDecoderSupport()) { | 772 !media::HasPlatformDecoderSupport()) { |
777 return false; | 773 return false; |
778 } | 774 } |
779 | 775 |
780 // Otherwise enable WMPI if indicated via experiment or command line. | 776 // Otherwise enable WMPI if indicated via experiment or command line. |
781 return media::IsUnifiedMediaPipelineEnabled(); | 777 return media::IsUnifiedMediaPipelineEnabled(); |
782 } | 778 } |
783 #endif // defined(OS_ANDROID) | 779 #endif // defined(OS_ANDROID) |
784 | 780 |
| 781 #if defined(ENABLE_MOJO_CDM) |
| 782 // Returns whether mojo CDM should be used at runtime. Note that even when mojo |
| 783 // CDM is enabled at compile time (ENABLE_MOJO_CDM is defined), there are cases |
| 784 // where we want to choose other CDM types. For example, on Android when we use |
| 785 // WebMediaPlayerAndroid, we still want to use ProxyMediaKeys. In the future, |
| 786 // when we experiment mojo CDM on desktop, we will choose between mojo CDM and |
| 787 // pepper CDM at runtime. |
| 788 // TODO(xhwang): Remove this when we use mojo CDM for all remote CDM cases by |
| 789 // default. |
| 790 bool UseMojoCdm() { |
| 791 #if defined(OS_ANDROID) |
| 792 return media::IsUnifiedMediaPipelineEnabled(); |
| 793 #else |
| 794 return true; |
| 795 #endif |
| 796 } |
| 797 #endif // defined(ENABLE_MOJO_CDM) |
| 798 |
785 } // namespace | 799 } // namespace |
786 | 800 |
787 // static | 801 // static |
788 RenderFrameImpl* RenderFrameImpl::Create(RenderViewImpl* render_view, | 802 RenderFrameImpl* RenderFrameImpl::Create(RenderViewImpl* render_view, |
789 int32_t routing_id) { | 803 int32_t routing_id) { |
790 DCHECK(routing_id != MSG_ROUTING_NONE); | 804 DCHECK(routing_id != MSG_ROUTING_NONE); |
791 CreateParams params(render_view, routing_id); | 805 CreateParams params(render_view, routing_id); |
792 | 806 |
793 if (g_create_render_frame_impl) | 807 if (g_create_render_frame_impl) |
794 return g_create_render_frame_impl(params); | 808 return g_create_render_frame_impl(params); |
(...skipping 1580 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2375 | 2389 |
2376 WebPluginParams params_to_use = params; | 2390 WebPluginParams params_to_use = params; |
2377 params_to_use.mimeType = WebString::fromUTF8(mime_type); | 2391 params_to_use.mimeType = WebString::fromUTF8(mime_type); |
2378 return CreatePlugin(frame, info, params_to_use, nullptr /* throttler */); | 2392 return CreatePlugin(frame, info, params_to_use, nullptr /* throttler */); |
2379 #else | 2393 #else |
2380 return NULL; | 2394 return NULL; |
2381 #endif // defined(ENABLE_PLUGINS) | 2395 #endif // defined(ENABLE_PLUGINS) |
2382 } | 2396 } |
2383 | 2397 |
2384 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( | 2398 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( |
2385 blink::WebMediaPlayer::LoadType load_type, | |
2386 const blink::WebURL& url, | 2399 const blink::WebURL& url, |
2387 WebMediaPlayerClient* client, | 2400 WebMediaPlayerClient* client, |
2388 WebMediaPlayerEncryptedMediaClient* encrypted_client, | 2401 WebMediaPlayerEncryptedMediaClient* encrypted_client, |
2389 WebContentDecryptionModule* initial_cdm, | 2402 WebContentDecryptionModule* initial_cdm, |
2390 const blink::WebString& sink_id, | 2403 const blink::WebString& sink_id, |
2391 WebMediaSession* media_session) { | 2404 WebMediaSession* media_session) { |
2392 #if defined(VIDEO_HOLE) | 2405 #if defined(VIDEO_HOLE) |
2393 if (!contains_media_player_) { | 2406 if (!contains_media_player_) { |
2394 render_view_->RegisterVideoHoleFrame(this); | 2407 render_view_->RegisterVideoHoleFrame(this); |
2395 contains_media_player_ = true; | 2408 contains_media_player_ = true; |
(...skipping 26 matching lines...) Expand all Loading... |
2422 static_cast<RenderFrame*>(this), | 2435 static_cast<RenderFrame*>(this), |
2423 GetWebMediaPlayerDelegate()->has_played_media()), | 2436 GetWebMediaPlayerDelegate()->has_played_media()), |
2424 audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(), | 2437 audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(), |
2425 render_thread->GetWorkerTaskRunner(), | 2438 render_thread->GetWorkerTaskRunner(), |
2426 render_thread->compositor_task_runner(), context_3d_cb, | 2439 render_thread->compositor_task_runner(), context_3d_cb, |
2427 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, | 2440 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, |
2428 base::Unretained(blink::mainThreadIsolate())), | 2441 base::Unretained(blink::mainThreadIsolate())), |
2429 initial_cdm, media_surface_manager_, media_session); | 2442 initial_cdm, media_surface_manager_, media_session); |
2430 | 2443 |
2431 #if defined(OS_ANDROID) | 2444 #if defined(OS_ANDROID) |
2432 if (!UseWebMediaPlayerImpl(load_type, url)) | 2445 if (!UseWebMediaPlayerImpl(url)) |
2433 return CreateAndroidWebMediaPlayer(client, encrypted_client, params); | 2446 return CreateAndroidWebMediaPlayer(client, encrypted_client, params); |
2434 #endif // defined(OS_ANDROID) | 2447 #endif // defined(OS_ANDROID) |
2435 | 2448 |
2436 #if defined(ENABLE_MOJO_RENDERER) | 2449 #if defined(ENABLE_MOJO_RENDERER) |
2437 scoped_ptr<media::RendererFactory> media_renderer_factory( | 2450 scoped_ptr<media::RendererFactory> media_renderer_factory( |
2438 new media::MojoRendererFactory(GetMediaInterfaceProvider())); | 2451 new media::MojoRendererFactory(GetMediaInterfaceProvider())); |
2439 #else | 2452 #else |
2440 scoped_ptr<media::RendererFactory> media_renderer_factory = | 2453 scoped_ptr<media::RendererFactory> media_renderer_factory = |
2441 GetContentClient()->renderer()->CreateMediaRendererFactory( | 2454 GetContentClient()->renderer()->CreateMediaRendererFactory( |
2442 this, render_thread->GetGpuFactories(), media_log); | 2455 this, render_thread->GetGpuFactories(), media_log); |
(...skipping 3454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5897 #if defined(OS_ANDROID) | 5910 #if defined(OS_ANDROID) |
5898 // Hardware-secure codecs are only supported if secure surfaces are enabled. | 5911 // Hardware-secure codecs are only supported if secure surfaces are enabled. |
5899 return render_view_->renderer_preferences_ | 5912 return render_view_->renderer_preferences_ |
5900 .use_video_overlay_for_embedded_encrypted_video; | 5913 .use_video_overlay_for_embedded_encrypted_video; |
5901 #else | 5914 #else |
5902 return false; | 5915 return false; |
5903 #endif // defined(OS_ANDROID) | 5916 #endif // defined(OS_ANDROID) |
5904 } | 5917 } |
5905 | 5918 |
5906 media::CdmFactory* RenderFrameImpl::GetCdmFactory() { | 5919 media::CdmFactory* RenderFrameImpl::GetCdmFactory() { |
5907 #if defined(ENABLE_BROWSER_CDMS) | 5920 if (cdm_factory_) |
| 5921 return cdm_factory_.get(); |
| 5922 |
| 5923 #if defined(ENABLE_MOJO_CDM) |
| 5924 if (UseMojoCdm()) { |
| 5925 cdm_factory_.reset(new media::MojoCdmFactory(GetMediaInterfaceProvider())); |
| 5926 return cdm_factory_.get(); |
| 5927 } |
| 5928 #endif // defined(ENABLE_MOJO_CDM) |
| 5929 |
| 5930 #if defined(ENABLE_PEPPER_CDMS) |
| 5931 DCHECK(frame_); |
| 5932 cdm_factory_.reset( |
| 5933 new RenderCdmFactory(base::Bind(&PepperCdmWrapperImpl::Create, frame_))); |
| 5934 #elif defined(ENABLE_BROWSER_CDMS) |
5908 if (!cdm_manager_) | 5935 if (!cdm_manager_) |
5909 cdm_manager_ = new RendererCdmManager(this); | 5936 cdm_manager_ = new RendererCdmManager(this); |
5910 #endif // defined(ENABLE_BROWSER_CDMS) | 5937 cdm_factory_.reset(new RenderCdmFactory(cdm_manager_)); |
5911 | 5938 #endif // defined(ENABLE_PEPPER_CDMS) |
5912 if (!cdm_factory_) { | |
5913 DCHECK(frame_); | |
5914 | |
5915 #if defined(ENABLE_MOJO_CDM) | |
5916 cdm_factory_.reset(new media::MojoCdmFactory(GetMediaInterfaceProvider())); | |
5917 #else | |
5918 cdm_factory_.reset(new RenderCdmFactory( | |
5919 #if defined(ENABLE_PEPPER_CDMS) | |
5920 base::Bind(&PepperCdmWrapperImpl::Create, frame_) | |
5921 #elif defined(ENABLE_BROWSER_CDMS) | |
5922 cdm_manager_ | |
5923 #endif | |
5924 )); | |
5925 #endif // defined(ENABLE_MOJO_CDM) | |
5926 } | |
5927 | 5939 |
5928 return cdm_factory_.get(); | 5940 return cdm_factory_.get(); |
5929 } | 5941 } |
5930 | 5942 |
5931 media::DecoderFactory* RenderFrameImpl::GetDecoderFactory() { | 5943 media::DecoderFactory* RenderFrameImpl::GetDecoderFactory() { |
5932 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) | 5944 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) |
5933 if (!decoder_factory_) { | 5945 if (!decoder_factory_) { |
5934 decoder_factory_.reset( | 5946 decoder_factory_.reset( |
5935 new media::MojoDecoderFactory(GetMediaInterfaceProvider())); | 5947 new media::MojoDecoderFactory(GetMediaInterfaceProvider())); |
5936 } | 5948 } |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6001 int match_count, | 6013 int match_count, |
6002 int ordinal, | 6014 int ordinal, |
6003 const WebRect& selection_rect, | 6015 const WebRect& selection_rect, |
6004 bool final_status_update) { | 6016 bool final_status_update) { |
6005 Send(new FrameHostMsg_Find_Reply(routing_id_, request_id, match_count, | 6017 Send(new FrameHostMsg_Find_Reply(routing_id_, request_id, match_count, |
6006 selection_rect, ordinal, | 6018 selection_rect, ordinal, |
6007 final_status_update)); | 6019 final_status_update)); |
6008 } | 6020 } |
6009 | 6021 |
6010 } // namespace content | 6022 } // namespace content |
OLD | NEW |