diff options
Diffstat (limited to 'framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java')
-rw-r--r-- | framework/java/android/bluetooth/BluetoothLeAudioCodecConfig.java | 342 |
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); } } } |