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/mojo_renderer_service.h" | 5 #include "media/mojo/services/mojo_renderer_service.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
9 #include "base/memory/scoped_vector.h" | 9 #include "base/memory/scoped_vector.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
11 #include "media/base/audio_decoder.h" | 11 #include "media/base/audio_decoder.h" |
12 #include "media/base/audio_renderer.h" | 12 #include "media/base/audio_renderer.h" |
13 #include "media/base/audio_renderer_sink.h" | 13 #include "media/base/audio_renderer_sink.h" |
14 #include "media/base/decryptor.h" | 14 #include "media/base/decryptor.h" |
15 #include "media/base/media_log.h" | 15 #include "media/base/media_log.h" |
16 #include "media/base/video_renderer.h" | 16 #include "media/base/video_renderer.h" |
17 #include "media/filters/audio_renderer_impl.h" | 17 #include "media/filters/audio_renderer_impl.h" |
18 #include "media/filters/renderer_impl.h" | 18 #include "media/filters/renderer_impl.h" |
19 #include "media/filters/video_renderer_impl.h" | 19 #include "media/filters/video_renderer_impl.h" |
20 #include "media/mojo/services/demuxer_stream_provider_shim.h" | 20 #include "media/mojo/services/demuxer_stream_provider_shim.h" |
| 21 #include "media/mojo/services/mojo_cdm_service_context.h" |
21 #include "media/mojo/services/mojo_demuxer_stream_adapter.h" | 22 #include "media/mojo/services/mojo_demuxer_stream_adapter.h" |
22 #include "media/mojo/services/renderer_config.h" | 23 #include "media/mojo/services/renderer_config.h" |
23 | 24 |
24 namespace media { | 25 namespace media { |
25 | 26 |
26 // Time interval to update media time. | 27 // Time interval to update media time. |
27 const int kTimeUpdateIntervalMs = 50; | 28 const int kTimeUpdateIntervalMs = 50; |
28 | 29 |
29 static void LogMediaSourceError(const scoped_refptr<MediaLog>& media_log, | 30 static void LogMediaSourceError(const scoped_refptr<MediaLog>& media_log, |
30 const std::string& error) { | 31 const std::string& error) { |
31 media_log->AddEvent(media_log->CreateMediaSourceErrorEvent(error)); | 32 media_log->AddEvent(media_log->CreateMediaSourceErrorEvent(error)); |
32 } | 33 } |
33 | 34 |
34 static void PaintNothing(const scoped_refptr<VideoFrame>& frame) { | 35 static void PaintNothing(const scoped_refptr<VideoFrame>& frame) { |
35 } | 36 } |
36 | 37 |
37 MojoRendererService::MojoRendererService() | 38 MojoRendererService::MojoRendererService( |
38 : state_(STATE_UNINITIALIZED), | 39 MojoCdmServiceContext* cdm_service_context) |
| 40 : cdm_service_context_(cdm_service_context), |
| 41 state_(STATE_UNINITIALIZED), |
39 last_media_time_usec_(0), | 42 last_media_time_usec_(0), |
40 weak_factory_(this) { | 43 weak_factory_(this) { |
41 weak_this_ = weak_factory_.GetWeakPtr(); | 44 weak_this_ = weak_factory_.GetWeakPtr(); |
42 DVLOG(1) << __FUNCTION__; | 45 DVLOG(1) << __FUNCTION__; |
43 | 46 |
44 scoped_refptr<base::SingleThreadTaskRunner> task_runner( | 47 scoped_refptr<base::SingleThreadTaskRunner> task_runner( |
45 base::MessageLoop::current()->task_runner()); | 48 base::MessageLoop::current()->task_runner()); |
46 scoped_refptr<MediaLog> media_log(new MediaLog()); | 49 scoped_refptr<MediaLog> media_log(new MediaLog()); |
47 RendererConfig* renderer_config = RendererConfig::Get(); | 50 RendererConfig* renderer_config = RendererConfig::Get(); |
48 audio_renderer_sink_ = renderer_config->GetAudioRendererSink(); | 51 audio_renderer_sink_ = renderer_config->GetAudioRendererSink(); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 void MojoRendererService::SetPlaybackRate(float playback_rate) { | 106 void MojoRendererService::SetPlaybackRate(float playback_rate) { |
104 DVLOG(2) << __FUNCTION__ << ": " << playback_rate; | 107 DVLOG(2) << __FUNCTION__ << ": " << playback_rate; |
105 DCHECK_EQ(state_, STATE_PLAYING); | 108 DCHECK_EQ(state_, STATE_PLAYING); |
106 renderer_->SetPlaybackRate(playback_rate); | 109 renderer_->SetPlaybackRate(playback_rate); |
107 } | 110 } |
108 | 111 |
109 void MojoRendererService::SetVolume(float volume) { | 112 void MojoRendererService::SetVolume(float volume) { |
110 renderer_->SetVolume(volume); | 113 renderer_->SetVolume(volume); |
111 } | 114 } |
112 | 115 |
| 116 void MojoRendererService::SetCdm(int32_t cdm_id, |
| 117 const mojo::Callback<void(bool)>& callback) { |
| 118 CdmContext* cdm_context = cdm_service_context_->GetCdmContext(cdm_id); |
| 119 if (!cdm_context) { |
| 120 DVLOG(1) << __FUNCTION__ << ": No CDM for " << cdm_id << " found."; |
| 121 callback.Run(false); |
| 122 return; |
| 123 } |
| 124 |
| 125 renderer_->SetCdm(cdm_context, base::Bind(&MojoRendererService::OnCdmAttached, |
| 126 weak_this_, callback)); |
| 127 } |
| 128 |
113 void MojoRendererService::OnStreamReady(const mojo::Closure& callback) { | 129 void MojoRendererService::OnStreamReady(const mojo::Closure& callback) { |
114 DCHECK_EQ(state_, STATE_INITIALIZING); | 130 DCHECK_EQ(state_, STATE_INITIALIZING); |
115 | 131 |
116 renderer_->Initialize( | 132 renderer_->Initialize( |
117 stream_provider_.get(), | 133 stream_provider_.get(), |
118 base::Bind( | 134 base::Bind( |
119 &MojoRendererService::OnRendererInitializeDone, weak_this_, callback), | 135 &MojoRendererService::OnRendererInitializeDone, weak_this_, callback), |
120 base::Bind(&MojoRendererService::OnUpdateStatistics, weak_this_), | 136 base::Bind(&MojoRendererService::OnUpdateStatistics, weak_this_), |
121 base::Bind(&MojoRendererService::OnBufferingStateChanged, weak_this_), | 137 base::Bind(&MojoRendererService::OnBufferingStateChanged, weak_this_), |
122 base::Bind(&PaintNothing), | 138 base::Bind(&PaintNothing), |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 client()->OnError(); | 198 client()->OnError(); |
183 } | 199 } |
184 | 200 |
185 void MojoRendererService::OnFlushCompleted(const mojo::Closure& callback) { | 201 void MojoRendererService::OnFlushCompleted(const mojo::Closure& callback) { |
186 DVLOG(1) << __FUNCTION__; | 202 DVLOG(1) << __FUNCTION__; |
187 DCHECK_EQ(state_, STATE_FLUSHING); | 203 DCHECK_EQ(state_, STATE_FLUSHING); |
188 state_ = STATE_PLAYING; | 204 state_ = STATE_PLAYING; |
189 callback.Run(); | 205 callback.Run(); |
190 } | 206 } |
191 | 207 |
| 208 void MojoRendererService::OnCdmAttached( |
| 209 const mojo::Callback<void(bool)>& callback, |
| 210 bool success) { |
| 211 DVLOG(1) << __FUNCTION__; |
| 212 callback.Run(success); |
| 213 } |
| 214 |
192 } // namespace media | 215 } // namespace media |
OLD | NEW |