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

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: 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
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) {
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
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
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
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
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
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | media/base/media.h » ('j') | media/base/media.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698