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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 #include "gin/modules/console.h" | 153 #include "gin/modules/console.h" |
154 #include "gin/modules/module_registry.h" | 154 #include "gin/modules/module_registry.h" |
155 #include "gin/modules/timer.h" | 155 #include "gin/modules/timer.h" |
156 #include "media/audio/audio_output_device.h" | 156 #include "media/audio/audio_output_device.h" |
157 #include "media/base/audio_renderer_mixer_input.h" | 157 #include "media/base/audio_renderer_mixer_input.h" |
158 #include "media/base/cdm_factory.h" | 158 #include "media/base/cdm_factory.h" |
159 #include "media/base/decoder_factory.h" | 159 #include "media/base/decoder_factory.h" |
160 #include "media/base/media.h" | 160 #include "media/base/media.h" |
161 #include "media/base/media_log.h" | 161 #include "media/base/media_log.h" |
162 #include "media/base/media_switches.h" | 162 #include "media/base/media_switches.h" |
| 163 #include "media/base/renderer_factory_selector.h" |
163 #include "media/blink/url_index.h" | 164 #include "media/blink/url_index.h" |
164 #include "media/blink/webencryptedmediaclient_impl.h" | 165 #include "media/blink/webencryptedmediaclient_impl.h" |
165 #include "media/blink/webmediaplayer_impl.h" | 166 #include "media/blink/webmediaplayer_impl.h" |
166 #include "media/media_features.h" | 167 #include "media/media_features.h" |
167 #include "media/renderers/gpu_video_accelerator_factories.h" | 168 #include "media/renderers/gpu_video_accelerator_factories.h" |
168 #include "mojo/edk/js/core.h" | 169 #include "mojo/edk/js/core.h" |
169 #include "mojo/edk/js/support.h" | 170 #include "mojo/edk/js/support.h" |
170 #include "net/base/data_url.h" | 171 #include "net/base/data_url.h" |
171 #include "net/base/load_flags.h" | 172 #include "net/base/load_flags.h" |
172 #include "net/base/net_errors.h" | 173 #include "net/base/net_errors.h" |
(...skipping 2718 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2891 // a new player id which is used to collate logs on the browser side. | 2892 // a new player id which is used to collate logs on the browser side. |
2892 std::unique_ptr<media::MediaLog> media_log( | 2893 std::unique_ptr<media::MediaLog> media_log( |
2893 new RenderMediaLog(url::Origin(security_origin).GetURL())); | 2894 new RenderMediaLog(url::Origin(security_origin).GetURL())); |
2894 | 2895 |
2895 bool use_fallback_path = false; | 2896 bool use_fallback_path = false; |
2896 #if defined(OS_ANDROID) | 2897 #if defined(OS_ANDROID) |
2897 use_fallback_path = UseMediaPlayerRenderer(url); | 2898 use_fallback_path = UseMediaPlayerRenderer(url); |
2898 #endif // defined(OS_ANDROID) | 2899 #endif // defined(OS_ANDROID) |
2899 | 2900 |
2900 std::unique_ptr<media::RendererFactory> media_renderer_factory; | 2901 std::unique_ptr<media::RendererFactory> media_renderer_factory; |
| 2902 media::RendererFactorySelector::FactoryType factory_type; |
2901 if (use_fallback_path) { | 2903 if (use_fallback_path) { |
2902 #if defined(OS_ANDROID) | 2904 #if defined(OS_ANDROID) |
2903 auto mojo_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( | 2905 auto mojo_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( |
2904 media::MojoRendererFactory::GetGpuFactoriesCB(), | 2906 media::MojoRendererFactory::GetGpuFactoriesCB(), |
2905 GetRemoteInterfaces()->get()); | 2907 GetRemoteInterfaces()->get()); |
2906 | 2908 |
2907 media_renderer_factory = base::MakeUnique<MediaPlayerRendererClientFactory>( | 2909 media_renderer_factory = base::MakeUnique<MediaPlayerRendererClientFactory>( |
2908 render_thread->compositor_task_runner(), | 2910 render_thread->compositor_task_runner(), |
2909 std::move(mojo_renderer_factory), | 2911 std::move(mojo_renderer_factory), |
2910 base::Bind(&StreamTextureWrapperImpl::Create, | 2912 base::Bind(&StreamTextureWrapperImpl::Create, |
2911 render_thread->EnableStreamTextureCopy(), | 2913 render_thread->EnableStreamTextureCopy(), |
2912 render_thread->GetStreamTexureFactory(), | 2914 render_thread->GetStreamTexureFactory(), |
2913 base::ThreadTaskRunnerHandle::Get())); | 2915 base::ThreadTaskRunnerHandle::Get())); |
2914 #endif // defined(OS_ANDROID) | 2916 #endif // defined(OS_ANDROID) |
| 2917 |
| 2918 // TODO(tguilbert): Move this line back into an #if defined(OS_ANDROID). |
| 2919 // This will never be reached, unless we are on Android. Moving this line |
| 2920 // outside of the #if/#endif block fixes a "sometimes-uninitialized" error |
| 2921 // on desktop. This will be fixed with the next CL for crbug.com/663503. |
| 2922 factory_type = media::RendererFactorySelector::FactoryType::MEDIA_PLAYER; |
2915 } else { | 2923 } else { |
2916 #if defined(ENABLE_MOJO_RENDERER) | 2924 #if defined(ENABLE_MOJO_RENDERER) |
2917 #if BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) | 2925 #if BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) |
2918 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 2926 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
2919 switches::kDisableMojoRenderer)) { | 2927 switches::kDisableMojoRenderer)) { |
2920 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( | 2928 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( |
2921 media_log.get(), GetDecoderFactory(), | 2929 media_log.get(), GetDecoderFactory(), |
2922 base::Bind(&RenderThreadImpl::GetGpuFactories, | 2930 base::Bind(&RenderThreadImpl::GetGpuFactories, |
2923 base::Unretained(render_thread))); | 2931 base::Unretained(render_thread))); |
| 2932 |
| 2933 factory_type = media::RendererFactorySelector::FactoryType::DEFAULT; |
2924 } | 2934 } |
2925 #endif // BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) | 2935 #endif // BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) |
2926 if (!media_renderer_factory) { | 2936 if (!media_renderer_factory) { |
2927 media_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( | 2937 media_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( |
2928 base::Bind(&RenderThreadImpl::GetGpuFactories, | 2938 base::Bind(&RenderThreadImpl::GetGpuFactories, |
2929 base::Unretained(render_thread)), | 2939 base::Unretained(render_thread)), |
2930 GetMediaInterfaceProvider()); | 2940 GetMediaInterfaceProvider()); |
| 2941 |
| 2942 factory_type = media::RendererFactorySelector::FactoryType::MOJO; |
2931 } | 2943 } |
2932 #else | 2944 #else |
2933 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( | 2945 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( |
2934 media_log.get(), GetDecoderFactory(), | 2946 media_log.get(), GetDecoderFactory(), |
2935 base::Bind(&RenderThreadImpl::GetGpuFactories, | 2947 base::Bind(&RenderThreadImpl::GetGpuFactories, |
2936 base::Unretained(render_thread))); | 2948 base::Unretained(render_thread))); |
| 2949 |
| 2950 factory_type = media::RendererFactorySelector::FactoryType::DEFAULT; |
2937 #endif // defined(ENABLE_MOJO_RENDERER) | 2951 #endif // defined(ENABLE_MOJO_RENDERER) |
2938 } | 2952 } |
2939 | 2953 |
2940 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) | 2954 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) |
2941 media_renderer_factory = | 2955 media_renderer_factory = |
2942 base::MakeUnique<media::remoting::AdaptiveRendererFactory>( | 2956 base::MakeUnique<media::remoting::AdaptiveRendererFactory>( |
2943 std::move(media_renderer_factory), std::move(remoting_controller)); | 2957 std::move(media_renderer_factory), std::move(remoting_controller)); |
| 2958 |
| 2959 factory_type = media::RendererFactorySelector::FactoryType::ADAPTIVE; |
2944 #endif | 2960 #endif |
2945 | 2961 |
2946 if (!url_index_.get() || url_index_->frame() != frame_) | 2962 if (!url_index_.get() || url_index_->frame() != frame_) |
2947 url_index_.reset(new media::UrlIndex(frame_)); | 2963 url_index_.reset(new media::UrlIndex(frame_)); |
2948 | 2964 |
| 2965 auto factory_selector = base::MakeUnique<media::RendererFactorySelector>(); |
| 2966 |
| 2967 factory_selector->AddFactory(factory_type, std::move(media_renderer_factory)); |
| 2968 factory_selector->SetBaseFactoryType(factory_type); |
| 2969 |
2949 std::unique_ptr<media::WebMediaPlayerParams> params( | 2970 std::unique_ptr<media::WebMediaPlayerParams> params( |
2950 new media::WebMediaPlayerParams( | 2971 new media::WebMediaPlayerParams( |
2951 std::move(media_log), | 2972 std::move(media_log), |
2952 base::Bind(&ContentRendererClient::DeferMediaLoad, | 2973 base::Bind(&ContentRendererClient::DeferMediaLoad, |
2953 base::Unretained(GetContentClient()->renderer()), | 2974 base::Unretained(GetContentClient()->renderer()), |
2954 static_cast<RenderFrame*>(this), | 2975 static_cast<RenderFrame*>(this), |
2955 GetWebMediaPlayerDelegate()->has_played_media()), | 2976 GetWebMediaPlayerDelegate()->has_played_media()), |
2956 audio_renderer_sink, render_thread->GetMediaThreadTaskRunner(), | 2977 audio_renderer_sink, render_thread->GetMediaThreadTaskRunner(), |
2957 render_thread->GetWorkerTaskRunner(), | 2978 render_thread->GetWorkerTaskRunner(), |
2958 render_thread->compositor_task_runner(), context_3d_cb, | 2979 render_thread->compositor_task_runner(), context_3d_cb, |
2959 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, | 2980 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, |
2960 base::Unretained(blink::MainThreadIsolate())), | 2981 base::Unretained(blink::MainThreadIsolate())), |
2961 initial_cdm, media_surface_manager_, media_observer, | 2982 initial_cdm, media_surface_manager_, media_observer, |
2962 max_keyframe_distance_to_disable_background_video, | 2983 max_keyframe_distance_to_disable_background_video, |
2963 max_keyframe_distance_to_disable_background_video_mse, | 2984 max_keyframe_distance_to_disable_background_video_mse, |
2964 GetWebkitPreferences().enable_instant_source_buffer_gc, | 2985 GetWebkitPreferences().enable_instant_source_buffer_gc, |
2965 GetContentClient()->renderer()->AllowMediaSuspend(), | 2986 GetContentClient()->renderer()->AllowMediaSuspend(), |
2966 embedded_media_experience_enabled)); | 2987 embedded_media_experience_enabled)); |
2967 | 2988 |
2968 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( | 2989 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( |
2969 frame_, client, encrypted_client, GetWebMediaPlayerDelegate(), | 2990 frame_, client, encrypted_client, GetWebMediaPlayerDelegate(), |
2970 std::move(media_renderer_factory), url_index_, std::move(params)); | 2991 std::move(factory_selector), url_index_, std::move(params)); |
2971 | 2992 |
2972 #if defined(OS_ANDROID) // WMPI_CAST | 2993 #if defined(OS_ANDROID) // WMPI_CAST |
2973 media_player->SetMediaPlayerManager(GetMediaPlayerManager()); | 2994 media_player->SetMediaPlayerManager(GetMediaPlayerManager()); |
2974 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor()); | 2995 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor()); |
2975 media_player->SetUseFallbackPath(use_fallback_path); | 2996 media_player->SetUseFallbackPath(use_fallback_path); |
2976 #endif // defined(OS_ANDROID) | 2997 #endif // defined(OS_ANDROID) |
2977 | 2998 |
2978 return media_player; | 2999 return media_player; |
2979 } | 3000 } |
2980 | 3001 |
(...skipping 4024 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7005 policy(info.default_policy), | 7026 policy(info.default_policy), |
7006 replaces_current_history_item(info.replaces_current_history_item), | 7027 replaces_current_history_item(info.replaces_current_history_item), |
7007 history_navigation_in_new_child_frame( | 7028 history_navigation_in_new_child_frame( |
7008 info.is_history_navigation_in_new_child_frame), | 7029 info.is_history_navigation_in_new_child_frame), |
7009 client_redirect(info.is_client_redirect), | 7030 client_redirect(info.is_client_redirect), |
7010 cache_disabled(info.is_cache_disabled), | 7031 cache_disabled(info.is_cache_disabled), |
7011 form(info.form), | 7032 form(info.form), |
7012 source_location(info.source_location) {} | 7033 source_location(info.source_location) {} |
7013 | 7034 |
7014 } // namespace content | 7035 } // namespace content |
OLD | NEW |