Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 1825763002: media: Enable Unified Media Pipeline for MSE and EME on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | media/base/media.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | media/base/media.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698