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 |