Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(786)

Unified Diff: media/audio/audio_output_device.cc

Issue 10832285: Switch OnMoreData() to use AudioBus. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Comments. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/audio/audio_output_controller_unittest.cc ('k') | media/audio/audio_output_device_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_output_device.cc
diff --git a/media/audio/audio_output_device.cc b/media/audio/audio_output_device.cc
index 34ff54eb7078224293f70c7e107dafcbcd7e329f..e9119cb18f03cb7ea68f80e5ae75503e219a6f29 100644
--- a/media/audio/audio_output_device.cc
+++ b/media/audio/audio_output_device.cc
@@ -33,6 +33,7 @@ class AudioOutputDevice::AudioThreadCallback
private:
AudioRendererSink::RenderCallback* render_callback_;
+ scoped_ptr<AudioBus> audio_bus_;
DISALLOW_COPY_AND_ASSIGN(AudioThreadCallback);
};
@@ -49,7 +50,7 @@ AudioOutputDevice::AudioOutputDevice(
}
void AudioOutputDevice::Initialize(const AudioParameters& params,
- RenderCallback* callback) {
+ RenderCallback* callback) {
CHECK_EQ(0, stream_id_) <<
"AudioOutputDevice::Initialize() must be called before Start()";
@@ -194,7 +195,6 @@ void AudioOutputDevice::OnStreamCreated(
base::SyncSocket::Handle socket_handle,
int length) {
DCHECK(message_loop()->BelongsToCurrentThread());
- DCHECK_GE(length, audio_parameters_.GetBytesPerBuffer());
#if defined(OS_WIN)
DCHECK(handle);
DCHECK(socket_handle);
@@ -250,6 +250,8 @@ AudioOutputDevice::AudioThreadCallback::~AudioThreadCallback() {
void AudioOutputDevice::AudioThreadCallback::MapSharedMemory() {
shared_memory_.Map(TotalSharedMemorySizeInBytes(memory_length_));
+ DCHECK_EQ(memory_length_, AudioBus::CalculateMemorySize(audio_parameters_));
+ audio_bus_ = AudioBus::WrapMemory(audio_parameters_, shared_memory_.memory());
}
// Called whenever we receive notifications about pending data.
@@ -266,20 +268,20 @@ void AudioOutputDevice::AudioThreadCallback::Process(int pending_data) {
TRACE_EVENT0("audio", "AudioOutputDevice::FireRenderCallback");
- // Update the audio-delay measurement then ask client to render audio.
+ // Update the audio-delay measurement then ask client to render audio. Since
+ // |audio_bus_| is wrapping the shared memory the Render() call is writing
+ // directly into the shared memory.
size_t num_frames = render_callback_->Render(
audio_bus_.get(), audio_delay_milliseconds);
- // Interleave, scale, and clip to int.
- // TODO(dalecurtis): Remove this when we have float everywhere:
- // http://crbug.com/114700
- audio_bus_->ToInterleaved(num_frames, audio_parameters_.bits_per_sample() / 8,
- shared_memory_.memory());
-
// Let the host know we are done.
+ // TODO(dalecurtis): Technically this is not always correct. Due to channel
+ // padding for alignment, there may be more data available than this. We're
+ // relying on AudioSyncReader::Read() to parse this with that in mind. Rename
+ // these methods to Set/GetActualFrameCount().
SetActualDataSizeInBytes(
&shared_memory_, memory_length_,
- num_frames * audio_parameters_.GetBytesPerFrame());
+ num_frames * sizeof(*audio_bus_->channel(0)) * audio_bus_->channels());
}
} // namespace media.
« no previous file with comments | « media/audio/audio_output_controller_unittest.cc ('k') | media/audio/audio_output_device_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698