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

Side by Side Diff: media/mojo/services/default_mojo_media_client.cc

Issue 1697233002: Reland of land "media: Refactor MojoMediaClient" with fix. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « media/mojo/services/default_mojo_media_client.h ('k') | media/mojo/services/main.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "media/mojo/services/mojo_media_client.h" 5 #include "media/mojo/services/default_mojo_media_client.h"
6 6
7 #include "base/macros.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "media/audio/audio_manager_base.h" 7 #include "media/audio/audio_manager_base.h"
10 #include "media/audio/audio_output_stream_sink.h" 8 #include "media/audio/audio_output_stream_sink.h"
11 #include "media/audio/fake_audio_log_factory.h"
12 #include "media/base/audio_hardware_config.h" 9 #include "media/base/audio_hardware_config.h"
13 #include "media/base/media.h" 10 #include "media/base/media.h"
14 #include "media/base/null_video_sink.h" 11 #include "media/base/null_video_sink.h"
15 #include "media/cdm/default_cdm_factory.h" 12 #include "media/cdm/default_cdm_factory.h"
16 #include "media/renderers/default_renderer_factory.h" 13 #include "media/renderers/default_renderer_factory.h"
17 #include "media/renderers/gpu_video_accelerator_factories.h" 14 #include "media/renderers/gpu_video_accelerator_factories.h"
18 15
19 namespace media { 16 namespace media {
20 17
21 namespace { 18 DefaultMojoMediaClient::DefaultMojoMediaClient() {}
22 class DefaultMojoMediaClient : public MojoMediaClient {
23 public:
24 DefaultMojoMediaClient() {}
25 19
26 // MojoMediaClient overrides. 20 DefaultMojoMediaClient::~DefaultMojoMediaClient() {}
27 void Initialize() override {
28 InitializeMediaLibrary();
29 // TODO(dalecurtis): We should find a single owner per process for the audio
30 // manager or make it a lazy instance. It's not safe to call Get()/Create()
31 // across multiple threads...
32 //
33 // TODO(dalecurtis): Eventually we'll want something other than a fake audio
34 // log factory here too. We should probably at least DVLOG() such info.
35 AudioManager* audio_manager = AudioManager::Get();
36 if (!audio_manager)
37 audio_manager = media::AudioManager::Create(&fake_audio_log_factory_);
38 21
39 audio_hardware_config_.reset(new AudioHardwareConfig( 22 void DefaultMojoMediaClient::Initialize() {
40 audio_manager->GetInputStreamParameters( 23 InitializeMediaLibrary();
41 AudioManagerBase::kDefaultDeviceId), 24 // TODO(dalecurtis): We should find a single owner per process for the audio
42 audio_manager->GetDefaultOutputStreamParameters())); 25 // manager or make it a lazy instance. It's not safe to call Get()/Create()
26 // across multiple threads...
27 //
28 // TODO(dalecurtis): Eventually we'll want something other than a fake audio
29 // log factory here too. We should probably at least DVLOG() such info.
30 AudioManager* audio_manager = AudioManager::Get();
31 if (!audio_manager)
32 audio_manager = media::AudioManager::Create(&fake_audio_log_factory_);
33
34 audio_hardware_config_.reset(new AudioHardwareConfig(
35 audio_manager->GetInputStreamParameters(
36 AudioManagerBase::kDefaultDeviceId),
37 audio_manager->GetDefaultOutputStreamParameters()));
38 }
39
40 scoped_ptr<RendererFactory> DefaultMojoMediaClient::CreateRendererFactory(
41 const scoped_refptr<MediaLog>& media_log) {
42 return make_scoped_ptr(
43 new DefaultRendererFactory(media_log, nullptr, *audio_hardware_config_));
44 }
45
46 AudioRendererSink* DefaultMojoMediaClient::CreateAudioRendererSink() {
47 if (!audio_renderer_sink_)
48 audio_renderer_sink_ = new AudioOutputStreamSink();
49
50 return audio_renderer_sink_.get();
51 }
52
53 VideoRendererSink* DefaultMojoMediaClient::CreateVideoRendererSink(
54 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) {
55 if (!video_renderer_sink_) {
56 video_renderer_sink_ = make_scoped_ptr(
57 new NullVideoSink(false, base::TimeDelta::FromSecondsD(1.0 / 60),
58 NullVideoSink::NewFrameCB(), task_runner));
43 } 59 }
44 60
45 scoped_ptr<RendererFactory> CreateRendererFactory( 61 return video_renderer_sink_.get();
46 const scoped_refptr<MediaLog>& media_log) override { 62 }
47 return make_scoped_ptr(new DefaultRendererFactory(media_log, nullptr,
48 *audio_hardware_config_));
49 }
50 63
51 AudioRendererSink* CreateAudioRendererSink() override { 64 scoped_ptr<CdmFactory> DefaultMojoMediaClient::CreateCdmFactory(
52 if (!audio_renderer_sink_) 65 mojo::shell::mojom::InterfaceProvider* /* service_provider */) {
53 audio_renderer_sink_ = new AudioOutputStreamSink(); 66 return make_scoped_ptr(new DefaultCdmFactory());
54
55 return audio_renderer_sink_.get();
56 }
57
58 VideoRendererSink* CreateVideoRendererSink(
59 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) override {
60 if (!video_renderer_sink_) {
61 video_renderer_sink_ = make_scoped_ptr(
62 new NullVideoSink(false, base::TimeDelta::FromSecondsD(1.0 / 60),
63 NullVideoSink::NewFrameCB(), task_runner));
64 }
65
66 return video_renderer_sink_.get();
67 }
68
69 scoped_ptr<CdmFactory> CreateCdmFactory(
70 mojo::shell::mojom::InterfaceProvider* /* service_provider */) override {
71 return make_scoped_ptr(new DefaultCdmFactory());
72 }
73
74 private:
75 FakeAudioLogFactory fake_audio_log_factory_;
76 scoped_ptr<AudioHardwareConfig> audio_hardware_config_;
77 scoped_refptr<AudioRendererSink> audio_renderer_sink_;
78 scoped_ptr<VideoRendererSink> video_renderer_sink_;
79
80 DISALLOW_COPY_AND_ASSIGN(DefaultMojoMediaClient);
81 };
82
83 } // namespace (anonymous)
84
85 scoped_ptr<MojoMediaClient> MojoMediaClient::Create() {
86 return make_scoped_ptr(new DefaultMojoMediaClient());
87 } 67 }
88 68
89 } // namespace media 69 } // namespace media
OLDNEW
« no previous file with comments | « media/mojo/services/default_mojo_media_client.h ('k') | media/mojo/services/main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698