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 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 #include "content/renderer/skia_benchmarking_extension.h" | 125 #include "content/renderer/skia_benchmarking_extension.h" |
126 #include "content/renderer/stats_collection_controller.h" | 126 #include "content/renderer/stats_collection_controller.h" |
127 #include "content/renderer/usb/web_usb_client_impl.h" | 127 #include "content/renderer/usb/web_usb_client_impl.h" |
128 #include "content/renderer/wake_lock/wake_lock_dispatcher.h" | 128 #include "content/renderer/wake_lock/wake_lock_dispatcher.h" |
129 #include "content/renderer/web_frame_utils.h" | 129 #include "content/renderer/web_frame_utils.h" |
130 #include "content/renderer/web_ui_extension.h" | 130 #include "content/renderer/web_ui_extension.h" |
131 #include "content/renderer/websharedworker_proxy.h" | 131 #include "content/renderer/websharedworker_proxy.h" |
132 #include "crypto/sha2.h" | 132 #include "crypto/sha2.h" |
133 #include "gin/modules/module_registry.h" | 133 #include "gin/modules/module_registry.h" |
134 #include "media/audio/audio_output_device.h" | 134 #include "media/audio/audio_output_device.h" |
| 135 #include "media/base/android/media_codec_util.h" |
135 #include "media/base/audio_renderer_mixer_input.h" | 136 #include "media/base/audio_renderer_mixer_input.h" |
136 #include "media/base/media_log.h" | 137 #include "media/base/media_log.h" |
137 #include "media/base/media_switches.h" | 138 #include "media/base/media_switches.h" |
138 #include "media/blink/url_index.h" | 139 #include "media/blink/url_index.h" |
139 #include "media/blink/webencryptedmediaclient_impl.h" | 140 #include "media/blink/webencryptedmediaclient_impl.h" |
140 #include "media/blink/webmediaplayer_impl.h" | 141 #include "media/blink/webmediaplayer_impl.h" |
141 #include "media/renderers/gpu_video_accelerator_factories.h" | 142 #include "media/renderers/gpu_video_accelerator_factories.h" |
142 #include "mojo/common/url_type_converters.h" | 143 #include "mojo/common/url_type_converters.h" |
143 #include "net/base/data_url.h" | 144 #include "net/base/data_url.h" |
144 #include "net/base/net_errors.h" | 145 #include "net/base/net_errors.h" |
(...skipping 2167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2312 return NULL; | 2313 return NULL; |
2313 | 2314 |
2314 WebPluginParams params_to_use = params; | 2315 WebPluginParams params_to_use = params; |
2315 params_to_use.mimeType = WebString::fromUTF8(mime_type); | 2316 params_to_use.mimeType = WebString::fromUTF8(mime_type); |
2316 return CreatePlugin(frame, info, params_to_use, nullptr /* throttler */); | 2317 return CreatePlugin(frame, info, params_to_use, nullptr /* throttler */); |
2317 #else | 2318 #else |
2318 return NULL; | 2319 return NULL; |
2319 #endif // defined(ENABLE_PLUGINS) | 2320 #endif // defined(ENABLE_PLUGINS) |
2320 } | 2321 } |
2321 | 2322 |
| 2323 #if defined(OS_ANDROID) |
| 2324 // Checks whether we should use MediaPlayer to play a URL because it is likely |
| 2325 // to be HLS. |
| 2326 static bool IsHLSURL(GURL& url) { |
| 2327 // Other schemes are not supported by MediaPlayer for HLS playback. |
| 2328 if (!url.SchemeIsHTTPOrHTTPS() && !url.SchemeIsFile()) |
| 2329 return false; |
| 2330 |
| 2331 std::string path = url.path(); |
| 2332 return base::EndsWith(path, ".m3u8", base::CompareCase::INSENSITIVE_ASCII); |
| 2333 } |
| 2334 #endif // defined(OS_ANDROID) |
| 2335 |
2322 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( | 2336 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( |
2323 blink::WebLocalFrame* frame, | 2337 blink::WebLocalFrame* frame, |
2324 const blink::WebURL& url, | 2338 const blink::WebURL& url, |
2325 WebMediaPlayerClient* client, | 2339 WebMediaPlayerClient* client, |
2326 WebMediaPlayerEncryptedMediaClient* encrypted_client, | 2340 WebMediaPlayerEncryptedMediaClient* encrypted_client, |
2327 WebContentDecryptionModule* initial_cdm, | 2341 WebContentDecryptionModule* initial_cdm, |
2328 const blink::WebString& sink_id) { | 2342 const blink::WebString& sink_id) { |
2329 #if defined(VIDEO_HOLE) | 2343 #if defined(VIDEO_HOLE) |
2330 if (!contains_media_player_) { | 2344 if (!contains_media_player_) { |
2331 render_view_->RegisterVideoHoleFrame(this); | 2345 render_view_->RegisterVideoHoleFrame(this); |
(...skipping 22 matching lines...) Expand all Loading... |
2354 static_cast<RenderFrame*>(this), | 2368 static_cast<RenderFrame*>(this), |
2355 GetWebMediaPlayerDelegate()->has_played_media()), | 2369 GetWebMediaPlayerDelegate()->has_played_media()), |
2356 audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(), | 2370 audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(), |
2357 render_thread->GetWorkerTaskRunner(), | 2371 render_thread->GetWorkerTaskRunner(), |
2358 render_thread->compositor_task_runner(), context_3d_cb, | 2372 render_thread->compositor_task_runner(), context_3d_cb, |
2359 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, | 2373 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, |
2360 base::Unretained(blink::mainThreadIsolate())), | 2374 base::Unretained(blink::mainThreadIsolate())), |
2361 GetMediaPermission(), initial_cdm); | 2375 GetMediaPermission(), initial_cdm); |
2362 | 2376 |
2363 #if defined(OS_ANDROID) | 2377 #if defined(OS_ANDROID) |
| 2378 // TODO(sandersd): Blacklist devices. |
| 2379 GURL gurl = url; |
2364 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | 2380 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
2365 switches::kEnableUnifiedMediaPipeline)) { | 2381 switches::kEnableUnifiedMediaPipeline) || |
2366 // TODO(sandersd): This check should be grown to include HLS and blacklist | 2382 base::CommandLine::ForCurrentProcess()->HasSwitch( |
2367 // checks. http://crbug.com/516765 | 2383 switches::kDisableAcceleratedVideoDecode) || |
| 2384 !media::MediaCodecUtil::IsMediaCodecAvailable() || |
| 2385 IsHLSURL(gurl)) { |
2368 return CreateAndroidWebMediaPlayer(client, encrypted_client, params); | 2386 return CreateAndroidWebMediaPlayer(client, encrypted_client, params); |
2369 } | 2387 } |
2370 #endif // defined(OS_ANDROID) | 2388 #endif // defined(OS_ANDROID) |
2371 | 2389 |
2372 #if defined(ENABLE_MOJO_MEDIA) && !defined(OS_ANDROID) | 2390 #if defined(ENABLE_MOJO_MEDIA) && !defined(OS_ANDROID) |
2373 scoped_ptr<media::RendererFactory> media_renderer_factory( | 2391 scoped_ptr<media::RendererFactory> media_renderer_factory( |
2374 new media::MojoRendererFactory(GetMediaServiceFactory())); | 2392 new media::MojoRendererFactory(GetMediaServiceFactory())); |
2375 #else | 2393 #else |
2376 scoped_ptr<media::RendererFactory> media_renderer_factory = | 2394 scoped_ptr<media::RendererFactory> media_renderer_factory = |
2377 GetContentClient()->renderer()->CreateMediaRendererFactory( | 2395 GetContentClient()->renderer()->CreateMediaRendererFactory( |
(...skipping 3306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5684 media::ConvertToSwitchOutputDeviceCB(web_callbacks); | 5702 media::ConvertToSwitchOutputDeviceCB(web_callbacks); |
5685 scoped_refptr<media::AudioOutputDevice> device = | 5703 scoped_refptr<media::AudioOutputDevice> device = |
5686 AudioDeviceFactory::NewOutputDevice(routing_id_, 0, sink_id.utf8(), | 5704 AudioDeviceFactory::NewOutputDevice(routing_id_, 0, sink_id.utf8(), |
5687 security_origin); | 5705 security_origin); |
5688 media::OutputDeviceStatus status = device->GetDeviceStatus(); | 5706 media::OutputDeviceStatus status = device->GetDeviceStatus(); |
5689 device->Stop(); | 5707 device->Stop(); |
5690 callback.Run(status); | 5708 callback.Run(status); |
5691 } | 5709 } |
5692 | 5710 |
5693 } // namespace content | 5711 } // namespace content |
OLD | NEW |