| 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 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 need_another_buffer = HandleSplicerBuffer(splicer_->GetNextBuffer()); | 349 need_another_buffer = HandleSplicerBuffer(splicer_->GetNextBuffer()); |
| 350 | 350 |
| 351 if (!need_another_buffer && !CanRead_Locked()) | 351 if (!need_another_buffer && !CanRead_Locked()) |
| 352 return; | 352 return; |
| 353 | 353 |
| 354 AttemptRead_Locked(); | 354 AttemptRead_Locked(); |
| 355 } | 355 } |
| 356 | 356 |
| 357 bool AudioRendererImpl::HandleSplicerBuffer( | 357 bool AudioRendererImpl::HandleSplicerBuffer( |
| 358 const scoped_refptr<DataBuffer>& buffer) { | 358 const scoped_refptr<DataBuffer>& buffer) { |
| 359 if (buffer->IsEndOfStream()) { | 359 if (buffer->end_of_stream()) { |
| 360 received_end_of_stream_ = true; | 360 received_end_of_stream_ = true; |
| 361 | 361 |
| 362 // Transition to kPlaying if we are currently handling an underflow since | 362 // Transition to kPlaying if we are currently handling an underflow since |
| 363 // no more data will be arriving. | 363 // no more data will be arriving. |
| 364 if (state_ == kUnderflow || state_ == kRebuffering) | 364 if (state_ == kUnderflow || state_ == kRebuffering) |
| 365 state_ = kPlaying; | 365 state_ = kPlaying; |
| 366 } | 366 } |
| 367 | 367 |
| 368 switch (state_) { | 368 switch (state_) { |
| 369 case kUninitialized: | 369 case kUninitialized: |
| 370 NOTREACHED(); | 370 NOTREACHED(); |
| 371 return false; | 371 return false; |
| 372 case kPaused: | 372 case kPaused: |
| 373 if (!buffer->IsEndOfStream()) | 373 if (!buffer->end_of_stream()) |
| 374 algorithm_->EnqueueBuffer(buffer); | 374 algorithm_->EnqueueBuffer(buffer); |
| 375 DCHECK(!pending_read_); | 375 DCHECK(!pending_read_); |
| 376 base::ResetAndReturn(&pause_cb_).Run(); | 376 base::ResetAndReturn(&pause_cb_).Run(); |
| 377 return false; | 377 return false; |
| 378 case kPrerolling: | 378 case kPrerolling: |
| 379 if (IsBeforePrerollTime(buffer)) | 379 if (IsBeforePrerollTime(buffer)) |
| 380 return true; | 380 return true; |
| 381 | 381 |
| 382 if (!buffer->IsEndOfStream()) { | 382 if (!buffer->end_of_stream()) { |
| 383 algorithm_->EnqueueBuffer(buffer); | 383 algorithm_->EnqueueBuffer(buffer); |
| 384 if (!algorithm_->IsQueueFull()) | 384 if (!algorithm_->IsQueueFull()) |
| 385 return false; | 385 return false; |
| 386 } | 386 } |
| 387 state_ = kPaused; | 387 state_ = kPaused; |
| 388 base::ResetAndReturn(&preroll_cb_).Run(PIPELINE_OK); | 388 base::ResetAndReturn(&preroll_cb_).Run(PIPELINE_OK); |
| 389 return false; | 389 return false; |
| 390 case kPlaying: | 390 case kPlaying: |
| 391 case kUnderflow: | 391 case kUnderflow: |
| 392 case kRebuffering: | 392 case kRebuffering: |
| 393 if (!buffer->IsEndOfStream()) | 393 if (!buffer->end_of_stream()) |
| 394 algorithm_->EnqueueBuffer(buffer); | 394 algorithm_->EnqueueBuffer(buffer); |
| 395 return false; | 395 return false; |
| 396 case kStopped: | 396 case kStopped: |
| 397 return false; | 397 return false; |
| 398 } | 398 } |
| 399 return false; | 399 return false; |
| 400 } | 400 } |
| 401 | 401 |
| 402 void AudioRendererImpl::AttemptRead() { | 402 void AudioRendererImpl::AttemptRead() { |
| 403 base::AutoLock auto_lock(lock_); | 403 base::AutoLock auto_lock(lock_); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 448 DoPlay(); | 448 DoPlay(); |
| 449 else if (current_playback_rate != 0 && playback_rate == 0) | 449 else if (current_playback_rate != 0 && playback_rate == 0) |
| 450 DoPause(); | 450 DoPause(); |
| 451 | 451 |
| 452 base::AutoLock auto_lock(lock_); | 452 base::AutoLock auto_lock(lock_); |
| 453 algorithm_->SetPlaybackRate(playback_rate); | 453 algorithm_->SetPlaybackRate(playback_rate); |
| 454 } | 454 } |
| 455 | 455 |
| 456 bool AudioRendererImpl::IsBeforePrerollTime( | 456 bool AudioRendererImpl::IsBeforePrerollTime( |
| 457 const scoped_refptr<DataBuffer>& buffer) { | 457 const scoped_refptr<DataBuffer>& buffer) { |
| 458 return (state_ == kPrerolling) && buffer.get() && !buffer->IsEndOfStream() && | 458 return (state_ == kPrerolling) && buffer.get() && !buffer->end_of_stream() && |
| 459 (buffer->GetTimestamp() + buffer->GetDuration()) < preroll_timestamp_; | 459 (buffer->timestamp() + buffer->duration()) < preroll_timestamp_; |
| 460 } | 460 } |
| 461 | 461 |
| 462 int AudioRendererImpl::Render(AudioBus* audio_bus, | 462 int AudioRendererImpl::Render(AudioBus* audio_bus, |
| 463 int audio_delay_milliseconds) { | 463 int audio_delay_milliseconds) { |
| 464 if (actual_frames_per_buffer_ != audio_bus->frames()) { | 464 if (actual_frames_per_buffer_ != audio_bus->frames()) { |
| 465 audio_buffer_.reset( | 465 audio_buffer_.reset( |
| 466 new uint8[audio_bus->frames() * audio_parameters_.GetBytesPerFrame()]); | 466 new uint8[audio_bus->frames() * audio_parameters_.GetBytesPerFrame()]); |
| 467 actual_frames_per_buffer_ = audio_bus->frames(); | 467 actual_frames_per_buffer_ = audio_bus->frames(); |
| 468 } | 468 } |
| 469 | 469 |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 642 case kUnderflow: | 642 case kUnderflow: |
| 643 case kRebuffering: | 643 case kRebuffering: |
| 644 case kStopped: | 644 case kStopped: |
| 645 if (status != PIPELINE_OK) | 645 if (status != PIPELINE_OK) |
| 646 error_cb_.Run(status); | 646 error_cb_.Run(status); |
| 647 return; | 647 return; |
| 648 } | 648 } |
| 649 } | 649 } |
| 650 | 650 |
| 651 } // namespace media | 651 } // namespace media |
| OLD | NEW |