summaryrefslogtreecommitdiff
path: root/framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java
diff options
context:
space:
mode:
authorƁukasz Rymanowski <rlukasz@google.com>2022-03-10 10:28:12 +0000
committerJack He <siyuanh@google.com>2022-03-16 11:46:29 -0700
commit4fb6536c516709c8fc91602622415f1b5af049c4 (patch)
treefd0450346cc93bdd7f47012ec27e3ce3978ee950 /framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java
parent49527e336a267f2ac37eafd26ac68c48c0cb95d6 (diff)
BluetoothLeAudio: Fix API for codec preferences
This patch adjust codec preferences for the Le Audio usage. API is using group id now and allows to choose configuration for output and input. Note: Input and Output shall use same codec type (for now) but different codec parameters might be used. Bug: 219875113 Test: atest BluetoothInstrumentationTests Ignore-AOSP-First: Compilation error Change-Id: Iee7a0c6d42dd029f9c24a27ec892eb7ef261263b
Diffstat (limited to 'framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java')
-rw-r--r--framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java161
1 files changed, 117 insertions, 44 deletions
diff --git a/framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java b/framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java
index 004bf6b84f..c91d13ffe0 100644
--- a/framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java
+++ b/framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java
@@ -72,7 +72,7 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
public static final int CODEC_PRIORITY_HIGHEST = 1000 * 1000;
/** @hide */
- @IntDef(prefix = "SAMPLE_RATE_",
+ @IntDef(flag = true, prefix = "SAMPLE_RATE_",
value = {SAMPLE_RATE_NONE, SAMPLE_RATE_8000, SAMPLE_RATE_16000, SAMPLE_RATE_24000,
SAMPLE_RATE_32000, SAMPLE_RATE_44100, SAMPLE_RATE_48000})
@Retention(RetentionPolicy.SOURCE)
@@ -81,41 +81,45 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
/**
* Codec sample rate 0 Hz. Default value used for
* codec sample rate.
+ * Values are the bit mask as defined in the
+ * Bluetooth Assigned Numbers, Generic Audio,
+ * Supported_Sampling_Frequencies table
+ * Note: We use only part of it.
*/
public static final int SAMPLE_RATE_NONE = 0;
/**
* Codec sample rate 8000 Hz.
*/
- public static final int SAMPLE_RATE_8000 = 1;
+ public static final int SAMPLE_RATE_8000 = 0x01 << 0;
/**
* Codec sample rate 16000 Hz.
*/
- public static final int SAMPLE_RATE_16000 = 2;
+ public static final int SAMPLE_RATE_16000 = 0x01 << 2;
/**
* Codec sample rate 24000 Hz.
*/
- public static final int SAMPLE_RATE_24000 = 3;
+ public static final int SAMPLE_RATE_24000 = 0x01 << 4;
/**
* Codec sample rate 32000 Hz.
*/
- public static final int SAMPLE_RATE_32000 = 4;
+ public static final int SAMPLE_RATE_32000 = 0x01 << 5;
/**
* Codec sample rate 44100 Hz.
*/
- public static final int SAMPLE_RATE_44100 = 5;
+ public static final int SAMPLE_RATE_44100 = 0x01 << 6;
/**
* Codec sample rate 48000 Hz.
*/
- public static final int SAMPLE_RATE_48000 = 6;
+ public static final int SAMPLE_RATE_48000 = 0x01 << 7;
/** @hide */
- @IntDef(prefix = "BITS_PER_SAMPLE_",
+ @IntDef(flag = true, prefix = "BITS_PER_SAMPLE_",
value = {BITS_PER_SAMPLE_NONE, BITS_PER_SAMPLE_16, BITS_PER_SAMPLE_24,
BITS_PER_SAMPLE_32})
@Retention(RetentionPolicy.SOURCE)
@@ -130,42 +134,52 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
/**
* Codec bits per sample 16.
*/
- public static final int BITS_PER_SAMPLE_16 = 1;
+ public static final int BITS_PER_SAMPLE_16 = 0x01 << 0;
/**
* Codec bits per sample 24.
*/
- public static final int BITS_PER_SAMPLE_24 = 2;
+ public static final int BITS_PER_SAMPLE_24 = 0x01 << 1;
/**
* Codec bits per sample 32.
*/
- public static final int BITS_PER_SAMPLE_32 = 3;
+ public static final int BITS_PER_SAMPLE_32 = 0x01 << 3;
- /** @hide */
- @IntDef(prefix = "CHANNEL_MODE_",
- value = {CHANNEL_MODE_NONE, CHANNEL_MODE_MONO, CHANNEL_MODE_STEREO})
+ /**
+ * Values are the bit mask as defined in the
+ * Bluetooth Assigned Numbers, Generic Audio,
+ * Supported_Audio_Channel_Counts table
+ * Note: We use only part of it.
+ * @hide */
+ @IntDef(flag = true, prefix = "CHANNEL_COUNT_",
+ value = {CHANNEL_COUNT_NONE, CHANNEL_COUNT_1, CHANNEL_COUNT_2})
@Retention(RetentionPolicy.SOURCE)
- public @interface ChannelMode {}
+ public @interface ChannelCount {}
/**
* Codec channel mode NONE. Default value of the
* codec channel mode.
*/
- public static final int CHANNEL_MODE_NONE = 0;
+ public static final int CHANNEL_COUNT_NONE = 0;
/**
* Codec channel mode MONO.
*/
- public static final int CHANNEL_MODE_MONO = 1;
+ public static final int CHANNEL_COUNT_1 = 0x01 << 0;
/**
* Codec channel mode STEREO.
*/
- public static final int CHANNEL_MODE_STEREO = 2;
+ public static final int CHANNEL_COUNT_2 = 0x01 << 1;
- /** @hide */
- @IntDef(prefix = "FRAME_DURATION_",
+ /**
+ * Values are the bit mask as defined in the
+ * Bluetooth Assigned Numbers, Generic Audio,
+ * Supported_Frame_Durations table
+ *
+ * @hide */
+ @IntDef(flag = true, prefix = "FRAME_DURATION_",
value = {FRAME_DURATION_NONE, FRAME_DURATION_7500, FRAME_DURATION_10000})
@Retention(RetentionPolicy.SOURCE)
public @interface FrameDuration {}
@@ -178,20 +192,23 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
/**
* Frame duration 7500 us.
*/
- public static final int FRAME_DURATION_7500 = 1;
+ public static final int FRAME_DURATION_7500 = 0x01 << 0;
/**
* Frame duration 10000 us.
*/
- public static final int FRAME_DURATION_10000 = 2;
+ public static final int FRAME_DURATION_10000 = 0x01 << 1;
private final @SourceCodecType int mCodecType;
private final @CodecPriority int mCodecPriority;
private final @SampleRate int mSampleRate;
private final @BitsPerSample int mBitsPerSample;
- private final @ChannelMode int mChannelMode;
+ private final @ChannelCount int mChannelCount;
private final @FrameDuration int mFrameDuration;
private final int mOctetsPerFrame;
+ private final int mMinOctetsPerFrame;
+ private final int mMaxOctetsPerFrame;
+
/**
* Creates a new BluetoothLeAudioCodecConfig.
@@ -200,21 +217,26 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
* @param codecPriority the priority of this codec
* @param sampleRate the codec sample rate
* @param bitsPerSample the bits per sample of this codec
- * @param channelMode the channel mode of this codec
+ * @param channelCount the channel count of this codec
* @param frameDuration the frame duration of this codec
* @param octetsPerFrame the octets per frame of this codec
+ * @param minOctetsPerFrame the minimum octets per frame of this codec
+ * @param maxOctetsPerFrame the maximum octets per frame of this codec
*/
private BluetoothLeAudioCodecConfig(@SourceCodecType int codecType,
@CodecPriority int codecPriority, @SampleRate int sampleRate,
- @BitsPerSample int bitsPerSample, @ChannelMode int channelMode,
- @FrameDuration int frameDuration, int octetsPerFrame) {
+ @BitsPerSample int bitsPerSample, @ChannelCount int channelCount,
+ @FrameDuration int frameDuration, int octetsPerFrame,
+ int minOctetsPerFrame, int maxOctetsPerFrame) {
mCodecType = codecType;
mCodecPriority = codecPriority;
mSampleRate = sampleRate;
mBitsPerSample = bitsPerSample;
- mChannelMode = channelMode;
+ mChannelCount = channelCount;
mFrameDuration = frameDuration;
mOctetsPerFrame = octetsPerFrame;
+ mMinOctetsPerFrame = minOctetsPerFrame;
+ mMaxOctetsPerFrame = maxOctetsPerFrame;
}
@Override
@@ -233,11 +255,14 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
int codecPriority = in.readInt();
int sampleRate = in.readInt();
int bitsPerSample = in.readInt();
- int channelMode = in.readInt();
+ int channelCount = in.readInt();
int frameDuration = in.readInt();
int octetsPerFrame = in.readInt();
+ int minOctetsPerFrame = in.readInt();
+ int maxOctetsPerFrame = in.readInt();
return new BluetoothLeAudioCodecConfig(codecType, codecPriority, sampleRate,
- bitsPerSample, channelMode, frameDuration, octetsPerFrame);
+ bitsPerSample, channelCount, frameDuration, octetsPerFrame,
+ minOctetsPerFrame, maxOctetsPerFrame);
}
public BluetoothLeAudioCodecConfig[] newArray(int size) {
@@ -251,17 +276,21 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
out.writeInt(mCodecPriority);
out.writeInt(mSampleRate);
out.writeInt(mBitsPerSample);
- out.writeInt(mChannelMode);
+ out.writeInt(mChannelCount);
out.writeInt(mFrameDuration);
out.writeInt(mOctetsPerFrame);
+ out.writeInt(mMinOctetsPerFrame);
+ out.writeInt(mMaxOctetsPerFrame);
}
@Override
public String toString() {
return "{codecName:" + getCodecName() + ",mCodecType:" + mCodecType
+ ",mCodecPriority:" + mCodecPriority + ",mSampleRate:" + mSampleRate
- + ",mBitsPerSample:" + mBitsPerSample + ",mChannelMode:" + mChannelMode
- + ",mFrameDuration:" + mFrameDuration + ",mOctetsPerFrame:" + mOctetsPerFrame + "}";
+ + ",mBitsPerSample:" + mBitsPerSample + ",mChannelCount:" + mChannelCount
+ + ",mFrameDuration:" + mFrameDuration + ",mOctetsPerFrame:" + mOctetsPerFrame
+ + ",mMinOctetsPerFrame:" + mMinOctetsPerFrame
+ + ",mMaxOctetsPerFrame:" + mMaxOctetsPerFrame + "}";
}
/**
@@ -316,8 +345,8 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
/**
* Returns the codec channel mode.
*/
- public @ChannelMode int getChannelMode() {
- return mChannelMode;
+ public @ChannelCount int getChannelCount() {
+ return mChannelCount;
}
/**
@@ -334,6 +363,20 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
return mOctetsPerFrame;
}
+ /**
+ * Returns the minimum octets per frame
+ */
+ public int getMinOctetsPerFrame() {
+ return mMinOctetsPerFrame;
+ }
+
+ /**
+ * Returns the maximum octets per frame
+ */
+ public int getMaxOctetsPerFrame() {
+ return mMaxOctetsPerFrame;
+ }
+
@Override
public boolean equals(@NonNull Object o) {
if (o instanceof BluetoothLeAudioCodecConfig) {
@@ -342,9 +385,11 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
&& other.getCodecPriority() == mCodecPriority
&& other.getSampleRate() == mSampleRate
&& other.getBitsPerSample() == mBitsPerSample
- && other.getChannelMode() == mChannelMode
+ && other.getChannelCount() == mChannelCount
&& other.getFrameDuration() == mFrameDuration
- && other.getOctetsPerFrame() == mOctetsPerFrame);
+ && other.getOctetsPerFrame() == mOctetsPerFrame
+ && other.getMinOctetsPerFrame() == mMinOctetsPerFrame
+ && other.getMaxOctetsPerFrame() == mMaxOctetsPerFrame);
}
return false;
}
@@ -356,7 +401,8 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
@Override
public int hashCode() {
return Objects.hash(mCodecType, mCodecPriority, mSampleRate,
- mBitsPerSample, mChannelMode, mFrameDuration, mOctetsPerFrame);
+ mBitsPerSample, mChannelCount, mFrameDuration, mOctetsPerFrame,
+ mMinOctetsPerFrame, mMaxOctetsPerFrame);
}
/**
@@ -369,9 +415,11 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
private int mCodecPriority = BluetoothLeAudioCodecConfig.CODEC_PRIORITY_DEFAULT;
private int mSampleRate = BluetoothLeAudioCodecConfig.SAMPLE_RATE_NONE;
private int mBitsPerSample = BluetoothLeAudioCodecConfig.BITS_PER_SAMPLE_NONE;
- private int mChannelMode = BluetoothLeAudioCodecConfig.CHANNEL_MODE_NONE;
+ private int mChannelCount = BluetoothLeAudioCodecConfig.CHANNEL_COUNT_NONE;
private int mFrameDuration = BluetoothLeAudioCodecConfig.FRAME_DURATION_NONE;
private int mOctetsPerFrame = 0;
+ private int mMinOctetsPerFrame = 0;
+ private int mMaxOctetsPerFrame = 0;
public Builder() {}
@@ -380,9 +428,11 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
mCodecPriority = config.getCodecPriority();
mSampleRate = config.getSampleRate();
mBitsPerSample = config.getBitsPerSample();
- mChannelMode = config.getChannelMode();
+ mChannelCount = config.getChannelCount();
mFrameDuration = config.getFrameDuration();
mOctetsPerFrame = config.getOctetsPerFrame();
+ mMinOctetsPerFrame = config.getMinOctetsPerFrame();
+ mMaxOctetsPerFrame = config.getMaxOctetsPerFrame();
}
/**
@@ -430,13 +480,13 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
}
/**
- * Set the channel mode for Bluetooth LE audio codec config.
+ * Set the channel count for Bluetooth LE audio codec config.
*
- * @param channelMode of this codec
+ * @param channelCount of this codec
* @return the same Builder instance
*/
- public @NonNull Builder setChannelMode(@ChannelMode int channelMode) {
- mChannelMode = channelMode;
+ public @NonNull Builder setChannelCount(@ChannelCount int channelCount) {
+ mChannelCount = channelCount;
return this;
}
@@ -463,12 +513,35 @@ public final class BluetoothLeAudioCodecConfig implements Parcelable {
}
/**
+ * Set the minimum octets per frame for Bluetooth LE audio codec config.
+ *
+ * @param minOctetsPerFrame of this codec
+ * @return the same Builder instance
+ */
+ public @NonNull Builder setMinOctetsPerFrame(int minOctetsPerFrame) {
+ mMinOctetsPerFrame = minOctetsPerFrame;
+ return this;
+ }
+
+ /**
+ * Set the maximum octets per frame for Bluetooth LE audio codec config.
+ *
+ * @param maxOctetsPerFrame of this codec
+ * @return the same Builder instance
+ */
+ public @NonNull Builder setMaxOctetsPerFrame(int maxOctetsPerFrame) {
+ mMaxOctetsPerFrame = maxOctetsPerFrame;
+ return this;
+ }
+
+ /**
* Build {@link BluetoothLeAudioCodecConfig}.
* @return new BluetoothLeAudioCodecConfig built
*/
public @NonNull BluetoothLeAudioCodecConfig build() {
return new BluetoothLeAudioCodecConfig(mCodecType, mCodecPriority, mSampleRate,
- mBitsPerSample, mChannelMode, mFrameDuration, mOctetsPerFrame);
+ mBitsPerSample, mChannelCount, mFrameDuration, mOctetsPerFrame,
+ mMinOctetsPerFrame, mMaxOctetsPerFrame);
}
}
}