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) { | |
watk
2016/01/06 01:17:21
The style guide says refs must be const (https://g
sandersd (OOO until July 31)
2016/01/06 01:27:01
Done.
| |
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 GURL gurl = url; | |
watk
2016/01/06 01:17:20
I'm guessing you can delete this and pass url dire
sandersd (OOO until July 31)
2016/01/06 01:27:01
And the world makes sense once again. (Done)
| |
2364 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | 2379 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
2365 switches::kEnableUnifiedMediaPipeline)) { | 2380 switches::kEnableUnifiedMediaPipeline) || |
2366 // TODO(sandersd): This check should be grown to include HLS and blacklist | 2381 base::CommandLine::ForCurrentProcess()->HasSwitch( |
2367 // checks. http://crbug.com/516765 | 2382 switches::kDisableAcceleratedVideoDecode) || |
2383 !media::MediaCodecUtil::IsMediaCodecAvailable() || | |
2384 IsHLSURL(gurl)) { | |
2368 return CreateAndroidWebMediaPlayer(client, encrypted_client, params); | 2385 return CreateAndroidWebMediaPlayer(client, encrypted_client, params); |
2369 } | 2386 } |
2370 #endif // defined(OS_ANDROID) | 2387 #endif // defined(OS_ANDROID) |
2371 | 2388 |
2372 #if defined(ENABLE_MOJO_MEDIA) && !defined(OS_ANDROID) | 2389 #if defined(ENABLE_MOJO_MEDIA) && !defined(OS_ANDROID) |
2373 scoped_ptr<media::RendererFactory> media_renderer_factory( | 2390 scoped_ptr<media::RendererFactory> media_renderer_factory( |
2374 new media::MojoRendererFactory(GetMediaServiceFactory())); | 2391 new media::MojoRendererFactory(GetMediaServiceFactory())); |
2375 #else | 2392 #else |
2376 scoped_ptr<media::RendererFactory> media_renderer_factory = | 2393 scoped_ptr<media::RendererFactory> media_renderer_factory = |
2377 GetContentClient()->renderer()->CreateMediaRendererFactory( | 2394 GetContentClient()->renderer()->CreateMediaRendererFactory( |
(...skipping 3306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5684 media::ConvertToSwitchOutputDeviceCB(web_callbacks); | 5701 media::ConvertToSwitchOutputDeviceCB(web_callbacks); |
5685 scoped_refptr<media::AudioOutputDevice> device = | 5702 scoped_refptr<media::AudioOutputDevice> device = |
5686 AudioDeviceFactory::NewOutputDevice(routing_id_, 0, sink_id.utf8(), | 5703 AudioDeviceFactory::NewOutputDevice(routing_id_, 0, sink_id.utf8(), |
5687 security_origin); | 5704 security_origin); |
5688 media::OutputDeviceStatus status = device->GetDeviceStatus(); | 5705 media::OutputDeviceStatus status = device->GetDeviceStatus(); |
5689 device->Stop(); | 5706 device->Stop(); |
5690 callback.Run(status); | 5707 callback.Run(status); |
5691 } | 5708 } |
5692 | 5709 |
5693 } // namespace content | 5710 } // namespace content |
OLD | NEW |