summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorAndy Hung <hunga@google.com>2014-08-16 00:39:19 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-08-15 21:23:40 +0000
commitefb3a8b37ae1d4dd9f713ceab9783ad96772bbc6 (patch)
tree8d7edc2c69969477aac953c507cbc88eb7fea3d6 /media
parentaf059c65a16c7e2f88ecb15645a0acc3f6247356 (diff)
parentad720aeea741d9058a7b4d326c9ab1b3ebcd7c62 (diff)
downloadframeworks_base-efb3a8b37ae1d4dd9f713ceab9783ad96772bbc6.zip
frameworks_base-efb3a8b37ae1d4dd9f713ceab9783ad96772bbc6.tar.gz
frameworks_base-efb3a8b37ae1d4dd9f713ceab9783ad96772bbc6.tar.bz2
Merge "Fix 7.1 audio playback from AudioTrack" into lmp-dev
Diffstat (limited to 'media')
-rw-r--r--media/java/android/media/AudioTrack.java20
1 files changed, 19 insertions, 1 deletions
diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java
index 8bc2498..52bcbbb 100644
--- a/media/java/android/media/AudioTrack.java
+++ b/media/java/android/media/AudioTrack.java
@@ -94,6 +94,9 @@ public class AudioTrack
/** Maximum value for sample rate */
private static final int SAMPLE_RATE_HZ_MAX = 48000;
+ /** Maximum value for AudioTrack channel count */
+ private static final int CHANNEL_COUNT_MAX = 8;
+
/** indicates AudioTrack state is stopped */
public static final int PLAYSTATE_STOPPED = 1; // matches SL_PLAYSTATE_STOPPED
/** indicates AudioTrack state is paused */
@@ -465,7 +468,9 @@ public class AudioTrack
AudioFormat.CHANNEL_OUT_LOW_FREQUENCY |
AudioFormat.CHANNEL_OUT_BACK_LEFT |
AudioFormat.CHANNEL_OUT_BACK_RIGHT |
- AudioFormat.CHANNEL_OUT_BACK_CENTER;
+ AudioFormat.CHANNEL_OUT_BACK_CENTER |
+ AudioFormat.CHANNEL_OUT_SIDE_LEFT |
+ AudioFormat.CHANNEL_OUT_SIDE_RIGHT;
// Convenience method for the constructor's parameter checks.
// This is where constructor IllegalArgumentException-s are thrown
@@ -541,6 +546,12 @@ public class AudioTrack
loge("Channel configuration features unsupported channels");
return false;
}
+ final int channelCount = Integer.bitCount(channelConfig);
+ if (channelCount > CHANNEL_COUNT_MAX) {
+ loge("Channel configuration contains too many channels " +
+ channelCount + ">" + CHANNEL_COUNT_MAX);
+ return false;
+ }
// check for unsupported multichannel combinations:
// - FL/FR must be present
// - L/R channels must be paired (e.g. no single L channel)
@@ -558,6 +569,13 @@ public class AudioTrack
return false;
}
}
+ final int sidePair =
+ AudioFormat.CHANNEL_OUT_SIDE_LEFT | AudioFormat.CHANNEL_OUT_SIDE_RIGHT;
+ if ((channelConfig & sidePair) != 0
+ && (channelConfig & sidePair) != sidePair) {
+ loge("Side channels can't be used independently");
+ return false;
+ }
return true;
}