summaryrefslogtreecommitdiff
path: root/framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java
diff options
context:
space:
mode:
authorPatty <plhuang@google.com>2022-01-19 16:26:00 +0800
committerPatty <plhuang@google.com>2022-01-25 14:03:11 +0800
commitd8c4927614add7833ac7b26496ea7c5b805d4b3f (patch)
tree9918648120b4d5a7d841b102da1c1a76c42746c5 /framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java
parent966c88d10d78a4288ebfc88075f141b2b65542ed (diff)
Add codec parameters to BluetoothLeAudioCodecConfig
1. Add the APIs for users to create the codec config with all the parameters that define for the LE Audio codec, and some of the parameters will be configurable through the developer options, these APIs will be used by Settings to set for the proper value and send it to the LE Audio service. - codec priority - sample rate - bits per sample - frame duration - octets per frame - channel mode 2. In order to pass BluetoothLeAudioCodecConfig among activities, add the required functions to implement the Parcelable interface. 3. Add functions to get above parametes's value 4. Update builder function 5. Update JNI layer prototype Tag: #feature Bug: 214233080 Bug: 150670922 Test: atest BluetoothLeAudioCodecConfigTest BluetoothInstrumentationTests Change-Id: Ia87949681937407daed4abdd0f7aff34d04e5f09
Diffstat (limited to 'framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java')
-rw-r--r--framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java342
1 files changed, 337 insertions, 5 deletions
diff --git a/framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java b/framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java
index dcaf4b682f..8456259581 100644
--- a/framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java
+++ b/framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java
@@ -18,6 +18,8 @@ package android.bluetooth;
import android.annotation.IntDef;
import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -30,7 +32,7 @@ import java.lang.annotation.RetentionPolicy;
*
* {@see BluetoothLeAudioCodecConfig}
*/
-public final class BluetoothLeAudioCodecConfig {
+public final class BluetoothLeAudioCodecConfig implements Parcelable {
// Add an entry for each source codec here.
/** @hide */
@@ -50,20 +52,221 @@ public final class BluetoothLeAudioCodecConfig {
*/
private static final int SOURCE_CODEC_TYPE_MAX = 1;
+ /** @hide */
+ @IntDef(prefix = "CODEC_PRIORITY_",
+ value = {CODEC_PRIORITY_DISABLED, CODEC_PRIORITY_DEFAULT, CODEC_PRIORITY_HIGHEST})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface CodecPriority {}
+
+ /**
+ * Codec priority disabled.
+ * Used to indicate that this codec is disabled and should not be used.
+ */
+ public static final int CODEC_PRIORITY_DISABLED = -1;
+
+ /**
+ * Codec priority default.
+ * Default value used for codec priority.
+ */
+ public static final int CODEC_PRIORITY_DEFAULT = 0;
+
+ /**
+ * Codec priority highest.
+ * Used to indicate the highest priority a codec can have.
+ */
+ public static final int CODEC_PRIORITY_HIGHEST = 1000 * 1000;
+
+ /** @hide */
+ @IntDef(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)
+ public @interface SampleRate {}
+
+ /**
+ * Codec sample rate 0 Hz. Default value used for
+ * codec sample rate.
+ */
+ public static final int SAMPLE_RATE_NONE = 0;
+
+ /**
+ * Codec sample rate 8000 Hz.
+ */
+ public static final int SAMPLE_RATE_8000 = 1;
+
+ /**
+ * Codec sample rate 16000 Hz.
+ */
+ public static final int SAMPLE_RATE_16000 = 2;
+
+ /**
+ * Codec sample rate 24000 Hz.
+ */
+ public static final int SAMPLE_RATE_24000 = 3;
+
+ /**
+ * Codec sample rate 32000 Hz.
+ */
+ public static final int SAMPLE_RATE_32000 = 4;
+
+ /**
+ * Codec sample rate 44100 Hz.
+ */
+ public static final int SAMPLE_RATE_44100 = 5;
+
+ /**
+ * Codec sample rate 48000 Hz.
+ */
+ public static final int SAMPLE_RATE_48000 = 6;
+
+ /** @hide */
+ @IntDef(prefix = "BITS_PER_SAMPLE_",
+ value = {BITS_PER_SAMPLE_NONE, BITS_PER_SAMPLE_16, BITS_PER_SAMPLE_24,
+ BITS_PER_SAMPLE_32})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface BitsPerSample {}
+
+ /**
+ * Codec bits per sample 0. Default value of the codec
+ * bits per sample.
+ */
+ public static final int BITS_PER_SAMPLE_NONE = 0;
+
+ /**
+ * Codec bits per sample 16.
+ */
+ public static final int BITS_PER_SAMPLE_16 = 1;
+
+ /**
+ * Codec bits per sample 24.
+ */
+ public static final int BITS_PER_SAMPLE_24 = 2;
+
+ /**
+ * Codec bits per sample 32.
+ */
+ public static final int BITS_PER_SAMPLE_32 = 3;
+
+ /** @hide */
+ @IntDef(prefix = "CHANNEL_MODE_",
+ value = {CHANNEL_MODE_NONE, CHANNEL_MODE_MONO, CHANNEL_MODE_STEREO})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface ChannelMode {}
+
+ /**
+ * Codec channel mode NONE. Default value of the
+ * codec channel mode.
+ */
+ public static final int CHANNEL_MODE_NONE = 0;
+
+ /**
+ * Codec channel mode MONO.
+ */
+ public static final int CHANNEL_MODE_MONO = 1;
+
+ /**
+ * Codec channel mode STEREO.
+ */
+ public static final int CHANNEL_MODE_STEREO = 2;
+
+ /** @hide */
+ @IntDef(prefix = "FRAME_DURATION_",
+ value = {FRAME_DURATION_NONE, FRAME_DURATION_7500, FRAME_DURATION_10000})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface FrameDuration {}
+
+ /**
+ * Frame duration 0. Default value of the frame duration.
+ */
+ public static final int FRAME_DURATION_NONE = 0;
+
+ /**
+ * Frame duration 7500 us.
+ */
+ public static final int FRAME_DURATION_7500 = 1;
+
+ /**
+ * Frame duration 10000 us.
+ */
+ public static final int FRAME_DURATION_10000 = 2;
+
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 @FrameDuration int mFrameDuration;
+ private final int mOctetsPerFrame;
/**
* Creates a new BluetoothLeAudioCodecConfig.
*
* @param codecType the source codec type
+ * @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 frameDuration the frame duration of this codec
+ * @param octetsPerFrame the octets per frame of this codec
*/
- private BluetoothLeAudioCodecConfig(@SourceCodecType int codecType) {
+ private BluetoothLeAudioCodecConfig(@SourceCodecType int codecType,
+ @CodecPriority int codecPriority, @SampleRate int sampleRate,
+ @BitsPerSample int bitsPerSample, @ChannelMode int channelMode,
+ @FrameDuration int frameDuration, int octetsPerFrame) {
mCodecType = codecType;
+ mCodecPriority = codecPriority;
+ mSampleRate = sampleRate;
+ mBitsPerSample = bitsPerSample;
+ mChannelMode = channelMode;
+ mFrameDuration = frameDuration;
+ mOctetsPerFrame = octetsPerFrame;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ /**
+ * {@link Parcelable.Creator} interface implementation.
+ */
+ public static final
+ @android.annotation.NonNull Parcelable.Creator<BluetoothLeAudioCodecConfig> CREATOR =
+ new Parcelable.Creator<BluetoothLeAudioCodecConfig>() {
+ public BluetoothLeAudioCodecConfig createFromParcel(Parcel in) {
+ int codecType = in.readInt();
+ int codecPriority = in.readInt();
+ int sampleRate = in.readInt();
+ int bitsPerSample = in.readInt();
+ int channelMode = in.readInt();
+ int frameDuration = in.readInt();
+ int octetsPerFrame = in.readInt();
+ return new BluetoothLeAudioCodecConfig(codecType, codecPriority, sampleRate,
+ bitsPerSample, channelMode, frameDuration, octetsPerFrame);
+ }
+
+ public BluetoothLeAudioCodecConfig[] newArray(int size) {
+ return new BluetoothLeAudioCodecConfig[size];
+ }
+ };
+
+ @Override
+ public void writeToParcel(@NonNull Parcel out, int flags) {
+ out.writeInt(mCodecType);
+ out.writeInt(mCodecPriority);
+ out.writeInt(mSampleRate);
+ out.writeInt(mBitsPerSample);
+ out.writeInt(mChannelMode);
+ out.writeInt(mFrameDuration);
+ out.writeInt(mOctetsPerFrame);
}
@Override
public String toString() {
- return "{codecName:" + getCodecName() + "}";
+ return "{codecName:" + getCodecName() + ",mCodecType:" + mCodecType
+ + ",mCodecPriority:" + mCodecPriority + ",mSampleRate:" + mSampleRate
+ + ",mBitsPerSample:" + mBitsPerSample + ",mChannelMode:" + mChannelMode
+ + ",mFrameDuration:" + mFrameDuration + ",mOctetsPerFrame:" + mOctetsPerFrame + "}";
}
/**
@@ -100,15 +303,77 @@ public final class BluetoothLeAudioCodecConfig {
}
/**
+ * Returns the codec selection priority.
+ * <p>The codec selection priority is relative to other codecs: larger value
+ * means higher priority.
+ */
+ public @CodecPriority int getCodecPriority() {
+ return mCodecPriority;
+ }
+
+ /**
+ * Returns the codec sample rate.
+ */
+ public @SampleRate int getSampleRate() {
+ return mSampleRate;
+ }
+
+ /**
+ * Returns the codec bits per sample.
+ */
+ public @BitsPerSample int getBitsPerSample() {
+ return mBitsPerSample;
+ }
+
+ /**
+ * Returns the codec channel mode.
+ */
+ public @ChannelMode int getChannelMode() {
+ return mChannelMode;
+ }
+
+ /**
+ * Returns the frame duration.
+ */
+ public @ChannelMode int getFrameDuration() {
+ return mFrameDuration;
+ }
+
+ /**
+ * Returns the octets per frame
+ */
+ public @ChannelMode int getOctetsPerFrame() {
+ return mOctetsPerFrame;
+ }
+
+ /**
* Builder for {@link BluetoothLeAudioCodecConfig}.
* <p> By default, the codec type will be set to
* {@link BluetoothLeAudioCodecConfig#SOURCE_CODEC_TYPE_INVALID}
*/
public static final class Builder {
private int mCodecType = BluetoothLeAudioCodecConfig.SOURCE_CODEC_TYPE_INVALID;
+ 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 mFrameDuration = BluetoothLeAudioCodecConfig.FRAME_DURATION_NONE;
+ private int mOctetsPerFrame = 0;
+
+ public Builder() {}
+
+ public Builder(@NonNull BluetoothLeAudioCodecConfig config) {
+ mCodecType = config.getCodecType();
+ mCodecPriority = config.getCodecPriority();
+ mSampleRate = config.getSampleRate();
+ mBitsPerSample = config.getBitsPerSample();
+ mChannelMode = config.getChannelMode();
+ mFrameDuration = config.getFrameDuration();
+ mOctetsPerFrame = config.getOctetsPerFrame();
+ }
/**
- * Set codec type for Bluetooth codec config.
+ * Set codec type for Bluetooth LE audio codec config.
*
* @param codecType of this codec
* @return the same Builder instance
@@ -119,11 +384,78 @@ public final class BluetoothLeAudioCodecConfig {
}
/**
+ * Set codec priority for Bluetooth LE audio codec config.
+ *
+ * @param codecPriority of this codec
+ * @return the same Builder instance
+ */
+ public @NonNull Builder setCodecPriority(@CodecPriority int codecPriority) {
+ mCodecPriority = codecPriority;
+ return this;
+ }
+
+ /**
+ * Set sample rate for Bluetooth LE audio codec config.
+ *
+ * @param sampleRate of this codec
+ * @return the same Builder instance
+ */
+ public @NonNull Builder setSampleRate(@SampleRate int sampleRate) {
+ mSampleRate = sampleRate;
+ return this;
+ }
+
+ /**
+ * Set the bits per sample for LE audio codec config.
+ *
+ * @param bitsPerSample of this codec
+ * @return the same Builder instance
+ */
+ public @NonNull Builder setBitsPerSample(@BitsPerSample int bitsPerSample) {
+ mBitsPerSample = bitsPerSample;
+ return this;
+ }
+
+ /**
+ * Set the channel mode for Bluetooth LE audio codec config.
+ *
+ * @param channelMode of this codec
+ * @return the same Builder instance
+ */
+ public @NonNull Builder setChannelMode(@ChannelMode int channelMode) {
+ mChannelMode = channelMode;
+ return this;
+ }
+
+ /**
+ * Set the frame duration for Bluetooth LE audio codec config.
+ *
+ * @param frameDuration of this codec
+ * @return the same Builder instance
+ */
+ public @NonNull Builder setFrameDuration(@FrameDuration int frameDuration) {
+ mFrameDuration = frameDuration;
+ return this;
+ }
+
+ /**
+ * Set the octets per frame for Bluetooth LE audio codec config.
+ *
+ * @param octetsPerFrame of this codec
+ * @return the same Builder instance
+ */
+ public @NonNull Builder setOctetsPerFrame(int octetsPerFrame) {
+ mOctetsPerFrame = octetsPerFrame;
+ return this;
+ }
+
+ /**
* Build {@link BluetoothLeAudioCodecConfig}.
* @return new BluetoothLeAudioCodecConfig built
*/
public @NonNull BluetoothLeAudioCodecConfig build() {
- return new BluetoothLeAudioCodecConfig(mCodecType);
+ return new BluetoothLeAudioCodecConfig(mCodecType, mCodecPriority, mSampleRate,
+ mBitsPerSample, mChannelMode, mFrameDuration, mOctetsPerFrame);
}
}
}