OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "media/filters/audio_renderer_impl.h" | 5 #include "media/filters/audio_renderer_impl.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 if (state_ == kUnderflow || state_ == kRebuffering) | 332 if (state_ == kUnderflow || state_ == kRebuffering) |
333 state_ = kPlaying; | 333 state_ = kPlaying; |
334 } | 334 } |
335 | 335 |
336 switch (state_) { | 336 switch (state_) { |
337 case kUninitialized: | 337 case kUninitialized: |
338 NOTREACHED(); | 338 NOTREACHED(); |
339 return; | 339 return; |
340 case kPaused: | 340 case kPaused: |
341 if (!buffer->IsEndOfStream()) | 341 if (!buffer->IsEndOfStream()) |
342 algorithm_->EnqueueBuffer(buffer); | 342 algorithm_->EnqueueBuffer(buffer.get()); |
343 DCHECK(!pending_read_); | 343 DCHECK(!pending_read_); |
344 base::ResetAndReturn(&pause_cb_).Run(); | 344 base::ResetAndReturn(&pause_cb_).Run(); |
345 return; | 345 return; |
346 case kPrerolling: | 346 case kPrerolling: |
347 if (IsBeforePrerollTime(buffer)) { | 347 if (IsBeforePrerollTime(buffer)) { |
348 ScheduleRead_Locked(); | 348 ScheduleRead_Locked(); |
349 return; | 349 return; |
350 } | 350 } |
351 if (!buffer->IsEndOfStream()) { | 351 if (!buffer->IsEndOfStream()) { |
352 algorithm_->EnqueueBuffer(buffer); | 352 algorithm_->EnqueueBuffer(buffer.get()); |
353 if (!algorithm_->IsQueueFull()) | 353 if (!algorithm_->IsQueueFull()) |
354 return; | 354 return; |
355 } | 355 } |
356 state_ = kPaused; | 356 state_ = kPaused; |
357 base::ResetAndReturn(&preroll_cb_).Run(PIPELINE_OK); | 357 base::ResetAndReturn(&preroll_cb_).Run(PIPELINE_OK); |
358 return; | 358 return; |
359 case kPlaying: | 359 case kPlaying: |
360 case kUnderflow: | 360 case kUnderflow: |
361 case kRebuffering: | 361 case kRebuffering: |
362 if (!buffer->IsEndOfStream()) | 362 if (!buffer->IsEndOfStream()) |
363 algorithm_->EnqueueBuffer(buffer); | 363 algorithm_->EnqueueBuffer(buffer.get()); |
364 return; | 364 return; |
365 case kStopped: | 365 case kStopped: |
366 return; | 366 return; |
367 } | 367 } |
368 } | 368 } |
369 | 369 |
370 void AudioRendererImpl::ScheduleRead_Locked() { | 370 void AudioRendererImpl::ScheduleRead_Locked() { |
371 lock_.AssertAcquired(); | 371 lock_.AssertAcquired(); |
372 if (pending_read_ || state_ == kPaused) | 372 if (pending_read_ || state_ == kPaused) |
373 return; | 373 return; |
(...skipping 20 matching lines...) Expand all Loading... |
394 algorithm_->SetPlaybackRate(playback_rate); | 394 algorithm_->SetPlaybackRate(playback_rate); |
395 } | 395 } |
396 | 396 |
397 float AudioRendererImpl::GetPlaybackRate() { | 397 float AudioRendererImpl::GetPlaybackRate() { |
398 base::AutoLock auto_lock(lock_); | 398 base::AutoLock auto_lock(lock_); |
399 return algorithm_->playback_rate(); | 399 return algorithm_->playback_rate(); |
400 } | 400 } |
401 | 401 |
402 bool AudioRendererImpl::IsBeforePrerollTime( | 402 bool AudioRendererImpl::IsBeforePrerollTime( |
403 const scoped_refptr<Buffer>& buffer) { | 403 const scoped_refptr<Buffer>& buffer) { |
404 return (state_ == kPrerolling) && buffer && !buffer->IsEndOfStream() && | 404 return (state_ == kPrerolling) && buffer.get() && !buffer->IsEndOfStream() && |
405 (buffer->GetTimestamp() + buffer->GetDuration()) < preroll_timestamp_; | 405 (buffer->GetTimestamp() + buffer->GetDuration()) < preroll_timestamp_; |
406 } | 406 } |
407 | 407 |
408 int AudioRendererImpl::Render(AudioBus* audio_bus, | 408 int AudioRendererImpl::Render(AudioBus* audio_bus, |
409 int audio_delay_milliseconds) { | 409 int audio_delay_milliseconds) { |
410 if (stopped_ || GetPlaybackRate() == 0.0f) { | 410 if (stopped_ || GetPlaybackRate() == 0.0f) { |
411 // Output silence if stopped. | 411 // Output silence if stopped. |
412 audio_bus->Zero(); | 412 audio_bus->Zero(); |
413 return 0; | 413 return 0; |
414 } | 414 } |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
598 case kUnderflow: | 598 case kUnderflow: |
599 case kRebuffering: | 599 case kRebuffering: |
600 case kStopped: | 600 case kStopped: |
601 if (status != PIPELINE_OK) | 601 if (status != PIPELINE_OK) |
602 error_cb_.Run(status); | 602 error_cb_.Run(status); |
603 return; | 603 return; |
604 } | 604 } |
605 } | 605 } |
606 | 606 |
607 } // namespace media | 607 } // namespace media |
OLD | NEW |