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 <vector> | 5 #include <vector> |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 void Initialize(); | 141 void Initialize(); |
142 | 142 |
143 void MonitorLoop(); | 143 void MonitorLoop(); |
144 | 144 |
145 void OnPauseCompleted(); | 145 void OnPauseCompleted(); |
146 | 146 |
147 scoped_ptr<TaskRunnerImpl> task_runner_; | 147 scoped_ptr<TaskRunnerImpl> task_runner_; |
148 scoped_ptr<MediaPipelineBackend> backend_; | 148 scoped_ptr<MediaPipelineBackend> backend_; |
149 scoped_ptr<BufferFeeder> audio_feeder_; | 149 scoped_ptr<BufferFeeder> audio_feeder_; |
150 scoped_ptr<BufferFeeder> video_feeder_; | 150 scoped_ptr<BufferFeeder> video_feeder_; |
| 151 bool stopped_; |
151 | 152 |
152 // Current media time. | 153 // Current media time. |
153 base::TimeDelta pause_time_; | 154 base::TimeDelta pause_time_; |
154 | 155 |
155 // Pause settings | 156 // Pause settings |
156 std::vector<PauseInfo> pause_pattern_; | 157 std::vector<PauseInfo> pause_pattern_; |
157 int pause_pattern_idx_; | 158 int pause_pattern_idx_; |
158 | 159 |
159 DISALLOW_COPY_AND_ASSIGN(AudioVideoPipelineDeviceTest); | 160 DISALLOW_COPY_AND_ASSIGN(AudioVideoPipelineDeviceTest); |
160 }; | 161 }; |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 | 280 |
280 VLOG(2) << "Got " << buffers.size() << " video input frames"; | 281 VLOG(2) << "Got " << buffers.size() << " video input frames"; |
281 scoped_ptr<BufferFeeder> feeder(new BufferFeeder(eos_cb)); | 282 scoped_ptr<BufferFeeder> feeder(new BufferFeeder(eos_cb)); |
282 feeder->Initialize(decoder, buffers); | 283 feeder->Initialize(decoder, buffers); |
283 return feeder; | 284 return feeder; |
284 } | 285 } |
285 | 286 |
286 } // namespace | 287 } // namespace |
287 | 288 |
288 AudioVideoPipelineDeviceTest::AudioVideoPipelineDeviceTest() | 289 AudioVideoPipelineDeviceTest::AudioVideoPipelineDeviceTest() |
289 : pause_pattern_() {} | 290 : stopped_(false), pause_pattern_() {} |
290 | 291 |
291 AudioVideoPipelineDeviceTest::~AudioVideoPipelineDeviceTest() {} | 292 AudioVideoPipelineDeviceTest::~AudioVideoPipelineDeviceTest() {} |
292 | 293 |
293 void AudioVideoPipelineDeviceTest::AddPause(base::TimeDelta delay, | 294 void AudioVideoPipelineDeviceTest::AddPause(base::TimeDelta delay, |
294 base::TimeDelta length) { | 295 base::TimeDelta length) { |
295 pause_pattern_.push_back(PauseInfo(delay, length)); | 296 pause_pattern_.push_back(PauseInfo(delay, length)); |
296 } | 297 } |
297 | 298 |
298 void AudioVideoPipelineDeviceTest::SetPausePattern( | 299 void AudioVideoPipelineDeviceTest::SetPausePattern( |
299 const std::vector<PauseInfo> pattern) { | 300 const std::vector<PauseInfo> pattern) { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 video_feeder_ = BufferFeeder::LoadVideo(backend_.get(), filename, | 332 video_feeder_ = BufferFeeder::LoadVideo(backend_.get(), filename, |
332 false /* raw_h264 */, eos_cb); | 333 false /* raw_h264 */, eos_cb); |
333 audio_feeder_ = BufferFeeder::LoadAudio(backend_.get(), filename, eos_cb); | 334 audio_feeder_ = BufferFeeder::LoadAudio(backend_.get(), filename, eos_cb); |
334 bool success = backend_->Initialize(); | 335 bool success = backend_->Initialize(); |
335 ASSERT_TRUE(success); | 336 ASSERT_TRUE(success); |
336 } | 337 } |
337 | 338 |
338 void AudioVideoPipelineDeviceTest::Start() { | 339 void AudioVideoPipelineDeviceTest::Start() { |
339 pause_time_ = base::TimeDelta(); | 340 pause_time_ = base::TimeDelta(); |
340 pause_pattern_idx_ = 0; | 341 pause_pattern_idx_ = 0; |
| 342 stopped_ = false; |
341 | 343 |
342 if (audio_feeder_) | 344 if (audio_feeder_) |
343 audio_feeder_->Start(); | 345 audio_feeder_->Start(); |
344 if (video_feeder_) | 346 if (video_feeder_) |
345 video_feeder_->Start(); | 347 video_feeder_->Start(); |
346 | 348 |
347 backend_->Start(0); | 349 backend_->Start(0); |
348 | 350 |
349 base::ThreadTaskRunnerHandle::Get()->PostTask( | 351 base::ThreadTaskRunnerHandle::Get()->PostTask( |
350 FROM_HERE, base::Bind(&AudioVideoPipelineDeviceTest::MonitorLoop, | 352 FROM_HERE, base::Bind(&AudioVideoPipelineDeviceTest::MonitorLoop, |
351 base::Unretained(this))); | 353 base::Unretained(this))); |
352 } | 354 } |
353 | 355 |
354 void AudioVideoPipelineDeviceTest::OnEndOfStream() { | 356 void AudioVideoPipelineDeviceTest::OnEndOfStream() { |
355 if ((!audio_feeder_ || audio_feeder_->eos()) && | 357 if ((!audio_feeder_ || audio_feeder_->eos()) && |
356 (!video_feeder_ || video_feeder_->eos())) { | 358 (!video_feeder_ || video_feeder_->eos())) { |
357 bool success = backend_->Stop(); | 359 bool success = backend_->Stop(); |
| 360 stopped_ = true; |
358 ASSERT_TRUE(success); | 361 ASSERT_TRUE(success); |
359 base::MessageLoop::current()->QuitWhenIdle(); | 362 base::MessageLoop::current()->QuitWhenIdle(); |
360 } | 363 } |
361 } | 364 } |
362 | 365 |
363 void AudioVideoPipelineDeviceTest::MonitorLoop() { | 366 void AudioVideoPipelineDeviceTest::MonitorLoop() { |
364 // Backend is stopped, no need to monitor the loop any more. | 367 // Backend is stopped, no need to monitor the loop any more. |
365 if (!audio_feeder_ && !video_feeder_) | 368 if (stopped_) |
366 return; | 369 return; |
367 | 370 |
368 base::TimeDelta media_time = | 371 base::TimeDelta media_time = |
369 base::TimeDelta::FromMicroseconds(backend_->GetCurrentPts()); | 372 base::TimeDelta::FromMicroseconds(backend_->GetCurrentPts()); |
370 | 373 |
371 if (!pause_pattern_.empty() && | 374 if (!pause_pattern_.empty() && |
372 pause_pattern_[pause_pattern_idx_].delay >= base::TimeDelta() && | 375 pause_pattern_[pause_pattern_idx_].delay >= base::TimeDelta() && |
373 media_time >= pause_time_ + pause_pattern_[pause_pattern_idx_].delay) { | 376 media_time >= pause_time_ + pause_pattern_[pause_pattern_idx_].delay) { |
374 // Do Pause | 377 // Do Pause |
375 backend_->Pause(); | 378 backend_->Pause(); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
473 TEST_F(AudioVideoPipelineDeviceTest, WebmPlayback) { | 476 TEST_F(AudioVideoPipelineDeviceTest, WebmPlayback) { |
474 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 477 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
475 | 478 |
476 ConfigureForFile("bear-640x360.webm"); | 479 ConfigureForFile("bear-640x360.webm"); |
477 Start(); | 480 Start(); |
478 message_loop->Run(); | 481 message_loop->Run(); |
479 } | 482 } |
480 | 483 |
481 } // namespace media | 484 } // namespace media |
482 } // namespace chromecast | 485 } // namespace chromecast |
OLD | NEW |