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 2825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2836 sink_id.Utf8(), security_origin); | 2836 sink_id.Utf8(), security_origin); |
2837 // We need to keep a reference to the context provider (see crbug.com/610527) | 2837 // We need to keep a reference to the context provider (see crbug.com/610527) |
2838 // but media/ can't depend on cc/, so for now, just keep a reference in the | 2838 // but media/ can't depend on cc/, so for now, just keep a reference in the |
2839 // callback. | 2839 // callback. |
2840 // TODO(piman): replace media::Context3D to scoped_refptr<ContextProvider> in | 2840 // TODO(piman): replace media::Context3D to scoped_refptr<ContextProvider> in |
2841 // media/ once ContextProvider is in gpu/. | 2841 // media/ once ContextProvider is in gpu/. |
2842 media::WebMediaPlayerParams::Context3DCB context_3d_cb = base::Bind( | 2842 media::WebMediaPlayerParams::Context3DCB context_3d_cb = base::Bind( |
2843 &GetSharedMainThreadContext3D, | 2843 &GetSharedMainThreadContext3D, |
2844 RenderThreadImpl::current()->SharedMainThreadContextProvider()); | 2844 RenderThreadImpl::current()->SharedMainThreadContextProvider()); |
2845 | 2845 |
2846 // This must be created for every new WebMediaPlayer, each instance generates | |
2847 // a new player id which is used to collate logs on the browser side. | |
2848 // TODO(chcunningham, dalecurtis): This should be switched to a unique_ptr | |
2849 // owned by WebMediaPlayer to avoid this confusion. http://crbug.com/711818. | |
2850 scoped_refptr<media::MediaLog> media_log( | |
2851 new RenderMediaLog(url::Origin(security_origin).GetURL())); | |
2852 | |
2853 bool embedded_media_experience_enabled = false; | 2846 bool embedded_media_experience_enabled = false; |
2854 #if defined(OS_ANDROID) | 2847 #if defined(OS_ANDROID) |
2855 if (!UseMediaPlayerRenderer(url) && !media_surface_manager_) | 2848 if (!UseMediaPlayerRenderer(url) && !media_surface_manager_) |
2856 media_surface_manager_ = new RendererSurfaceViewManager(this); | 2849 media_surface_manager_ = new RendererSurfaceViewManager(this); |
2857 embedded_media_experience_enabled = | 2850 embedded_media_experience_enabled = |
2858 GetWebkitPreferences().embedded_media_experience_enabled; | 2851 GetWebkitPreferences().embedded_media_experience_enabled; |
2859 #endif // defined(OS_ANDROID) | 2852 #endif // defined(OS_ANDROID) |
2860 | 2853 |
2861 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) | 2854 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) |
2862 media::mojom::RemotingSourcePtr remoting_source; | 2855 media::mojom::RemotingSourcePtr remoting_source; |
(...skipping 14 matching lines...) Expand all Loading... |
2877 base::TimeDelta max_keyframe_distance_to_disable_background_video = | 2870 base::TimeDelta max_keyframe_distance_to_disable_background_video = |
2878 base::TimeDelta::FromMilliseconds(base::GetFieldTrialParamByFeatureAsInt( | 2871 base::TimeDelta::FromMilliseconds(base::GetFieldTrialParamByFeatureAsInt( |
2879 media::kBackgroundVideoTrackOptimization, "max_keyframe_distance_ms", | 2872 media::kBackgroundVideoTrackOptimization, "max_keyframe_distance_ms", |
2880 base::TimeDelta::FromSeconds(10).InMilliseconds())); | 2873 base::TimeDelta::FromSeconds(10).InMilliseconds())); |
2881 base::TimeDelta max_keyframe_distance_to_disable_background_video_mse = | 2874 base::TimeDelta max_keyframe_distance_to_disable_background_video_mse = |
2882 base::TimeDelta::FromMilliseconds(base::GetFieldTrialParamByFeatureAsInt( | 2875 base::TimeDelta::FromMilliseconds(base::GetFieldTrialParamByFeatureAsInt( |
2883 media::kBackgroundVideoTrackOptimization, | 2876 media::kBackgroundVideoTrackOptimization, |
2884 "max_keyframe_distance_media_source_ms", | 2877 "max_keyframe_distance_media_source_ms", |
2885 base::TimeDelta::FromSeconds(10).InMilliseconds())); | 2878 base::TimeDelta::FromSeconds(10).InMilliseconds())); |
2886 | 2879 |
2887 media::WebMediaPlayerParams params( | 2880 // This must be created for every new WebMediaPlayer, each instance generates |
2888 base::Bind(&ContentRendererClient::DeferMediaLoad, | 2881 // a new player id which is used to collate logs on the browser side. |
2889 base::Unretained(GetContentClient()->renderer()), | 2882 std::unique_ptr<media::MediaLog> media_log( |
2890 static_cast<RenderFrame*>(this), | 2883 new RenderMediaLog(url::Origin(security_origin).GetURL())); |
2891 GetWebMediaPlayerDelegate()->has_played_media()), | |
2892 audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(), | |
2893 render_thread->GetWorkerTaskRunner(), | |
2894 render_thread->compositor_task_runner(), context_3d_cb, | |
2895 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, | |
2896 base::Unretained(blink::MainThreadIsolate())), | |
2897 initial_cdm, media_surface_manager_, media_observer, | |
2898 max_keyframe_distance_to_disable_background_video, | |
2899 max_keyframe_distance_to_disable_background_video_mse, | |
2900 GetWebkitPreferences().enable_instant_source_buffer_gc, | |
2901 GetContentClient()->renderer()->AllowMediaSuspend(), | |
2902 embedded_media_experience_enabled); | |
2903 | 2884 |
2904 bool use_fallback_path = false; | 2885 bool use_fallback_path = false; |
2905 #if defined(OS_ANDROID) | 2886 #if defined(OS_ANDROID) |
2906 use_fallback_path = UseMediaPlayerRenderer(url); | 2887 use_fallback_path = UseMediaPlayerRenderer(url); |
2907 #endif // defined(OS_ANDROID) | 2888 #endif // defined(OS_ANDROID) |
2908 | 2889 |
2909 std::unique_ptr<media::RendererFactory> media_renderer_factory; | 2890 std::unique_ptr<media::RendererFactory> media_renderer_factory; |
2910 if (use_fallback_path) { | 2891 if (use_fallback_path) { |
2911 #if defined(OS_ANDROID) | 2892 #if defined(OS_ANDROID) |
2912 auto mojo_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( | 2893 auto mojo_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( |
2913 media::MojoRendererFactory::GetGpuFactoriesCB(), | 2894 media::MojoRendererFactory::GetGpuFactoriesCB(), |
2914 GetRemoteInterfaces()->get()); | 2895 GetRemoteInterfaces()->get()); |
2915 | 2896 |
2916 media_renderer_factory = base::MakeUnique<MediaPlayerRendererClientFactory>( | 2897 media_renderer_factory = base::MakeUnique<MediaPlayerRendererClientFactory>( |
2917 render_thread->compositor_task_runner(), | 2898 render_thread->compositor_task_runner(), |
2918 std::move(mojo_renderer_factory), | 2899 std::move(mojo_renderer_factory), |
2919 base::Bind(&StreamTextureWrapperImpl::Create, | 2900 base::Bind(&StreamTextureWrapperImpl::Create, |
2920 render_thread->EnableStreamTextureCopy(), | 2901 render_thread->EnableStreamTextureCopy(), |
2921 render_thread->GetStreamTexureFactory(), | 2902 render_thread->GetStreamTexureFactory(), |
2922 base::ThreadTaskRunnerHandle::Get())); | 2903 base::ThreadTaskRunnerHandle::Get())); |
2923 #endif // defined(OS_ANDROID) | 2904 #endif // defined(OS_ANDROID) |
2924 } else { | 2905 } else { |
2925 #if defined(ENABLE_MOJO_RENDERER) | 2906 #if defined(ENABLE_MOJO_RENDERER) |
2926 #if BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) | 2907 #if BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) |
2927 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 2908 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
2928 switches::kDisableMojoRenderer)) { | 2909 switches::kDisableMojoRenderer)) { |
2929 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( | 2910 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( |
2930 media_log, GetDecoderFactory(), | 2911 media_log.get(), GetDecoderFactory(), |
2931 base::Bind(&RenderThreadImpl::GetGpuFactories, | 2912 base::Bind(&RenderThreadImpl::GetGpuFactories, |
2932 base::Unretained(render_thread))); | 2913 base::Unretained(render_thread))); |
2933 } | 2914 } |
2934 #endif // BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) | 2915 #endif // BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) |
2935 if (!media_renderer_factory) { | 2916 if (!media_renderer_factory) { |
2936 media_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( | 2917 media_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( |
2937 base::Bind(&RenderThreadImpl::GetGpuFactories, | 2918 base::Bind(&RenderThreadImpl::GetGpuFactories, |
2938 base::Unretained(render_thread)), | 2919 base::Unretained(render_thread)), |
2939 GetMediaInterfaceProvider()); | 2920 GetMediaInterfaceProvider()); |
2940 } | 2921 } |
2941 #else | 2922 #else |
2942 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( | 2923 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( |
2943 media_log, GetDecoderFactory(), | 2924 media_log.get(), GetDecoderFactory(), |
2944 base::Bind(&RenderThreadImpl::GetGpuFactories, | 2925 base::Bind(&RenderThreadImpl::GetGpuFactories, |
2945 base::Unretained(render_thread))); | 2926 base::Unretained(render_thread))); |
2946 #endif // defined(ENABLE_MOJO_RENDERER) | 2927 #endif // defined(ENABLE_MOJO_RENDERER) |
2947 } | 2928 } |
2948 | 2929 |
2949 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) | 2930 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) |
2950 auto* const remoting_controller_ptr = remoting_controller.get(); | 2931 auto* const remoting_controller_ptr = remoting_controller.get(); |
2951 media_renderer_factory = | 2932 media_renderer_factory = |
2952 base::MakeUnique<media::remoting::AdaptiveRendererFactory>( | 2933 base::MakeUnique<media::remoting::AdaptiveRendererFactory>( |
2953 std::move(media_renderer_factory), std::move(remoting_controller)); | 2934 std::move(media_renderer_factory), std::move(remoting_controller)); |
2954 #endif | 2935 #endif |
2955 | 2936 |
2956 if (!url_index_.get() || url_index_->frame() != frame_) | 2937 if (!url_index_.get() || url_index_->frame() != frame_) |
2957 url_index_.reset(new media::UrlIndex(frame_)); | 2938 url_index_.reset(new media::UrlIndex(frame_)); |
2958 | 2939 |
| 2940 std::unique_ptr<media::WebMediaPlayerParams> params( |
| 2941 new media::WebMediaPlayerParams( |
| 2942 std::move(media_log), |
| 2943 base::Bind(&ContentRendererClient::DeferMediaLoad, |
| 2944 base::Unretained(GetContentClient()->renderer()), |
| 2945 static_cast<RenderFrame*>(this), |
| 2946 GetWebMediaPlayerDelegate()->has_played_media()), |
| 2947 audio_renderer_sink, render_thread->GetMediaThreadTaskRunner(), |
| 2948 render_thread->GetWorkerTaskRunner(), |
| 2949 render_thread->compositor_task_runner(), context_3d_cb, |
| 2950 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, |
| 2951 base::Unretained(blink::MainThreadIsolate())), |
| 2952 initial_cdm, media_surface_manager_, media_observer, |
| 2953 max_keyframe_distance_to_disable_background_video, |
| 2954 max_keyframe_distance_to_disable_background_video_mse, |
| 2955 GetWebkitPreferences().enable_instant_source_buffer_gc, |
| 2956 GetContentClient()->renderer()->AllowMediaSuspend(), |
| 2957 embedded_media_experience_enabled)); |
| 2958 |
2959 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( | 2959 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( |
2960 frame_, client, encrypted_client, GetWebMediaPlayerDelegate(), | 2960 frame_, client, encrypted_client, GetWebMediaPlayerDelegate(), |
2961 std::move(media_renderer_factory), url_index_, params); | 2961 std::move(media_renderer_factory), url_index_, std::move(params)); |
2962 | 2962 |
2963 #if defined(OS_ANDROID) // WMPI_CAST | 2963 #if defined(OS_ANDROID) // WMPI_CAST |
2964 media_player->SetMediaPlayerManager(GetMediaPlayerManager()); | 2964 media_player->SetMediaPlayerManager(GetMediaPlayerManager()); |
2965 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor()); | 2965 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor()); |
2966 media_player->SetUseFallbackPath(use_fallback_path); | 2966 media_player->SetUseFallbackPath(use_fallback_path); |
2967 #endif // defined(OS_ANDROID) | 2967 #endif // defined(OS_ANDROID) |
2968 | 2968 |
2969 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) | 2969 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) |
2970 remoting_controller_ptr->SetDownloadPosterCallback(base::Bind( | 2970 remoting_controller_ptr->SetDownloadPosterCallback(base::Bind( |
2971 &SingleImageDownloader::DownloadImage, weak_factory_.GetWeakPtr())); | 2971 &SingleImageDownloader::DownloadImage, weak_factory_.GetWeakPtr())); |
(...skipping 3324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6296 #if BUILDFLAG(ENABLE_WEBRTC) | 6296 #if BUILDFLAG(ENABLE_WEBRTC) |
6297 RenderThreadImpl* const render_thread = RenderThreadImpl::current(); | 6297 RenderThreadImpl* const render_thread = RenderThreadImpl::current(); |
6298 | 6298 |
6299 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner = | 6299 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner = |
6300 render_thread->compositor_task_runner(); | 6300 render_thread->compositor_task_runner(); |
6301 if (!compositor_task_runner.get()) | 6301 if (!compositor_task_runner.get()) |
6302 compositor_task_runner = base::ThreadTaskRunnerHandle::Get(); | 6302 compositor_task_runner = base::ThreadTaskRunnerHandle::Get(); |
6303 | 6303 |
6304 return new WebMediaPlayerMS( | 6304 return new WebMediaPlayerMS( |
6305 frame_, client, GetWebMediaPlayerDelegate(), | 6305 frame_, client, GetWebMediaPlayerDelegate(), |
6306 new RenderMediaLog(url::Origin(security_origin).GetURL()), | 6306 base::MakeUnique<RenderMediaLog>(url::Origin(security_origin).GetURL()), |
6307 CreateRendererFactory(), render_thread->GetIOTaskRunner(), | 6307 CreateRendererFactory(), render_thread->GetIOTaskRunner(), |
6308 compositor_task_runner, render_thread->GetMediaThreadTaskRunner(), | 6308 compositor_task_runner, render_thread->GetMediaThreadTaskRunner(), |
6309 render_thread->GetWorkerTaskRunner(), render_thread->GetGpuFactories(), | 6309 render_thread->GetWorkerTaskRunner(), render_thread->GetGpuFactories(), |
6310 sink_id, security_origin); | 6310 sink_id, security_origin); |
6311 #else | 6311 #else |
6312 return NULL; | 6312 return NULL; |
6313 #endif // BUILDFLAG(ENABLE_WEBRTC) | 6313 #endif // BUILDFLAG(ENABLE_WEBRTC) |
6314 } | 6314 } |
6315 | 6315 |
6316 std::unique_ptr<MediaStreamRendererFactory> | 6316 std::unique_ptr<MediaStreamRendererFactory> |
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6991 policy(info.default_policy), | 6991 policy(info.default_policy), |
6992 replaces_current_history_item(info.replaces_current_history_item), | 6992 replaces_current_history_item(info.replaces_current_history_item), |
6993 history_navigation_in_new_child_frame( | 6993 history_navigation_in_new_child_frame( |
6994 info.is_history_navigation_in_new_child_frame), | 6994 info.is_history_navigation_in_new_child_frame), |
6995 client_redirect(info.is_client_redirect), | 6995 client_redirect(info.is_client_redirect), |
6996 cache_disabled(info.is_cache_disabled), | 6996 cache_disabled(info.is_cache_disabled), |
6997 form(info.form), | 6997 form(info.form), |
6998 source_location(info.source_location) {} | 6998 source_location(info.source_location) {} |
6999 | 6999 |
7000 } // namespace content | 7000 } // namespace content |
OLD | NEW |