Use audio_bytes_per_frame now supporting compressed formats
Change-Id: Id3153814070b61118949e4a7fd9590d76cd65be4
diff --git a/media/libaudioclient/AudioRecord.cpp b/media/libaudioclient/AudioRecord.cpp
index 073a030..c912d27 100644
--- a/media/libaudioclient/AudioRecord.cpp
+++ b/media/libaudioclient/AudioRecord.cpp
@@ -68,10 +68,9 @@
}
// We double the size of input buffer for ping pong use of record buffer.
- // Assumes audio_is_linear_pcm(format)
- const auto sampleSize = audio_channel_count_from_in_mask(channelMask) *
- audio_bytes_per_sample(format);
- if (sampleSize == 0 || ((*frameCount = (size * 2) / sampleSize) == 0)) {
+ const auto frameSize = audio_bytes_per_frame(
+ audio_channel_count_from_in_mask(channelMask), format);
+ if (frameSize == 0 || ((*frameCount = (size * 2) / frameSize) == 0)) {
ALOGE("%s(): Unsupported configuration: sampleRate %u, format %#x, channelMask %#x",
__func__, sampleRate, format, channelMask);
return BAD_VALUE;
@@ -353,12 +352,7 @@
}
mChannelCount = audio_channel_count_from_in_mask(mChannelMask);
-
- if (audio_is_linear_pcm(mFormat)) {
- mFrameSize = mChannelCount * audio_bytes_per_sample(mFormat);
- } else {
- mFrameSize = sizeof(uint8_t);
- }
+ mFrameSize = audio_bytes_per_frame(mChannelCount, mFormat);
// mFrameCount is initialized in createRecord_l
mReqFrameCount = frameCount;
diff --git a/media/libaudioclient/AudioTrack.cpp b/media/libaudioclient/AudioTrack.cpp
index f3539a1..f050a20 100644
--- a/media/libaudioclient/AudioTrack.cpp
+++ b/media/libaudioclient/AudioTrack.cpp
@@ -594,18 +594,13 @@
channelCount = audio_channel_count_from_out_mask(channelMask);
mChannelCount = channelCount;
- if (mFlags & AUDIO_OUTPUT_FLAG_DIRECT) {
- if (audio_has_proportional_frames(format)) {
- mFrameSize = channelCount * audio_bytes_per_sample(format);
- } else {
- mFrameSize = sizeof(uint8_t);
- }
- } else {
- ALOG_ASSERT(audio_has_proportional_frames(format));
- mFrameSize = channelCount * audio_bytes_per_sample(format);
+ if (!(mFlags & AUDIO_OUTPUT_FLAG_DIRECT)) {
// createTrack will return an error if PCM format is not supported by server,
// so no need to check for specific PCM formats here
+ ALOGW_IF(!audio_has_proportional_frames(format), "%s(): no direct flag for format 0x%x",
+ __func__, format);
}
+ mFrameSize = audio_bytes_per_frame(channelCount, format);
// sampling rate must be specified for direct outputs
if (sampleRate == 0 && (mFlags & AUDIO_OUTPUT_FLAG_DIRECT) != 0) {
diff --git a/media/libnbaio/NBAIO.cpp b/media/libnbaio/NBAIO.cpp
index 1cb4410..3abc35e 100644
--- a/media/libnbaio/NBAIO.cpp
+++ b/media/libnbaio/NBAIO.cpp
@@ -55,8 +55,7 @@
ret.mSampleRate = sampleRate;
ret.mChannelCount = channelCount;
ret.mFormat = format;
- ret.mFrameSize = audio_is_linear_pcm(format) ?
- channelCount * audio_bytes_per_sample(format) : sizeof(uint8_t);
+ ret.mFrameSize = audio_bytes_per_frame(channelCount, format);
return ret;
}
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp
index 31246ec..75d885d 100644
--- a/services/audioflinger/Tracks.cpp
+++ b/services/audioflinger/Tracks.cpp
@@ -113,8 +113,7 @@
mChannelCount(isOut ?
audio_channel_count_from_out_mask(channelMask) :
audio_channel_count_from_in_mask(channelMask)),
- mFrameSize(audio_has_proportional_frames(format) ?
- mChannelCount * audio_bytes_per_sample(format) : sizeof(int8_t)),
+ mFrameSize(audio_bytes_per_frame(mChannelCount, format)),
mFrameCount(frameCount),
mSessionId(sessionId),
mIsOut(isOut),