From 0df689495a02c4a34943330099404bd8860981c9 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Mon, 5 Mar 2012 17:06:40 -0800 Subject: [PATCH] AudioTrack: relax check on minimum buffer size Current AudioTrack implementation enforces that the requested audio buffer size is at least corresponding the audio latency. This requirement is too strong and leads to problems with current stagefright and AudioSink implementations when playing over output streams with long latency. Ultimately, the AudioSink design should be changed to specify a minimum buffer size in time or frames units but not in buffer count units. Change-Id: I8ba603956f92ac49143a8249572665aa548f2f0f Conflicts: media/libmedia/AudioTrack.cpp --- include/media/AudioTrack.h | 6 ++++-- media/libmedia/AudioTrack.cpp | 9 +++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h index d1a8105612bb8..1c401e2b276bd 100644 --- a/include/media/AudioTrack.h +++ b/include/media/AudioTrack.h @@ -130,8 +130,10 @@ public: * format: Audio format (e.g AUDIO_FORMAT_PCM_16_BIT for signed * 16 bits per sample). * channelMask: Channel mask: see audio_channels_t. - * frameCount: Total size of track PCM buffer in frames. This defines the - * latency of the track. + * frameCount: Minimum size of track PCM buffer in frames. This defines the + * latency of the track. The actual size selected by the AudioTrack could be + * larger if the requested size is not compatible with current audio HAL + * latency. * flags: Reserved for future use. * cbf: Callback function. If not null, this function is called periodically * to request new PCM data. diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index 8ebb6521382ba..498ad454bb7f4 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -763,12 +763,9 @@ status_t AudioTrack::createTrack_l( mNotificationFramesAct = frameCount/2; } if (frameCount < minFrameCount) { - if (enforceFrameCount) { - LOGE("Invalid buffer size: minFrameCount %d, frameCount %d", minFrameCount, frameCount); - return BAD_VALUE; - } else { - frameCount = minFrameCount; - } + LOGW_IF(enforceFrameCount, "Minimum buffer size corrected from %d to %d", + frameCount, minFrameCount); + frameCount = minFrameCount; } } else { // Ensure that buffer alignment matches channelcount