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 |