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/renderer/media/cma_renderer.h" | 5 #include "chromecast/renderer/media/cma_renderer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 | 82 |
83 if (has_audio_ || has_video_) | 83 if (has_audio_ || has_video_) |
84 media_pipeline_->Stop(); | 84 media_pipeline_->Stop(); |
85 } | 85 } |
86 | 86 |
87 void CmaRenderer::Initialize( | 87 void CmaRenderer::Initialize( |
88 ::media::DemuxerStreamProvider* demuxer_stream_provider, | 88 ::media::DemuxerStreamProvider* demuxer_stream_provider, |
89 const ::media::PipelineStatusCB& init_cb, | 89 const ::media::PipelineStatusCB& init_cb, |
90 const ::media::StatisticsCB& statistics_cb, | 90 const ::media::StatisticsCB& statistics_cb, |
91 const ::media::BufferingStateCB& buffering_state_cb, | 91 const ::media::BufferingStateCB& buffering_state_cb, |
| 92 const ::media::NaturalSizeChangedCB& natural_size_changed_cb, |
92 const base::Closure& ended_cb, | 93 const base::Closure& ended_cb, |
93 const ::media::PipelineStatusCB& error_cb, | 94 const ::media::PipelineStatusCB& error_cb, |
94 const base::Closure& waiting_for_decryption_key_cb) { | 95 const base::Closure& waiting_for_decryption_key_cb) { |
95 CMALOG(kLogControl) << __FUNCTION__; | 96 CMALOG(kLogControl) << __FUNCTION__; |
96 DCHECK(thread_checker_.CalledOnValidThread()); | 97 DCHECK(thread_checker_.CalledOnValidThread()); |
97 DCHECK_EQ(state_, kUninitialized) << state_; | 98 DCHECK_EQ(state_, kUninitialized) << state_; |
98 DCHECK(!init_cb.is_null()); | 99 DCHECK(!init_cb.is_null()); |
99 DCHECK(!statistics_cb.is_null()); | 100 DCHECK(!statistics_cb.is_null()); |
100 DCHECK(!ended_cb.is_null()); | 101 DCHECK(!ended_cb.is_null()); |
101 DCHECK(!error_cb.is_null()); | 102 DCHECK(!error_cb.is_null()); |
102 DCHECK(!buffering_state_cb.is_null()); | 103 DCHECK(!buffering_state_cb.is_null()); |
| 104 DCHECK(!natural_size_changed_cb.is_null()); |
103 DCHECK(!waiting_for_decryption_key_cb.is_null()); | 105 DCHECK(!waiting_for_decryption_key_cb.is_null()); |
104 DCHECK(demuxer_stream_provider->GetStream(::media::DemuxerStream::AUDIO) || | 106 DCHECK(demuxer_stream_provider->GetStream(::media::DemuxerStream::AUDIO) || |
105 demuxer_stream_provider->GetStream(::media::DemuxerStream::VIDEO)); | 107 demuxer_stream_provider->GetStream(::media::DemuxerStream::VIDEO)); |
106 | 108 |
107 // Deferred from ctor so as to initialise on correct thread. | 109 // Deferred from ctor so as to initialise on correct thread. |
108 hole_frame_factory_.reset(new HoleFrameFactory(gpu_factories_)); | 110 hole_frame_factory_.reset(new HoleFrameFactory(gpu_factories_)); |
109 | 111 |
110 BeginStateTransition(); | 112 BeginStateTransition(); |
111 | 113 |
112 demuxer_stream_provider_ = demuxer_stream_provider; | 114 demuxer_stream_provider_ = demuxer_stream_provider; |
113 statistics_cb_ = statistics_cb; | 115 statistics_cb_ = statistics_cb; |
114 buffering_state_cb_ = buffering_state_cb; | 116 buffering_state_cb_ = buffering_state_cb; |
| 117 natural_size_changed_cb_ = natural_size_changed_cb; |
115 ended_cb_ = ended_cb; | 118 ended_cb_ = ended_cb; |
116 error_cb_ = error_cb; | 119 error_cb_ = error_cb; |
117 waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb; | 120 waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb; |
118 | 121 |
119 MediaPipelineClient media_pipeline_client; | 122 MediaPipelineClient media_pipeline_client; |
120 media_pipeline_client.error_cb = ::media::BindToCurrentLoop(error_cb_); | 123 media_pipeline_client.error_cb = ::media::BindToCurrentLoop(error_cb_); |
121 media_pipeline_client.buffering_state_cb = ::media::BindToCurrentLoop( | 124 media_pipeline_client.buffering_state_cb = ::media::BindToCurrentLoop( |
122 base::Bind(&CmaRenderer::OnBufferingNotification, weak_this_)); | 125 base::Bind(&CmaRenderer::OnBufferingNotification, weak_this_)); |
123 media_pipeline_client.time_update_cb = ::media::BindToCurrentLoop( | 126 media_pipeline_client.time_update_cb = ::media::BindToCurrentLoop( |
124 base::Bind(&CmaRenderer::OnPlaybackTimeUpdated, weak_this_)); | 127 base::Bind(&CmaRenderer::OnPlaybackTimeUpdated, weak_this_)); |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
401 void CmaRenderer::OnStatisticsUpdated( | 404 void CmaRenderer::OnStatisticsUpdated( |
402 const ::media::PipelineStatistics& stats) { | 405 const ::media::PipelineStatistics& stats) { |
403 DCHECK(thread_checker_.CalledOnValidThread()); | 406 DCHECK(thread_checker_.CalledOnValidThread()); |
404 statistics_cb_.Run(stats); | 407 statistics_cb_.Run(stats); |
405 } | 408 } |
406 | 409 |
407 void CmaRenderer::OnNaturalSizeChanged(const gfx::Size& size) { | 410 void CmaRenderer::OnNaturalSizeChanged(const gfx::Size& size) { |
408 DCHECK(thread_checker_.CalledOnValidThread()); | 411 DCHECK(thread_checker_.CalledOnValidThread()); |
409 video_renderer_sink_->PaintFrameUsingOldRenderingPath( | 412 video_renderer_sink_->PaintFrameUsingOldRenderingPath( |
410 hole_frame_factory_->CreateHoleFrame(size)); | 413 hole_frame_factory_->CreateHoleFrame(size)); |
| 414 natural_size_changed_cb_.Run(size); |
411 } | 415 } |
412 | 416 |
413 void CmaRenderer::OnPlaybackTimeUpdated(base::TimeDelta time, | 417 void CmaRenderer::OnPlaybackTimeUpdated(base::TimeDelta time, |
414 base::TimeDelta max_time, | 418 base::TimeDelta max_time, |
415 base::TimeTicks capture_time) { | 419 base::TimeTicks capture_time) { |
416 DCHECK(thread_checker_.CalledOnValidThread()); | 420 DCHECK(thread_checker_.CalledOnValidThread()); |
417 if (state_ != kPlaying) { | 421 if (state_ != kPlaying) { |
418 LOG(WARNING) << "Ignoring a late time update"; | 422 LOG(WARNING) << "Ignoring a late time update"; |
419 return; | 423 return; |
420 } | 424 } |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 is_pending_transition_ = true; | 480 is_pending_transition_ = true; |
477 } | 481 } |
478 | 482 |
479 void CmaRenderer::CompleteStateTransition(State new_state) { | 483 void CmaRenderer::CompleteStateTransition(State new_state) { |
480 state_ = new_state; | 484 state_ = new_state; |
481 is_pending_transition_ = false; | 485 is_pending_transition_ = false; |
482 } | 486 } |
483 | 487 |
484 } // namespace media | 488 } // namespace media |
485 } // namespace chromecast | 489 } // namespace chromecast |
OLD | NEW |