Merge changes from topics "360RA channel mask", "audio channels"
* changes: AudioFormat: Support 13ch audio layout for 360 Reality Audio AudioFormat: Add channel mask constants for immersive 3D audio
This commit is contained in:
@@ -378,6 +378,18 @@ public final class AudioFormat implements Parcelable {
|
|||||||
public static final int CHANNEL_OUT_TOP_BACK_CENTER = 0x40000;
|
public static final int CHANNEL_OUT_TOP_BACK_CENTER = 0x40000;
|
||||||
/** @hide */
|
/** @hide */
|
||||||
public static final int CHANNEL_OUT_TOP_BACK_RIGHT = 0x80000;
|
public static final int CHANNEL_OUT_TOP_BACK_RIGHT = 0x80000;
|
||||||
|
/** @hide */
|
||||||
|
public static final int CHANNEL_OUT_TOP_SIDE_LEFT = 0x100000;
|
||||||
|
/** @hide */
|
||||||
|
public static final int CHANNEL_OUT_TOP_SIDE_RIGHT = 0x200000;
|
||||||
|
/** @hide */
|
||||||
|
public static final int CHANNEL_OUT_BOTTOM_FRONT_LEFT = 0x400000;
|
||||||
|
/** @hide */
|
||||||
|
public static final int CHANNEL_OUT_BOTTOM_FRONT_CENTER = 0x800000;
|
||||||
|
/** @hide */
|
||||||
|
public static final int CHANNEL_OUT_BOTTOM_FRONT_RIGHT = 0x1000000;
|
||||||
|
/** @hide */
|
||||||
|
public static final int CHANNEL_OUT_LOW_FREQUENCY_2 = 0x2000000;
|
||||||
|
|
||||||
public static final int CHANNEL_OUT_MONO = CHANNEL_OUT_FRONT_LEFT;
|
public static final int CHANNEL_OUT_MONO = CHANNEL_OUT_FRONT_LEFT;
|
||||||
public static final int CHANNEL_OUT_STEREO = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT);
|
public static final int CHANNEL_OUT_STEREO = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT);
|
||||||
@@ -407,6 +419,38 @@ public final class AudioFormat implements Parcelable {
|
|||||||
CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT |
|
CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT |
|
||||||
CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT |
|
CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT |
|
||||||
CHANNEL_OUT_LOW_FREQUENCY);
|
CHANNEL_OUT_LOW_FREQUENCY);
|
||||||
|
/** @hide */
|
||||||
|
public static final int CHANNEL_OUT_5POINT1POINT2 = (CHANNEL_OUT_5POINT1 |
|
||||||
|
CHANNEL_OUT_TOP_SIDE_LEFT | CHANNEL_OUT_TOP_SIDE_RIGHT);
|
||||||
|
/** @hide */
|
||||||
|
public static final int CHANNEL_OUT_5POINT1POINT4 = (CHANNEL_OUT_5POINT1 |
|
||||||
|
CHANNEL_OUT_TOP_FRONT_LEFT | CHANNEL_OUT_TOP_FRONT_RIGHT |
|
||||||
|
CHANNEL_OUT_TOP_BACK_LEFT | CHANNEL_OUT_TOP_BACK_RIGHT);
|
||||||
|
/** @hide */
|
||||||
|
public static final int CHANNEL_OUT_7POINT1POINT2 = (CHANNEL_OUT_7POINT1_SURROUND |
|
||||||
|
CHANNEL_OUT_TOP_SIDE_LEFT | CHANNEL_OUT_TOP_SIDE_RIGHT);
|
||||||
|
/** @hide */
|
||||||
|
public static final int CHANNEL_OUT_7POINT1POINT4 = (CHANNEL_OUT_7POINT1_SURROUND |
|
||||||
|
CHANNEL_OUT_TOP_FRONT_LEFT | CHANNEL_OUT_TOP_FRONT_RIGHT |
|
||||||
|
CHANNEL_OUT_TOP_BACK_LEFT | CHANNEL_OUT_TOP_BACK_RIGHT);
|
||||||
|
/** @hide */
|
||||||
|
public static final int CHANNEL_OUT_13POINT_360RA = (
|
||||||
|
CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_FRONT_RIGHT |
|
||||||
|
CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT |
|
||||||
|
CHANNEL_OUT_TOP_FRONT_LEFT | CHANNEL_OUT_TOP_FRONT_CENTER |
|
||||||
|
CHANNEL_OUT_TOP_FRONT_RIGHT |
|
||||||
|
CHANNEL_OUT_TOP_BACK_LEFT | CHANNEL_OUT_TOP_BACK_RIGHT |
|
||||||
|
CHANNEL_OUT_BOTTOM_FRONT_LEFT | CHANNEL_OUT_BOTTOM_FRONT_CENTER |
|
||||||
|
CHANNEL_OUT_BOTTOM_FRONT_RIGHT);
|
||||||
|
/** @hide */
|
||||||
|
public static final int CHANNEL_OUT_22POINT2 = (CHANNEL_OUT_7POINT1POINT4 |
|
||||||
|
CHANNEL_OUT_FRONT_LEFT_OF_CENTER | CHANNEL_OUT_FRONT_RIGHT_OF_CENTER |
|
||||||
|
CHANNEL_OUT_BACK_CENTER | CHANNEL_OUT_TOP_CENTER |
|
||||||
|
CHANNEL_OUT_TOP_FRONT_CENTER | CHANNEL_OUT_TOP_BACK_CENTER |
|
||||||
|
CHANNEL_OUT_TOP_SIDE_LEFT | CHANNEL_OUT_TOP_SIDE_RIGHT |
|
||||||
|
CHANNEL_OUT_BOTTOM_FRONT_LEFT | CHANNEL_OUT_BOTTOM_FRONT_RIGHT |
|
||||||
|
CHANNEL_OUT_BOTTOM_FRONT_CENTER |
|
||||||
|
CHANNEL_OUT_LOW_FREQUENCY_2);
|
||||||
// CHANNEL_OUT_ALL is not yet defined; if added then it should match AUDIO_CHANNEL_OUT_ALL
|
// CHANNEL_OUT_ALL is not yet defined; if added then it should match AUDIO_CHANNEL_OUT_ALL
|
||||||
|
|
||||||
/** Minimum value for sample rate,
|
/** Minimum value for sample rate,
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ import java.lang.ref.WeakReference;
|
|||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
import java.nio.NioUtils;
|
import java.nio.NioUtils;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
@@ -1585,9 +1586,24 @@ public class AudioTrack extends PlayerBase
|
|||||||
AudioFormat.CHANNEL_OUT_LOW_FREQUENCY |
|
AudioFormat.CHANNEL_OUT_LOW_FREQUENCY |
|
||||||
AudioFormat.CHANNEL_OUT_BACK_LEFT |
|
AudioFormat.CHANNEL_OUT_BACK_LEFT |
|
||||||
AudioFormat.CHANNEL_OUT_BACK_RIGHT |
|
AudioFormat.CHANNEL_OUT_BACK_RIGHT |
|
||||||
|
AudioFormat.CHANNEL_OUT_FRONT_LEFT_OF_CENTER |
|
||||||
|
AudioFormat.CHANNEL_OUT_FRONT_RIGHT_OF_CENTER |
|
||||||
AudioFormat.CHANNEL_OUT_BACK_CENTER |
|
AudioFormat.CHANNEL_OUT_BACK_CENTER |
|
||||||
AudioFormat.CHANNEL_OUT_SIDE_LEFT |
|
AudioFormat.CHANNEL_OUT_SIDE_LEFT |
|
||||||
AudioFormat.CHANNEL_OUT_SIDE_RIGHT;
|
AudioFormat.CHANNEL_OUT_SIDE_RIGHT |
|
||||||
|
AudioFormat.CHANNEL_OUT_TOP_CENTER |
|
||||||
|
AudioFormat.CHANNEL_OUT_TOP_FRONT_LEFT |
|
||||||
|
AudioFormat.CHANNEL_OUT_TOP_FRONT_CENTER |
|
||||||
|
AudioFormat.CHANNEL_OUT_TOP_FRONT_RIGHT |
|
||||||
|
AudioFormat.CHANNEL_OUT_TOP_BACK_LEFT |
|
||||||
|
AudioFormat.CHANNEL_OUT_TOP_BACK_CENTER |
|
||||||
|
AudioFormat.CHANNEL_OUT_TOP_BACK_RIGHT |
|
||||||
|
AudioFormat.CHANNEL_OUT_TOP_SIDE_LEFT |
|
||||||
|
AudioFormat.CHANNEL_OUT_TOP_SIDE_RIGHT |
|
||||||
|
AudioFormat.CHANNEL_OUT_BOTTOM_FRONT_LEFT |
|
||||||
|
AudioFormat.CHANNEL_OUT_BOTTOM_FRONT_CENTER |
|
||||||
|
AudioFormat.CHANNEL_OUT_BOTTOM_FRONT_RIGHT |
|
||||||
|
AudioFormat.CHANNEL_OUT_LOW_FREQUENCY_2;
|
||||||
|
|
||||||
// Returns a boolean whether the attributes, format, bufferSizeInBytes, mode allow
|
// Returns a boolean whether the attributes, format, bufferSizeInBytes, mode allow
|
||||||
// power saving to be automatically enabled for an AudioTrack. Returns false if
|
// power saving to be automatically enabled for an AudioTrack. Returns false if
|
||||||
@@ -1740,6 +1756,26 @@ public class AudioTrack extends PlayerBase
|
|||||||
mDataLoadMode = mode;
|
mDataLoadMode = mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// General pair map
|
||||||
|
private static final HashMap<String, Integer> CHANNEL_PAIR_MAP = new HashMap<>() {{
|
||||||
|
put("front", AudioFormat.CHANNEL_OUT_FRONT_LEFT
|
||||||
|
| AudioFormat.CHANNEL_OUT_FRONT_RIGHT);
|
||||||
|
put("back", AudioFormat.CHANNEL_OUT_BACK_LEFT
|
||||||
|
| AudioFormat.CHANNEL_OUT_BACK_RIGHT);
|
||||||
|
put("front of center", AudioFormat.CHANNEL_OUT_FRONT_LEFT_OF_CENTER
|
||||||
|
| AudioFormat.CHANNEL_OUT_FRONT_RIGHT_OF_CENTER);
|
||||||
|
put("side", AudioFormat.CHANNEL_OUT_SIDE_LEFT
|
||||||
|
| AudioFormat.CHANNEL_OUT_SIDE_RIGHT);
|
||||||
|
put("top front", AudioFormat.CHANNEL_OUT_TOP_FRONT_LEFT
|
||||||
|
| AudioFormat.CHANNEL_OUT_TOP_FRONT_RIGHT);
|
||||||
|
put("top back", AudioFormat.CHANNEL_OUT_TOP_BACK_LEFT
|
||||||
|
| AudioFormat.CHANNEL_OUT_TOP_BACK_RIGHT);
|
||||||
|
put("top side", AudioFormat.CHANNEL_OUT_TOP_SIDE_LEFT
|
||||||
|
| AudioFormat.CHANNEL_OUT_TOP_SIDE_RIGHT);
|
||||||
|
put("bottom front", AudioFormat.CHANNEL_OUT_BOTTOM_FRONT_LEFT
|
||||||
|
| AudioFormat.CHANNEL_OUT_BOTTOM_FRONT_RIGHT);
|
||||||
|
}};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convenience method to check that the channel configuration (a.k.a channel mask) is supported
|
* Convenience method to check that the channel configuration (a.k.a channel mask) is supported
|
||||||
* @param channelConfig the mask to validate
|
* @param channelConfig the mask to validate
|
||||||
@@ -1766,21 +1802,15 @@ public class AudioTrack extends PlayerBase
|
|||||||
loge("Front channels must be present in multichannel configurations");
|
loge("Front channels must be present in multichannel configurations");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
final int backPair =
|
// Check all pairs to see that they are matched (front duplicated here).
|
||||||
AudioFormat.CHANNEL_OUT_BACK_LEFT | AudioFormat.CHANNEL_OUT_BACK_RIGHT;
|
for (HashMap.Entry<String, Integer> e : CHANNEL_PAIR_MAP.entrySet()) {
|
||||||
if ((channelConfig & backPair) != 0) {
|
final int positionPair = e.getValue();
|
||||||
if ((channelConfig & backPair) != backPair) {
|
if ((channelConfig & positionPair) != 0
|
||||||
loge("Rear channels can't be used independently");
|
&& (channelConfig & positionPair) != positionPair) {
|
||||||
|
loge("Channel pair (" + e.getKey() + ") cannot be used independently");
|
||||||
return false;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user