Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(801)

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 2389473002: Media Remoting: Add RemotingController. (Closed)
Patch Set: Fix bug on Android. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « content/renderer/BUILD.gn ('k') | media/base/BUILD.gn » ('j') | media/base/media_observer.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698