summaryrefslogtreecommitdiffstats
path: root/media/audio/android
diff options
context:
space:
mode:
authordalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-05 13:39:21 +0000
committerdalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-05 13:39:21 +0000
commitdfc48e4ce465db7e44e7cb7a4d2628958e1787a0 (patch)
treed387f8da52225eb08fe29d6bc17808d04739b26c /media/audio/android
parent42e66e5f9dc55b57bfc95f8a49836fba59ad0cba (diff)
downloadchromium_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.cc17
-rw-r--r--media/audio/android/opensles_output.h3
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);
};