Chromium Code Reviews| 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) { |
|
DaleCurtis
2016/03/23 17:51:54
I wonder if we should have a if (!url.isHttpOrHttp
xhwang
2016/03/24 21:26:04
For HLS, this is kinda covered in IsHLSPath().
Fo
wolenetz
2016/03/24 22:16:26
There should be no blob URL containing trailing .m
| |
| 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 hardware decoders are not available. |
|
ddorwin
2016/03/24 18:05:11
s/hardware/platform/
xhwang
2016/03/24 21:26:03
Done.
| |
| 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 } |
|
xhwang
2016/03/23 16:35:54
ddorwin: So for HLS and .mp4 URL we'll still use m
DaleCurtis
2016/03/23 17:51:54
At least for mp4, this is only in the case that we
ddorwin
2016/03/24 18:05:11
For HLS, it doesn't make sense to use EME, so that
DaleCurtis
2016/03/24 18:09:10
Even if we "fixed" that bug for desktop/unified pa
xhwang
2016/03/24 21:26:03
MojoCdmFactory actually support Clear Key [1]. Thi
ddorwin
2016/03/24 21:43:49
Unencrypted or Clear Key AAC does not require a de
xhwang
2016/03/24 22:37:23
Good catch. We'll need to detect more to fix these
| |
| 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 |
| 785 } // namespace | 781 } // namespace |
| 786 | 782 |
| 787 // static | 783 // static |
| 788 RenderFrameImpl* RenderFrameImpl::Create(RenderViewImpl* render_view, | 784 RenderFrameImpl* RenderFrameImpl::Create(RenderViewImpl* render_view, |
| (...skipping 1586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2375 | 2371 |
| 2376 WebPluginParams params_to_use = params; | 2372 WebPluginParams params_to_use = params; |
| 2377 params_to_use.mimeType = WebString::fromUTF8(mime_type); | 2373 params_to_use.mimeType = WebString::fromUTF8(mime_type); |
| 2378 return CreatePlugin(frame, info, params_to_use, nullptr /* throttler */); | 2374 return CreatePlugin(frame, info, params_to_use, nullptr /* throttler */); |
| 2379 #else | 2375 #else |
| 2380 return NULL; | 2376 return NULL; |
| 2381 #endif // defined(ENABLE_PLUGINS) | 2377 #endif // defined(ENABLE_PLUGINS) |
| 2382 } | 2378 } |
| 2383 | 2379 |
| 2384 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( | 2380 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( |
| 2385 blink::WebMediaPlayer::LoadType load_type, | |
| 2386 const blink::WebURL& url, | 2381 const blink::WebURL& url, |
| 2387 WebMediaPlayerClient* client, | 2382 WebMediaPlayerClient* client, |
| 2388 WebMediaPlayerEncryptedMediaClient* encrypted_client, | 2383 WebMediaPlayerEncryptedMediaClient* encrypted_client, |
| 2389 WebContentDecryptionModule* initial_cdm, | 2384 WebContentDecryptionModule* initial_cdm, |
| 2390 const blink::WebString& sink_id, | 2385 const blink::WebString& sink_id, |
| 2391 WebMediaSession* media_session) { | 2386 WebMediaSession* media_session) { |
| 2392 #if defined(VIDEO_HOLE) | 2387 #if defined(VIDEO_HOLE) |
| 2393 if (!contains_media_player_) { | 2388 if (!contains_media_player_) { |
| 2394 render_view_->RegisterVideoHoleFrame(this); | 2389 render_view_->RegisterVideoHoleFrame(this); |
| 2395 contains_media_player_ = true; | 2390 contains_media_player_ = true; |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 2422 static_cast<RenderFrame*>(this), | 2417 static_cast<RenderFrame*>(this), |
| 2423 GetWebMediaPlayerDelegate()->has_played_media()), | 2418 GetWebMediaPlayerDelegate()->has_played_media()), |
| 2424 audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(), | 2419 audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(), |
| 2425 render_thread->GetWorkerTaskRunner(), | 2420 render_thread->GetWorkerTaskRunner(), |
| 2426 render_thread->compositor_task_runner(), context_3d_cb, | 2421 render_thread->compositor_task_runner(), context_3d_cb, |
| 2427 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, | 2422 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, |
| 2428 base::Unretained(blink::mainThreadIsolate())), | 2423 base::Unretained(blink::mainThreadIsolate())), |
| 2429 initial_cdm, media_surface_manager_, media_session); | 2424 initial_cdm, media_surface_manager_, media_session); |
| 2430 | 2425 |
| 2431 #if defined(OS_ANDROID) | 2426 #if defined(OS_ANDROID) |
| 2432 if (!UseWebMediaPlayerImpl(load_type, url)) | 2427 if (!UseWebMediaPlayerImpl(url)) |
| 2433 return CreateAndroidWebMediaPlayer(client, encrypted_client, params); | 2428 return CreateAndroidWebMediaPlayer(client, encrypted_client, params); |
| 2434 #endif // defined(OS_ANDROID) | 2429 #endif // defined(OS_ANDROID) |
| 2435 | 2430 |
| 2436 #if defined(ENABLE_MOJO_RENDERER) | 2431 #if defined(ENABLE_MOJO_RENDERER) |
| 2437 scoped_ptr<media::RendererFactory> media_renderer_factory( | 2432 scoped_ptr<media::RendererFactory> media_renderer_factory( |
| 2438 new media::MojoRendererFactory(GetMediaInterfaceProvider())); | 2433 new media::MojoRendererFactory(GetMediaInterfaceProvider())); |
| 2439 #else | 2434 #else |
| 2440 scoped_ptr<media::RendererFactory> media_renderer_factory = | 2435 scoped_ptr<media::RendererFactory> media_renderer_factory = |
| 2441 GetContentClient()->renderer()->CreateMediaRendererFactory( | 2436 GetContentClient()->renderer()->CreateMediaRendererFactory( |
| 2442 this, render_thread->GetGpuFactories(), media_log); | 2437 this, render_thread->GetGpuFactories(), media_log); |
| (...skipping 3454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5897 #if defined(OS_ANDROID) | 5892 #if defined(OS_ANDROID) |
| 5898 // Hardware-secure codecs are only supported if secure surfaces are enabled. | 5893 // Hardware-secure codecs are only supported if secure surfaces are enabled. |
| 5899 return render_view_->renderer_preferences_ | 5894 return render_view_->renderer_preferences_ |
| 5900 .use_video_overlay_for_embedded_encrypted_video; | 5895 .use_video_overlay_for_embedded_encrypted_video; |
| 5901 #else | 5896 #else |
| 5902 return false; | 5897 return false; |
| 5903 #endif // defined(OS_ANDROID) | 5898 #endif // defined(OS_ANDROID) |
| 5904 } | 5899 } |
| 5905 | 5900 |
| 5906 media::CdmFactory* RenderFrameImpl::GetCdmFactory() { | 5901 media::CdmFactory* RenderFrameImpl::GetCdmFactory() { |
| 5907 #if defined(ENABLE_BROWSER_CDMS) | 5902 if (cdm_factory_) |
| 5903 return cdm_factory_.get(); | |
| 5904 | |
| 5905 #if defined(ENABLE_MOJO_CDM) | |
| 5906 if (media::IsMojoCdmEnabled()) { | |
|
Tima Vaisburd
2016/03/23 19:27:52
It looks like if ENABLE_MOJO_CDM is defined, and m
xhwang
2016/03/23 20:44:06
Today we have ENABLE_BROWSER_CDMS enabled by defau
| |
| 5907 cdm_factory_.reset(new media::MojoCdmFactory(GetMediaInterfaceProvider())); | |
| 5908 return cdm_factory_.get(); | |
| 5909 } | |
| 5910 #endif // defined(ENABLE_MOJO_CDM) | |
| 5911 | |
| 5912 #if defined(ENABLE_PEPPER_CDMS) | |
| 5913 DCHECK(frame_); | |
| 5914 cdm_factory_.reset( | |
| 5915 new RenderCdmFactory(base::Bind(&PepperCdmWrapperImpl::Create, frame_))); | |
| 5916 #elif defined(ENABLE_BROWSER_CDMS) | |
| 5908 if (!cdm_manager_) | 5917 if (!cdm_manager_) |
| 5909 cdm_manager_ = new RendererCdmManager(this); | 5918 cdm_manager_ = new RendererCdmManager(this); |
| 5910 #endif // defined(ENABLE_BROWSER_CDMS) | 5919 cdm_factory_.reset(new RenderCdmFactory(cdm_manager_)); |
| 5911 | 5920 #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 | 5921 |
| 5928 return cdm_factory_.get(); | 5922 return cdm_factory_.get(); |
| 5929 } | 5923 } |
| 5930 | 5924 |
| 5931 media::DecoderFactory* RenderFrameImpl::GetDecoderFactory() { | 5925 media::DecoderFactory* RenderFrameImpl::GetDecoderFactory() { |
| 5932 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) | 5926 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) |
| 5933 if (!decoder_factory_) { | 5927 if (!decoder_factory_) { |
| 5934 decoder_factory_.reset( | 5928 decoder_factory_.reset( |
| 5935 new media::MojoDecoderFactory(GetMediaInterfaceProvider())); | 5929 new media::MojoDecoderFactory(GetMediaInterfaceProvider())); |
| 5936 } | 5930 } |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6001 int match_count, | 5995 int match_count, |
| 6002 int ordinal, | 5996 int ordinal, |
| 6003 const WebRect& selection_rect, | 5997 const WebRect& selection_rect, |
| 6004 bool final_status_update) { | 5998 bool final_status_update) { |
| 6005 Send(new FrameHostMsg_Find_Reply(routing_id_, request_id, match_count, | 5999 Send(new FrameHostMsg_Find_Reply(routing_id_, request_id, match_count, |
| 6006 selection_rect, ordinal, | 6000 selection_rect, ordinal, |
| 6007 final_status_update)); | 6001 final_status_update)); |
| 6008 } | 6002 } |
| 6009 | 6003 |
| 6010 } // namespace content | 6004 } // namespace content |
| OLD | NEW |