| 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/backend/media_pipeline_device_fake.h" | 5 #include "chromecast/media/cma/backend/media_pipeline_device_fake.h" |
| 6 | 6 |
| 7 #include <list> | 7 #include <list> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/callback_helpers.h" | 11 #include "base/callback_helpers.h" |
| 12 #include "base/location.h" | 12 #include "base/location.h" |
| 13 #include "base/logging.h" | 13 #include "base/logging.h" |
| 14 #include "base/macros.h" | 14 #include "base/macros.h" |
| 15 #include "base/message_loop/message_loop_proxy.h" | 15 #include "base/single_thread_task_runner.h" |
| 16 #include "base/thread_task_runner_handle.h" |
| 16 #include "chromecast/media/cma/backend/audio_pipeline_device.h" | 17 #include "chromecast/media/cma/backend/audio_pipeline_device.h" |
| 17 #include "chromecast/media/cma/backend/media_clock_device.h" | 18 #include "chromecast/media/cma/backend/media_clock_device.h" |
| 18 #include "chromecast/media/cma/backend/media_component_device.h" | 19 #include "chromecast/media/cma/backend/media_component_device.h" |
| 19 #include "chromecast/media/cma/backend/video_pipeline_device.h" | 20 #include "chromecast/media/cma/backend/video_pipeline_device.h" |
| 20 #include "chromecast/media/cma/base/decoder_buffer_base.h" | 21 #include "chromecast/media/cma/base/decoder_buffer_base.h" |
| 21 #include "chromecast/public/media/decoder_config.h" | 22 #include "chromecast/public/media/decoder_config.h" |
| 22 #include "media/base/buffers.h" | 23 #include "media/base/buffers.h" |
| 23 | 24 |
| 24 namespace chromecast { | 25 namespace chromecast { |
| 25 namespace media { | 26 namespace media { |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 decoded_byte_count_ = 0; | 238 decoded_byte_count_ = 0; |
| 238 frames_.clear(); | 239 frames_.clear(); |
| 239 pending_buffer_ = scoped_refptr<DecoderBufferBase>(); | 240 pending_buffer_ = scoped_refptr<DecoderBufferBase>(); |
| 240 frame_pushed_cb_.Reset(); | 241 frame_pushed_cb_.Reset(); |
| 241 return true; | 242 return true; |
| 242 } | 243 } |
| 243 | 244 |
| 244 if (state_ == kStateRunning) { | 245 if (state_ == kStateRunning) { |
| 245 if (!scheduled_rendering_task_) { | 246 if (!scheduled_rendering_task_) { |
| 246 scheduled_rendering_task_ = true; | 247 scheduled_rendering_task_ = true; |
| 247 base::MessageLoopProxy::current()->PostTask( | 248 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 248 FROM_HERE, | 249 FROM_HERE, |
| 249 base::Bind(&MediaComponentDeviceFake::RenderTask, weak_this_)); | 250 base::Bind(&MediaComponentDeviceFake::RenderTask, weak_this_)); |
| 250 } | 251 } |
| 251 return true; | 252 return true; |
| 252 } | 253 } |
| 253 | 254 |
| 254 return true; | 255 return true; |
| 255 } | 256 } |
| 256 | 257 |
| 257 bool MediaComponentDeviceFake::SetStartPts(base::TimeDelta time) { | 258 bool MediaComponentDeviceFake::SetStartPts(base::TimeDelta time) { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 | 301 |
| 301 void MediaComponentDeviceFake::RenderTask() { | 302 void MediaComponentDeviceFake::RenderTask() { |
| 302 scheduled_rendering_task_ = false; | 303 scheduled_rendering_task_ = false; |
| 303 | 304 |
| 304 if (state_ != kStateRunning) | 305 if (state_ != kStateRunning) |
| 305 return; | 306 return; |
| 306 | 307 |
| 307 base::TimeDelta media_time = media_clock_device_->GetTime(); | 308 base::TimeDelta media_time = media_clock_device_->GetTime(); |
| 308 if (media_time == ::media::kNoTimestamp()) { | 309 if (media_time == ::media::kNoTimestamp()) { |
| 309 scheduled_rendering_task_ = true; | 310 scheduled_rendering_task_ = true; |
| 310 base::MessageLoopProxy::current()->PostDelayedTask( | 311 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 311 FROM_HERE, | 312 FROM_HERE, |
| 312 base::Bind(&MediaComponentDeviceFake::RenderTask, weak_this_), | 313 base::Bind(&MediaComponentDeviceFake::RenderTask, weak_this_), |
| 313 base::TimeDelta::FromMilliseconds(50)); | 314 base::TimeDelta::FromMilliseconds(50)); |
| 314 return; | 315 return; |
| 315 } | 316 } |
| 316 | 317 |
| 317 while (!frames_.empty() && frames_.front().pts <= media_time) { | 318 while (!frames_.empty() && frames_.front().pts <= media_time) { |
| 318 rendering_time_ = frames_.front().pts; | 319 rendering_time_ = frames_.front().pts; |
| 319 decoded_frame_count_++; | 320 decoded_frame_count_++; |
| 320 decoded_byte_count_ += frames_.front().size; | 321 decoded_byte_count_ += frames_.front().size; |
| 321 frames_.pop_front(); | 322 frames_.pop_front(); |
| 322 if (pending_buffer_.get()) { | 323 if (pending_buffer_.get()) { |
| 323 FakeDecoderBuffer fake_buffer; | 324 FakeDecoderBuffer fake_buffer; |
| 324 fake_buffer.size = pending_buffer_->data_size(); | 325 fake_buffer.size = pending_buffer_->data_size(); |
| 325 fake_buffer.pts = pending_buffer_->timestamp(); | 326 fake_buffer.pts = pending_buffer_->timestamp(); |
| 326 frames_.push_back(fake_buffer); | 327 frames_.push_back(fake_buffer); |
| 327 pending_buffer_ = scoped_refptr<DecoderBufferBase>(); | 328 pending_buffer_ = scoped_refptr<DecoderBufferBase>(); |
| 328 base::ResetAndReturn(&frame_pushed_cb_).Run(kFrameSuccess); | 329 base::ResetAndReturn(&frame_pushed_cb_).Run(kFrameSuccess); |
| 329 } | 330 } |
| 330 } | 331 } |
| 331 | 332 |
| 332 if (frames_.empty() && is_eos_) { | 333 if (frames_.empty() && is_eos_) { |
| 333 if (!client_.eos_cb.is_null()) | 334 if (!client_.eos_cb.is_null()) |
| 334 client_.eos_cb.Run(); | 335 client_.eos_cb.Run(); |
| 335 return; | 336 return; |
| 336 } | 337 } |
| 337 | 338 |
| 338 scheduled_rendering_task_ = true; | 339 scheduled_rendering_task_ = true; |
| 339 base::MessageLoopProxy::current()->PostDelayedTask( | 340 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 340 FROM_HERE, | 341 FROM_HERE, base::Bind(&MediaComponentDeviceFake::RenderTask, weak_this_), |
| 341 base::Bind(&MediaComponentDeviceFake::RenderTask, weak_this_), | |
| 342 base::TimeDelta::FromMilliseconds(50)); | 342 base::TimeDelta::FromMilliseconds(50)); |
| 343 } | 343 } |
| 344 | 344 |
| 345 bool MediaComponentDeviceFake::GetStatistics(Statistics* stats) const { | 345 bool MediaComponentDeviceFake::GetStatistics(Statistics* stats) const { |
| 346 if (state_ != kStateRunning) | 346 if (state_ != kStateRunning) |
| 347 return false; | 347 return false; |
| 348 | 348 |
| 349 // Note: what is returned here is not the number of samples but the number of | 349 // Note: what is returned here is not the number of samples but the number of |
| 350 // frames. The value is different for audio. | 350 // frames. The value is different for audio. |
| 351 stats->decoded_bytes = decoded_byte_count_; | 351 stats->decoded_bytes = decoded_byte_count_; |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 VideoPipelineDevice* MediaPipelineDeviceFake::GetVideoPipelineDevice() const { | 574 VideoPipelineDevice* MediaPipelineDeviceFake::GetVideoPipelineDevice() const { |
| 575 return video_pipeline_device_.get(); | 575 return video_pipeline_device_.get(); |
| 576 } | 576 } |
| 577 | 577 |
| 578 MediaClockDevice* MediaPipelineDeviceFake::GetMediaClockDevice() const { | 578 MediaClockDevice* MediaPipelineDeviceFake::GetMediaClockDevice() const { |
| 579 return media_clock_device_.get(); | 579 return media_clock_device_.get(); |
| 580 } | 580 } |
| 581 | 581 |
| 582 } // namespace media | 582 } // namespace media |
| 583 } // namespace chromecast | 583 } // namespace chromecast |
| OLD | NEW |