Chromium Code Reviews| 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 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 139 #include "media/audio/audio_output_device.h" | 139 #include "media/audio/audio_output_device.h" |
| 140 #include "media/base/audio_renderer_mixer_input.h" | 140 #include "media/base/audio_renderer_mixer_input.h" |
| 141 #include "media/base/cdm_factory.h" | 141 #include "media/base/cdm_factory.h" |
| 142 #include "media/base/decoder_factory.h" | 142 #include "media/base/decoder_factory.h" |
| 143 #include "media/base/media.h" | 143 #include "media/base/media.h" |
| 144 #include "media/base/media_log.h" | 144 #include "media/base/media_log.h" |
| 145 #include "media/base/media_switches.h" | 145 #include "media/base/media_switches.h" |
| 146 #include "media/blink/url_index.h" | 146 #include "media/blink/url_index.h" |
| 147 #include "media/blink/webencryptedmediaclient_impl.h" | 147 #include "media/blink/webencryptedmediaclient_impl.h" |
| 148 #include "media/blink/webmediaplayer_impl.h" | 148 #include "media/blink/webmediaplayer_impl.h" |
| 149 #include "media/remoting/remoting_controller.h" | |
| 150 #include "media/remoting/remoting_renderer_factory.h" | |
| 149 #include "media/renderers/gpu_video_accelerator_factories.h" | 151 #include "media/renderers/gpu_video_accelerator_factories.h" |
| 150 #include "mojo/edk/js/core.h" | 152 #include "mojo/edk/js/core.h" |
| 151 #include "mojo/edk/js/support.h" | 153 #include "mojo/edk/js/support.h" |
| 152 #include "net/base/data_url.h" | 154 #include "net/base/data_url.h" |
| 153 #include "net/base/net_errors.h" | 155 #include "net/base/net_errors.h" |
| 154 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" | 156 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
| 155 #include "net/http/http_util.h" | 157 #include "net/http/http_util.h" |
| 156 #include "services/shell/public/cpp/interface_provider.h" | 158 #include "services/shell/public/cpp/interface_provider.h" |
| 157 #include "services/shell/public/cpp/interface_registry.h" | 159 #include "services/shell/public/cpp/interface_registry.h" |
| 158 #include "storage/common/data_element.h" | 160 #include "storage/common/data_element.h" |
| (...skipping 2487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2646 // callback. | 2648 // callback. |
| 2647 // TODO(piman): replace media::Context3D to scoped_refptr<ContextProvider> in | 2649 // TODO(piman): replace media::Context3D to scoped_refptr<ContextProvider> in |
| 2648 // media/ once ContextProvider is in gpu/. | 2650 // media/ once ContextProvider is in gpu/. |
| 2649 media::WebMediaPlayerParams::Context3DCB context_3d_cb = base::Bind( | 2651 media::WebMediaPlayerParams::Context3DCB context_3d_cb = base::Bind( |
| 2650 &GetSharedMainThreadContext3D, | 2652 &GetSharedMainThreadContext3D, |
| 2651 RenderThreadImpl::current()->SharedMainThreadContextProvider()); | 2653 RenderThreadImpl::current()->SharedMainThreadContextProvider()); |
| 2652 | 2654 |
| 2653 scoped_refptr<media::MediaLog> media_log(new RenderMediaLog( | 2655 scoped_refptr<media::MediaLog> media_log(new RenderMediaLog( |
| 2654 blink::WebStringToGURL(frame_->getSecurityOrigin().toString()))); | 2656 blink::WebStringToGURL(frame_->getSecurityOrigin().toString()))); |
| 2655 | 2657 |
| 2658 #if defined(OS_ANDROID) || defined(ENABLE_MOJO_RENDERER) | |
| 2659 std::unique_ptr<media::RemotingController> remoting_controller = nullptr; | |
| 2660 base::WeakPtr<media::MediaObserver> media_observer = nullptr; | |
| 2661 media::RemotingController* remoting_controller_ptr = nullptr; | |
| 2662 #else | |
| 2663 media::mojom::RemotingSourcePtr remoting_source; | |
| 2664 media::mojom::RemotingSourceRequest remoting_source_request = | |
| 2665 mojo::GetProxy(&remoting_source); | |
| 2666 media::mojom::RemoterPtr remoter; | |
| 2667 GetRemoterFactory()->Create(std::move(remoting_source), | |
| 2668 mojo::GetProxy(&remoter)); | |
| 2669 std::unique_ptr<media::RemotingController> remoting_controller = | |
| 2670 base::MakeUnique<media::RemotingController>( | |
| 2671 std::move(remoting_source_request), std::move(remoter)); | |
| 2672 base::WeakPtr<media::MediaObserver> media_observer = | |
| 2673 remoting_controller->GetWeakPtr(); | |
| 2674 media::RemotingController* remoting_controller_ptr = | |
| 2675 remoting_controller.get(); | |
| 2676 #endif // defined(OS_ANDROID) || defined(ENABLE_MOJO_RENDERER) | |
|
xhwang
2016/10/04 06:30:29
nit: Is it possible to move this whole block to a
xjz
2016/10/04 19:21:29
Added a helper to create the RemotingController.
| |
| 2677 | |
| 2656 #if defined(OS_ANDROID) | 2678 #if defined(OS_ANDROID) |
| 2657 if (UseWebMediaPlayerImpl(url) && !media_surface_manager_) | 2679 if (UseWebMediaPlayerImpl(url) && !media_surface_manager_) |
| 2658 media_surface_manager_ = new RendererSurfaceViewManager(this); | 2680 media_surface_manager_ = new RendererSurfaceViewManager(this); |
| 2659 #endif | 2681 #endif |
| 2660 media::WebMediaPlayerParams params( | 2682 media::WebMediaPlayerParams params( |
| 2661 base::Bind(&ContentRendererClient::DeferMediaLoad, | 2683 base::Bind(&ContentRendererClient::DeferMediaLoad, |
| 2662 base::Unretained(GetContentClient()->renderer()), | 2684 base::Unretained(GetContentClient()->renderer()), |
| 2663 static_cast<RenderFrame*>(this), | 2685 static_cast<RenderFrame*>(this), |
| 2664 GetWebMediaPlayerDelegate()->has_played_media()), | 2686 GetWebMediaPlayerDelegate()->has_played_media()), |
| 2665 audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(), | 2687 audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(), |
| 2666 render_thread->GetWorkerTaskRunner(), | 2688 render_thread->GetWorkerTaskRunner(), |
| 2667 render_thread->compositor_task_runner(), context_3d_cb, | 2689 render_thread->compositor_task_runner(), context_3d_cb, |
| 2668 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, | 2690 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, |
| 2669 base::Unretained(blink::mainThreadIsolate())), | 2691 base::Unretained(blink::mainThreadIsolate())), |
| 2670 initial_cdm, media_surface_manager_); | 2692 initial_cdm, media_surface_manager_, media_observer); |
| 2671 | 2693 |
| 2672 #if defined(OS_ANDROID) | 2694 #if defined(OS_ANDROID) |
| 2673 if (!UseWebMediaPlayerImpl(url)) { | 2695 if (!UseWebMediaPlayerImpl(url)) { |
| 2674 return CreateAndroidWebMediaPlayer(client, encrypted_client, params); | 2696 return CreateAndroidWebMediaPlayer(client, encrypted_client, params); |
| 2675 } | 2697 } |
| 2676 #endif // defined(OS_ANDROID) | 2698 #endif // defined(OS_ANDROID) |
| 2677 | 2699 |
| 2678 #if defined(ENABLE_MOJO_RENDERER) | 2700 #if defined(ENABLE_MOJO_RENDERER) |
| 2679 std::unique_ptr<media::RendererFactory> media_renderer_factory( | 2701 std::unique_ptr<media::RendererFactory> media_renderer_factory( |
| 2680 new media::MojoRendererFactory( | 2702 new media::MojoRendererFactory( |
| 2681 base::Bind(&RenderThreadImpl::GetGpuFactories, | 2703 base::Bind(&RenderThreadImpl::GetGpuFactories, |
| 2682 base::Unretained(render_thread)), | 2704 base::Unretained(render_thread)), |
| 2683 GetMediaInterfaceProvider())); | 2705 GetMediaInterfaceProvider())); |
| 2684 #else | 2706 #else |
| 2685 std::unique_ptr<media::RendererFactory> media_renderer_factory( | 2707 std::unique_ptr<media::RendererFactory> default_renderer_factory( |
| 2686 new media::DefaultRendererFactory( | 2708 new media::DefaultRendererFactory( |
| 2687 media_log, GetDecoderFactory(), | 2709 media_log, GetDecoderFactory(), |
| 2688 base::Bind(&RenderThreadImpl::GetGpuFactories, | 2710 base::Bind(&RenderThreadImpl::GetGpuFactories, |
| 2689 base::Unretained(render_thread)))); | 2711 base::Unretained(render_thread)))); |
| 2712 std::unique_ptr<media::RendererFactory> media_renderer_factory( | |
| 2713 new media::RemotingRendererFactory(std::move(default_renderer_factory), | |
| 2714 std::move(remoting_controller))); | |
|
xhwang
2016/10/04 06:30:29
+miu
I am not sure whether the remoting sink has
xhwang
2016/10/04 06:30:29
Should we not use media::RemotingRendererFactory o
xjz
2016/10/04 19:21:29
|remoting_controller| will be nullptr on Android.
xjz
2016/10/04 19:21:29
|is_sink_available_| will not be true until the ch
xjz
2016/10/04 22:13:02
As discussed offline, now used the DefaultRenderer
| |
| 2690 #endif // defined(ENABLE_MOJO_RENDERER) | 2715 #endif // defined(ENABLE_MOJO_RENDERER) |
| 2691 | 2716 |
| 2692 if (!url_index_.get() || url_index_->frame() != frame_) | 2717 if (!url_index_.get() || url_index_->frame() != frame_) |
| 2693 url_index_.reset(new media::UrlIndex(frame_)); | 2718 url_index_.reset(new media::UrlIndex(frame_)); |
| 2694 | 2719 |
| 2695 // TODO(miu): In a soon-upcoming change, call GetRemoterFactory()->Create() to | |
| 2696 // allow the local media pipeline to receive notifications about when Media | |
| 2697 // Remoting can take place. Control logic in/around WebMediaPlayerImpl will | |
| 2698 // implement media.mojom.RemotingSource. http://crbug.com/643964 | |
| 2699 | |
| 2700 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( | 2720 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( |
| 2701 frame_, client, encrypted_client, | 2721 frame_, client, encrypted_client, |
| 2702 GetWebMediaPlayerDelegate()->AsWeakPtr(), | 2722 GetWebMediaPlayerDelegate()->AsWeakPtr(), |
| 2703 std::move(media_renderer_factory), url_index_, params); | 2723 std::move(media_renderer_factory), url_index_, params); |
| 2704 | 2724 |
| 2725 if (remoting_controller_ptr) { | |
| 2726 remoting_controller_ptr->SetSwitchRenderCallback( | |
| 2727 base::Bind(&media::WebMediaPlayerImpl::ScheduleRestart, | |
| 2728 media_player->AsWeakPtr())); | |
| 2729 } | |
| 2730 | |
| 2705 #if defined(OS_ANDROID) // WMPI_CAST | 2731 #if defined(OS_ANDROID) // WMPI_CAST |
| 2706 media_player->SetMediaPlayerManager(GetMediaPlayerManager()); | 2732 media_player->SetMediaPlayerManager(GetMediaPlayerManager()); |
| 2707 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor()); | 2733 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor()); |
| 2708 #endif | 2734 #endif |
| 2709 | 2735 |
| 2710 return media_player; | 2736 return media_player; |
| 2711 } | 2737 } |
| 2712 | 2738 |
| 2713 blink::WebMediaSession* RenderFrameImpl::createMediaSession() { | 2739 blink::WebMediaSession* RenderFrameImpl::createMediaSession() { |
| 2714 #if defined(OS_ANDROID) | 2740 #if defined(OS_ANDROID) |
| (...skipping 3715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6430 // event target. Potentially a Pepper plugin will receive the event. | 6456 // event target. Potentially a Pepper plugin will receive the event. |
| 6431 // In order to tell whether a plugin gets the last mouse event and which it | 6457 // In order to tell whether a plugin gets the last mouse event and which it |
| 6432 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets | 6458 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets |
| 6433 // the event, it will notify us via DidReceiveMouseEvent() and set itself as | 6459 // the event, it will notify us via DidReceiveMouseEvent() and set itself as |
| 6434 // |pepper_last_mouse_event_target_|. | 6460 // |pepper_last_mouse_event_target_|. |
| 6435 pepper_last_mouse_event_target_ = nullptr; | 6461 pepper_last_mouse_event_target_ = nullptr; |
| 6436 #endif | 6462 #endif |
| 6437 } | 6463 } |
| 6438 | 6464 |
| 6439 } // namespace content | 6465 } // namespace content |
| OLD | NEW |