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

Side by Side Diff: chromecast/browser/media/cast_mojo_media_client.cc

Issue 2281843003: Move ownership of audio/video sinks to MojoRendererService. (Closed)
Patch Set: rebase Created 4 years, 3 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "chromecast/browser/media/cast_mojo_media_client.h" 5 #include "chromecast/browser/media/cast_mojo_media_client.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "chromecast/browser/media/cast_renderer.h" 8 #include "chromecast/browser/media/cast_renderer.h"
9 #include "media/base/audio_renderer_sink.h"
9 #include "media/base/cdm_factory.h" 10 #include "media/base/cdm_factory.h"
10 #include "media/base/media_log.h" 11 #include "media/base/media_log.h"
11 #include "media/base/renderer_factory.h" 12 #include "media/base/renderer_factory.h"
12 13
13 namespace chromecast { 14 namespace chromecast {
14 namespace media { 15 namespace media {
15 16
17 namespace {
18 // CastRenderer does not use a ::media::AudioRendererSink.
19 // CastAudioRendererSink is only used to hold audio-device-id.
20 class CastAudioRendererSink : public ::media::AudioRendererSink {
21 public:
22 CastAudioRendererSink(const std::string& device_id) : device_id_(device_id) {}
23
24 // ::media::AudioRendererSink implementation.
25 void Initialize(const ::media::AudioParameters& params,
26 RenderCallback* callback) final {
27 NOTREACHED();
28 }
29 void Start() final { NOTREACHED(); }
30 void Stop() final { NOTREACHED(); }
31 void Pause() final { NOTREACHED(); }
32 void Play() final { NOTREACHED(); }
33 bool SetVolume(double volume) final {
34 NOTREACHED();
35 return false;
36 }
37 ::media::OutputDeviceInfo GetOutputDeviceInfo() final {
38 return ::media::OutputDeviceInfo(device_id_,
39 ::media::OUTPUT_DEVICE_STATUS_OK,
40 ::media::AudioParameters());
41 }
42 bool CurrentThreadIsRenderingThread() final {
43 NOTREACHED();
44 return false;
45 }
46
47 private:
48 ~CastAudioRendererSink() final {}
49
50 std::string device_id_;
51 DISALLOW_COPY_AND_ASSIGN(CastAudioRendererSink);
52 };
53
54 class CastRendererFactory : public ::media::RendererFactory {
55 public:
56 CastRendererFactory(const CreateMediaPipelineBackendCB& create_backend_cb,
57 const scoped_refptr<::media::MediaLog>& media_log,
58 VideoResolutionPolicy* video_resolution_policy)
59 : create_backend_cb_(create_backend_cb),
60 media_log_(media_log),
61 video_resolution_policy_(video_resolution_policy) {}
62 ~CastRendererFactory() final {}
63
64 std::unique_ptr<::media::Renderer> CreateRenderer(
65 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
66 const scoped_refptr<base::TaskRunner>& worker_task_runner,
67 ::media::AudioRendererSink* audio_renderer_sink,
68 ::media::VideoRendererSink* video_renderer_sink,
69 const ::media::RequestSurfaceCB& request_surface_cb) final {
70 DCHECK(audio_renderer_sink);
71 DCHECK(!video_renderer_sink);
72 return base::MakeUnique<CastRenderer>(
73 create_backend_cb_, media_task_runner,
74 audio_renderer_sink->GetOutputDeviceInfo().device_id(),
75 video_resolution_policy_);
76 }
77
78 private:
79 const CreateMediaPipelineBackendCB create_backend_cb_;
80 scoped_refptr<::media::MediaLog> media_log_;
81 VideoResolutionPolicy* video_resolution_policy_;
82 DISALLOW_COPY_AND_ASSIGN(CastRendererFactory);
83 };
84 } // namespace
85
16 CastMojoMediaClient::CastMojoMediaClient( 86 CastMojoMediaClient::CastMojoMediaClient(
17 const CreateMediaPipelineBackendCB& create_backend_cb, 87 const CreateMediaPipelineBackendCB& create_backend_cb,
18 const CreateCdmFactoryCB& create_cdm_factory_cb, 88 const CreateCdmFactoryCB& create_cdm_factory_cb,
19 VideoResolutionPolicy* video_resolution_policy) 89 VideoResolutionPolicy* video_resolution_policy)
20 : create_backend_cb_(create_backend_cb), 90 : create_backend_cb_(create_backend_cb),
21 create_cdm_factory_cb_(create_cdm_factory_cb), 91 create_cdm_factory_cb_(create_cdm_factory_cb),
22 video_resolution_policy_(video_resolution_policy) {} 92 video_resolution_policy_(video_resolution_policy) {}
23 93
24 CastMojoMediaClient::~CastMojoMediaClient() {} 94 CastMojoMediaClient::~CastMojoMediaClient() {}
25 95
26 std::unique_ptr<::media::Renderer> CastMojoMediaClient::CreateRenderer( 96 scoped_refptr<::media::AudioRendererSink>
27 scoped_refptr<base::SingleThreadTaskRunner> media_task_runner, 97 CastMojoMediaClient::CreateAudioRendererSink(
28 scoped_refptr<::media::MediaLog> media_log,
29 const std::string& audio_device_id) { 98 const std::string& audio_device_id) {
30 return base::MakeUnique<chromecast::media::CastRenderer>( 99 return new CastAudioRendererSink(audio_device_id);
31 create_backend_cb_, std::move(media_task_runner), audio_device_id, 100 }
32 video_resolution_policy_); 101
102 std::unique_ptr<::media::RendererFactory>
103 CastMojoMediaClient::CreateRendererFactory(
104 const scoped_refptr<::media::MediaLog>& media_log) {
105 return base::MakeUnique<CastRendererFactory>(create_backend_cb_, media_log,
106 video_resolution_policy_);
33 } 107 }
34 108
35 std::unique_ptr<::media::CdmFactory> CastMojoMediaClient::CreateCdmFactory( 109 std::unique_ptr<::media::CdmFactory> CastMojoMediaClient::CreateCdmFactory(
36 ::shell::mojom::InterfaceProvider* interface_provider) { 110 ::shell::mojom::InterfaceProvider* interface_provider) {
37 return create_cdm_factory_cb_.Run(); 111 return create_cdm_factory_cb_.Run();
38 } 112 }
39 113
40 } // namespace media 114 } // namespace media
41 } // namespace chromecast 115 } // namespace chromecast
OLDNEW
« no previous file with comments | « chromecast/browser/media/cast_mojo_media_client.h ('k') | media/mojo/clients/mojo_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698