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 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 DCHECK(!statistics_cb.is_null()); | 248 DCHECK(!statistics_cb.is_null()); |
249 DCHECK(!time_cb.is_null()); | 249 DCHECK(!time_cb.is_null()); |
250 DCHECK(!buffering_state_cb.is_null()); | 250 DCHECK(!buffering_state_cb.is_null()); |
251 DCHECK(!ended_cb.is_null()); | 251 DCHECK(!ended_cb.is_null()); |
252 DCHECK(!error_cb.is_null()); | 252 DCHECK(!error_cb.is_null()); |
253 DCHECK_EQ(kUninitialized, state_); | 253 DCHECK_EQ(kUninitialized, state_); |
254 DCHECK(sink_); | 254 DCHECK(sink_); |
255 | 255 |
256 state_ = kInitializing; | 256 state_ = kInitializing; |
257 | 257 |
258 init_cb_ = init_cb; | 258 // Always post |init_cb_| because |this| could be destroyed if initialization |
| 259 // failed. |
| 260 init_cb_ = BindToCurrentLoop(init_cb); |
| 261 |
259 time_cb_ = time_cb; | 262 time_cb_ = time_cb; |
260 buffering_state_cb_ = buffering_state_cb; | 263 buffering_state_cb_ = buffering_state_cb; |
261 ended_cb_ = ended_cb; | 264 ended_cb_ = ended_cb; |
262 error_cb_ = error_cb; | 265 error_cb_ = error_cb; |
263 | 266 |
264 expecting_config_changes_ = stream->SupportsConfigChanges(); | 267 expecting_config_changes_ = stream->SupportsConfigChanges(); |
265 if (!expecting_config_changes_) { | 268 if (!expecting_config_changes_) { |
266 // The actual buffer size is controlled via the size of the AudioBus | 269 // The actual buffer size is controlled via the size of the AudioBus |
267 // provided to Render(), so just choose something reasonable here for looks. | 270 // provided to Render(), so just choose something reasonable here for looks. |
268 int buffer_size = stream->audio_decoder_config().samples_per_second() / 100; | 271 int buffer_size = stream->audio_decoder_config().samples_per_second() / 100; |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 { | 340 { |
338 base::AutoUnlock auto_unlock(lock_); | 341 base::AutoUnlock auto_unlock(lock_); |
339 sink_->Initialize(audio_parameters_, this); | 342 sink_->Initialize(audio_parameters_, this); |
340 sink_->Start(); | 343 sink_->Start(); |
341 | 344 |
342 // Some sinks play on start... | 345 // Some sinks play on start... |
343 sink_->Pause(); | 346 sink_->Pause(); |
344 } | 347 } |
345 | 348 |
346 DCHECK(!sink_playing_); | 349 DCHECK(!sink_playing_); |
347 | |
348 base::ResetAndReturn(&init_cb_).Run(PIPELINE_OK); | 350 base::ResetAndReturn(&init_cb_).Run(PIPELINE_OK); |
349 } | 351 } |
350 | 352 |
351 void AudioRendererImpl::SetVolume(float volume) { | 353 void AudioRendererImpl::SetVolume(float volume) { |
352 DCHECK(task_runner_->BelongsToCurrentThread()); | 354 DCHECK(task_runner_->BelongsToCurrentThread()); |
353 DCHECK(sink_); | 355 DCHECK(sink_); |
354 sink_->SetVolume(volume); | 356 sink_->SetVolume(volume); |
355 } | 357 } |
356 | 358 |
357 void AudioRendererImpl::DecodedAudioReady( | 359 void AudioRendererImpl::DecodedAudioReady( |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
693 << buffering_state; | 695 << buffering_state; |
694 DCHECK_NE(buffering_state_, buffering_state); | 696 DCHECK_NE(buffering_state_, buffering_state); |
695 lock_.AssertAcquired(); | 697 lock_.AssertAcquired(); |
696 buffering_state_ = buffering_state; | 698 buffering_state_ = buffering_state; |
697 | 699 |
698 task_runner_->PostTask(FROM_HERE, | 700 task_runner_->PostTask(FROM_HERE, |
699 base::Bind(buffering_state_cb_, buffering_state_)); | 701 base::Bind(buffering_state_cb_, buffering_state_)); |
700 } | 702 } |
701 | 703 |
702 } // namespace media | 704 } // namespace media |
OLD | NEW |