OLD | NEW |
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/default_mojo_media_client.h" | 5 #include "media/mojo/services/mojo_media_client.h" |
6 | 6 |
| 7 #include "base/macros.h" |
| 8 #include "base/memory/scoped_ptr.h" |
7 #include "media/audio/audio_manager_base.h" | 9 #include "media/audio/audio_manager_base.h" |
8 #include "media/audio/audio_output_stream_sink.h" | 10 #include "media/audio/audio_output_stream_sink.h" |
| 11 #include "media/audio/fake_audio_log_factory.h" |
9 #include "media/base/audio_hardware_config.h" | 12 #include "media/base/audio_hardware_config.h" |
10 #include "media/base/media.h" | 13 #include "media/base/media.h" |
11 #include "media/base/null_video_sink.h" | 14 #include "media/base/null_video_sink.h" |
12 #include "media/cdm/default_cdm_factory.h" | 15 #include "media/cdm/default_cdm_factory.h" |
13 #include "media/renderers/default_renderer_factory.h" | 16 #include "media/renderers/default_renderer_factory.h" |
14 #include "media/renderers/gpu_video_accelerator_factories.h" | 17 #include "media/renderers/gpu_video_accelerator_factories.h" |
15 | 18 |
16 namespace media { | 19 namespace media { |
17 | 20 |
18 DefaultMojoMediaClient::DefaultMojoMediaClient() {} | 21 namespace { |
| 22 class DefaultMojoMediaClient : public MojoMediaClient { |
| 23 public: |
| 24 DefaultMojoMediaClient() {} |
19 | 25 |
20 DefaultMojoMediaClient::~DefaultMojoMediaClient() {} | 26 // MojoMediaClient overrides. |
| 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_); |
21 | 38 |
22 void DefaultMojoMediaClient::Initialize() { | 39 audio_hardware_config_.reset(new AudioHardwareConfig( |
23 InitializeMediaLibrary(); | 40 audio_manager->GetInputStreamParameters( |
24 // TODO(dalecurtis): We should find a single owner per process for the audio | 41 AudioManagerBase::kDefaultDeviceId), |
25 // manager or make it a lazy instance. It's not safe to call Get()/Create() | 42 audio_manager->GetDefaultOutputStreamParameters())); |
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)); | |
59 } | 43 } |
60 | 44 |
61 return video_renderer_sink_.get(); | 45 scoped_ptr<RendererFactory> CreateRendererFactory( |
62 } | 46 const scoped_refptr<MediaLog>& media_log) override { |
| 47 return make_scoped_ptr(new DefaultRendererFactory(media_log, nullptr, |
| 48 *audio_hardware_config_)); |
| 49 } |
63 | 50 |
64 scoped_ptr<CdmFactory> DefaultMojoMediaClient::CreateCdmFactory( | 51 AudioRendererSink* CreateAudioRendererSink() override { |
65 mojo::shell::mojom::InterfaceProvider* /* service_provider */) { | 52 if (!audio_renderer_sink_) |
66 return make_scoped_ptr(new DefaultCdmFactory()); | 53 audio_renderer_sink_ = new AudioOutputStreamSink(); |
| 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()); |
67 } | 87 } |
68 | 88 |
69 } // namespace media | 89 } // namespace media |
OLD | NEW |