diff options
author | Andy Hung <hunga@google.com> | 2014-08-16 00:39:19 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-08-15 21:23:40 +0000 |
commit | efb3a8b37ae1d4dd9f713ceab9783ad96772bbc6 (patch) | |
tree | 8d7edc2c69969477aac953c507cbc88eb7fea3d6 /media | |
parent | af059c65a16c7e2f88ecb15645a0acc3f6247356 (diff) | |
parent | ad720aeea741d9058a7b4d326c9ab1b3ebcd7c62 (diff) | |
download | frameworks_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.java | 20 |
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; } |