diff options
author | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-05 13:39:21 +0000 |
---|---|---|
committer | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-05 13:39:21 +0000 |
commit | dfc48e4ce465db7e44e7cb7a4d2628958e1787a0 (patch) | |
tree | d387f8da52225eb08fe29d6bc17808d04739b26c /media/audio/android | |
parent | 42e66e5f9dc55b57bfc95f8a49836fba59ad0cba (diff) | |
download | chromium_src-dfc48e4ce465db7e44e7cb7a4d2628958e1787a0.zip chromium_src-dfc48e4ce465db7e44e7cb7a4d2628958e1787a0.tar.gz chromium_src-dfc48e4ce465db7e44e7cb7a4d2628958e1787a0.tar.bz2 |
Switch OnMoreData() to use AudioBus.
As titled, with this change we're now piping float data around the pipeline from
end to end. This change is in preparation for browser side channel remixing and
resampling.
As a consequence of this change the shared memory now represents the
contents of an AudioBus object, which is essentially audio data in a float
planar format.
BUG=114700
TEST=Should be no audible change. Ran all existing tests. Compiled ran
WebAudio/HTML5/WebRTC on all platforms and PPAPI on Linux.
Review URL: https://chromiumcodereview.appspot.com/10832285
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@154951 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/android')
-rw-r--r-- | media/audio/android/opensles_output.cc | 17 | ||||
-rw-r--r-- | media/audio/android/opensles_output.h | 3 |
2 files changed, 14 insertions, 6 deletions
diff --git a/media/audio/android/opensles_output.cc b/media/audio/android/opensles_output.cc index 3b5ee64..26ae25b 100644 --- a/media/audio/android/opensles_output.cc +++ b/media/audio/android/opensles_output.cc @@ -35,6 +35,7 @@ OpenSLESOutputStream::OpenSLESOutputStream(AudioManagerAndroid* manager, NOTREACHED() << "Unsupported number of channels: " << format_.numChannels; buffer_size_bytes_ = params.GetBytesPerBuffer(); + audio_bus_ = AudioBus::Create(params); memset(&audio_data_, 0, sizeof(audio_data_)); } @@ -257,17 +258,21 @@ void OpenSLESOutputStream::FillBufferQueue() { // Read data from the registered client source. // TODO(xians): Get an accurate delay estimation. uint32 hardware_delay = buffer_size_bytes_; - size_t num_filled_bytes = callback_->OnMoreData( - audio_data_[active_queue_], - buffer_size_bytes_, - AudioBuffersState(0, hardware_delay)); - DCHECK(num_filled_bytes <= buffer_size_bytes_); + int frames_filled = callback_->OnMoreData( + audio_bus_.get(), AudioBuffersState(0, hardware_delay)); + int num_filled_bytes = + frames_filled * audio_bus_->channels() * format_.bitsPerSample / 8; + DCHECK_LE(static_cast<size_t>(num_filled_bytes), buffer_size_bytes_); + // Note: If this ever changes to output raw float the data must be clipped and + // sanitized since it may come from an untrusted source such as NaCl. + audio_bus_->ToInterleaved( + frames_filled, format_.bitsPerSample / 8, audio_data_[active_queue_]); // Perform in-place, software-volume adjustments. media::AdjustVolume(audio_data_[active_queue_], num_filled_bytes, format_.numChannels, - format_.containerSize >> 3, + format_.bitsPerSample / 8, volume_); // Enqueue the buffer for playback. diff --git a/media/audio/android/opensles_output.h b/media/audio/android/opensles_output.h index f37283a..9ecfb6c 100644 --- a/media/audio/android/opensles_output.h +++ b/media/audio/android/opensles_output.h @@ -80,6 +80,9 @@ class OpenSLESOutputStream : public AudioOutputStream { // Volume level from 0 to 1. float volume_; + // Container for retrieving data from AudioSourceCallback::OnMoreData(). + scoped_ptr<AudioBus> audio_bus_; + DISALLOW_COPY_AND_ASSIGN(OpenSLESOutputStream); }; |