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