AudioTrack: support ENCODING_IEC61937
Set DIRECT flag.
Use audio_has_proportional_frames() instead of audio_is_linear_pcm()
where appropriate.
Bug: 24541671
Bug: 20891646
Bug: 26373761
Change-Id: Ia32036b18683b084d6c9887593df87397ea0afd9
Signed-off-by: Phil Burk <philburk@google.com>
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index e17e47e..b2a5f14 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -363,6 +363,8 @@
// these below should probably come from the audioFlinger too...
if (format == AUDIO_FORMAT_DEFAULT) {
format = AUDIO_FORMAT_PCM_16_BIT;
+ } else if (format == AUDIO_FORMAT_IEC61937) { // HDMI pass-through?
+ mAttributes.flags |= AUDIO_OUTPUT_FLAG_IEC958_NONAUDIO;
}
// validate parameters
@@ -398,13 +400,13 @@
}
if (flags & AUDIO_OUTPUT_FLAG_DIRECT) {
- if (audio_is_linear_pcm(format)) {
+ if (audio_has_proportional_frames(format)) {
mFrameSize = channelCount * audio_bytes_per_sample(format);
} else {
mFrameSize = sizeof(uint8_t);
}
} else {
- ALOG_ASSERT(audio_is_linear_pcm(format));
+ ALOG_ASSERT(audio_has_proportional_frames(format));
mFrameSize = channelCount * audio_bytes_per_sample(format);
// createTrack will return an error if PCM format is not supported by server,
// so no need to check for specific PCM formats here
@@ -1221,7 +1223,7 @@
mNotificationFramesAct = mNotificationFramesReq;
size_t frameCount = mReqFrameCount;
- if (!audio_is_linear_pcm(mFormat)) {
+ if (!audio_has_proportional_frames(mFormat)) {
if (mSharedBuffer != 0) {
// Same comment as below about ignoring frameCount parameter for set()
@@ -1944,7 +1946,7 @@
return NS_NEVER;
}
- if (mRetryOnPartialBuffer && audio_is_linear_pcm(mFormat)) {
+ if (mRetryOnPartialBuffer && audio_has_proportional_frames(mFormat)) {
mRetryOnPartialBuffer = false;
if (avail < mRemainingFrames) {
if (ns > 0) { // account for obtain time
@@ -1990,7 +1992,7 @@
// buffer size and skip the loop entirely.
nsecs_t myns;
- if (audio_is_linear_pcm(mFormat)) {
+ if (audio_has_proportional_frames(mFormat)) {
// time to wait based on buffer occupancy
const nsecs_t datans = mRemainingFrames <= avail ? 0 :
framesToNanoseconds(mRemainingFrames - avail, sampleRate, speed);