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 "chromecast/media/cma/filters/cma_renderer.h" | 5 #include "chromecast/media/cma/filters/cma_renderer.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/location.h" | 9 #include "base/location.h" |
10 #include "base/message_loop/message_loop_proxy.h" | 10 #include "base/single_thread_task_runner.h" |
| 11 #include "base/thread_task_runner_handle.h" |
11 #include "chromecast/media/cma/base/balanced_media_task_runner_factory.h" | 12 #include "chromecast/media/cma/base/balanced_media_task_runner_factory.h" |
12 #include "chromecast/media/cma/base/cma_logging.h" | 13 #include "chromecast/media/cma/base/cma_logging.h" |
13 #include "chromecast/media/cma/filters/demuxer_stream_adapter.h" | 14 #include "chromecast/media/cma/filters/demuxer_stream_adapter.h" |
14 #include "chromecast/media/cma/pipeline/audio_pipeline.h" | 15 #include "chromecast/media/cma/pipeline/audio_pipeline.h" |
15 #include "chromecast/media/cma/pipeline/av_pipeline_client.h" | 16 #include "chromecast/media/cma/pipeline/av_pipeline_client.h" |
16 #include "chromecast/media/cma/pipeline/media_pipeline.h" | 17 #include "chromecast/media/cma/pipeline/media_pipeline.h" |
17 #include "chromecast/media/cma/pipeline/media_pipeline_client.h" | 18 #include "chromecast/media/cma/pipeline/media_pipeline_client.h" |
18 #include "chromecast/media/cma/pipeline/video_pipeline.h" | 19 #include "chromecast/media/cma/pipeline/video_pipeline.h" |
19 #include "chromecast/media/cma/pipeline/video_pipeline_client.h" | 20 #include "chromecast/media/cma/pipeline/video_pipeline_client.h" |
20 #include "media/base/bind_to_current_loop.h" | 21 #include "media/base/bind_to_current_loop.h" |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 // Receive events from the audio pipeline. | 247 // Receive events from the audio pipeline. |
247 AvPipelineClient av_pipeline_client; | 248 AvPipelineClient av_pipeline_client; |
248 av_pipeline_client.eos_cb = ::media::BindToCurrentLoop( | 249 av_pipeline_client.eos_cb = ::media::BindToCurrentLoop( |
249 base::Bind(&CmaRenderer::OnEosReached, weak_this_, true)); | 250 base::Bind(&CmaRenderer::OnEosReached, weak_this_, true)); |
250 av_pipeline_client.playback_error_cb = ::media::BindToCurrentLoop( | 251 av_pipeline_client.playback_error_cb = ::media::BindToCurrentLoop( |
251 base::Bind(&CmaRenderer::OnError, weak_this_)); | 252 base::Bind(&CmaRenderer::OnError, weak_this_)); |
252 av_pipeline_client.statistics_cb = ::media::BindToCurrentLoop( | 253 av_pipeline_client.statistics_cb = ::media::BindToCurrentLoop( |
253 base::Bind(&CmaRenderer::OnStatisticsUpdated, weak_this_)); | 254 base::Bind(&CmaRenderer::OnStatisticsUpdated, weak_this_)); |
254 audio_pipeline_->SetClient(av_pipeline_client); | 255 audio_pipeline_->SetClient(av_pipeline_client); |
255 | 256 |
256 scoped_ptr<CodedFrameProvider> frame_provider( | 257 scoped_ptr<CodedFrameProvider> frame_provider(new DemuxerStreamAdapter( |
257 new DemuxerStreamAdapter( | 258 base::ThreadTaskRunnerHandle::Get(), media_task_runner_factory_, stream)); |
258 base::MessageLoopProxy::current(), | |
259 media_task_runner_factory_, | |
260 stream)); | |
261 | 259 |
262 const ::media::AudioDecoderConfig& config = stream->audio_decoder_config(); | 260 const ::media::AudioDecoderConfig& config = stream->audio_decoder_config(); |
263 if (config.codec() == ::media::kCodecAAC) | 261 if (config.codec() == ::media::kCodecAAC) |
264 stream->EnableBitstreamConverter(); | 262 stream->EnableBitstreamConverter(); |
265 | 263 |
266 media_pipeline_->InitializeAudio( | 264 media_pipeline_->InitializeAudio( |
267 config, frame_provider.Pass(), audio_initialization_done_cb); | 265 config, frame_provider.Pass(), audio_initialization_done_cb); |
268 } | 266 } |
269 | 267 |
270 void CmaRenderer::OnAudioPipelineInitializeDone( | 268 void CmaRenderer::OnAudioPipelineInitializeDone( |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 client.av_pipeline_client.eos_cb = ::media::BindToCurrentLoop( | 305 client.av_pipeline_client.eos_cb = ::media::BindToCurrentLoop( |
308 base::Bind(&CmaRenderer::OnEosReached, weak_this_, false)); | 306 base::Bind(&CmaRenderer::OnEosReached, weak_this_, false)); |
309 client.av_pipeline_client.playback_error_cb = ::media::BindToCurrentLoop( | 307 client.av_pipeline_client.playback_error_cb = ::media::BindToCurrentLoop( |
310 base::Bind(&CmaRenderer::OnError, weak_this_)); | 308 base::Bind(&CmaRenderer::OnError, weak_this_)); |
311 client.av_pipeline_client.statistics_cb = ::media::BindToCurrentLoop( | 309 client.av_pipeline_client.statistics_cb = ::media::BindToCurrentLoop( |
312 base::Bind(&CmaRenderer::OnStatisticsUpdated, weak_this_)); | 310 base::Bind(&CmaRenderer::OnStatisticsUpdated, weak_this_)); |
313 client.natural_size_changed_cb = ::media::BindToCurrentLoop( | 311 client.natural_size_changed_cb = ::media::BindToCurrentLoop( |
314 base::Bind(&CmaRenderer::OnNaturalSizeChanged, weak_this_)); | 312 base::Bind(&CmaRenderer::OnNaturalSizeChanged, weak_this_)); |
315 video_pipeline_->SetClient(client); | 313 video_pipeline_->SetClient(client); |
316 | 314 |
317 scoped_ptr<CodedFrameProvider> frame_provider( | 315 scoped_ptr<CodedFrameProvider> frame_provider(new DemuxerStreamAdapter( |
318 new DemuxerStreamAdapter( | 316 base::ThreadTaskRunnerHandle::Get(), media_task_runner_factory_, stream)); |
319 base::MessageLoopProxy::current(), | |
320 media_task_runner_factory_, | |
321 stream)); | |
322 | 317 |
323 const ::media::VideoDecoderConfig& config = stream->video_decoder_config(); | 318 const ::media::VideoDecoderConfig& config = stream->video_decoder_config(); |
324 if (config.codec() == ::media::kCodecH264) | 319 if (config.codec() == ::media::kCodecH264) |
325 stream->EnableBitstreamConverter(); | 320 stream->EnableBitstreamConverter(); |
326 | 321 |
327 initial_natural_size_ = config.natural_size(); | 322 initial_natural_size_ = config.natural_size(); |
328 | 323 |
329 media_pipeline_->InitializeVideo( | 324 media_pipeline_->InitializeVideo( |
330 config, | 325 config, |
331 frame_provider.Pass(), | 326 frame_provider.Pass(), |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 is_pending_transition_ = true; | 458 is_pending_transition_ = true; |
464 } | 459 } |
465 | 460 |
466 void CmaRenderer::CompleteStateTransition(State new_state) { | 461 void CmaRenderer::CompleteStateTransition(State new_state) { |
467 state_ = new_state; | 462 state_ = new_state; |
468 is_pending_transition_ = false; | 463 is_pending_transition_ = false; |
469 } | 464 } |
470 | 465 |
471 } // namespace media | 466 } // namespace media |
472 } // namespace chromecast | 467 } // namespace chromecast |
OLD | NEW |