Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 66e4abf7 authored by Omer Osman's avatar Omer Osman
Browse files

Add support for Opus over A2DP

This CL add support for Opus as an A2DP codec in Audio Framework and
selection of the codec in Developer Options.

Bug: 226441860
Test: Sink device using bds-dev

Change-Id: I1d68209e8f996e78adeed03b77a3ee9cacda6307
parent 3845cbd9
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -65,6 +65,8 @@ public class AudioSystem

    private static final String TAG = "AudioSystem";

    private static final int SOURCE_CODEC_TYPE_OPUS = 6; // TODO remove in U

    // private constructor to prevent instantiating AudioSystem
    private AudioSystem() {
        throw new UnsupportedOperationException("Trying to instantiate AudioSystem");
@@ -243,6 +245,8 @@ public class AudioSystem
    public static final int AUDIO_FORMAT_LDAC           = 0x23000000;
    /** @hide */
    public static final int AUDIO_FORMAT_LC3            = 0x2B000000;
    /** @hide */
    public static final int AUDIO_FORMAT_OPUS           = 0x08000000;


    /** @hide */
@@ -254,7 +258,9 @@ public class AudioSystem
            AUDIO_FORMAT_APTX,
            AUDIO_FORMAT_APTX_HD,
            AUDIO_FORMAT_LDAC,
            AUDIO_FORMAT_LC3}
            AUDIO_FORMAT_LC3,
            AUDIO_FORMAT_OPUS
           }
    )
    @Retention(RetentionPolicy.SOURCE)
    public @interface AudioFormatNativeEnumForBtCodec {}
@@ -287,6 +293,7 @@ public class AudioSystem
            case AUDIO_FORMAT_APTX_HD: return BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD;
            case AUDIO_FORMAT_LDAC: return BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC;
            case AUDIO_FORMAT_LC3: return BluetoothCodecConfig.SOURCE_CODEC_TYPE_LC3;
            case AUDIO_FORMAT_OPUS: return SOURCE_CODEC_TYPE_OPUS; // TODO update in U
            default:
                Log.e(TAG, "Unknown audio format 0x" + Integer.toHexString(audioFormat)
                        + " for conversion to BT codec");
@@ -329,6 +336,8 @@ public class AudioSystem
                return AudioSystem.AUDIO_FORMAT_LDAC;
            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LC3:
                return AudioSystem.AUDIO_FORMAT_LC3;
            case SOURCE_CODEC_TYPE_OPUS: // TODO update in U
                return AudioSystem.AUDIO_FORMAT_OPUS;
            default:
                Log.e(TAG, "Unknown BT codec 0x" + Integer.toHexString(btCodec)
                        + " for conversion to audio format");
+6 −0
Original line number Diff line number Diff line
@@ -154,6 +154,8 @@
        <item><xliff:g id="qualcomm">Qualcomm®</xliff:g> <xliff:g id="aptx">aptX™</xliff:g> audio</item>
        <item><xliff:g id="qualcomm">Qualcomm®</xliff:g> <xliff:g id="aptx_hd">aptX™ HD</xliff:g> audio</item>
        <item>LDAC</item>
        <item>LC3</item>
        <item>Opus</item>
    </string-array>

    <!-- Values for Bluetooth Audio Codec selection preference. -->
@@ -164,6 +166,8 @@
        <item>2</item>
        <item>3</item>
        <item>4</item>
        <item>5</item>
        <item>6</item>
    </string-array>

    <!-- Summaries for Bluetooth Audio Codec selection preference. [CHAR LIMIT=50]-->
@@ -174,6 +178,8 @@
        <item><xliff:g id="qualcomm">Qualcomm®</xliff:g> <xliff:g id="aptx">aptX™</xliff:g> audio</item>
        <item><xliff:g id="qualcomm">Qualcomm®</xliff:g> <xliff:g id="aptx_hd">aptX™ HD</xliff:g> audio</item>
        <item>LDAC</item>
        <item>LC3</item>
        <item>Opus</item>
    </string-array>

    <!-- Titles for Bluetooth Audio Codec Sample Rate selection preference. [CHAR LIMIT=50] -->
+8 −0
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ import java.util.List;
public class A2dpProfile implements LocalBluetoothProfile {
    private static final String TAG = "A2dpProfile";

    private static final int SOURCE_CODEC_TYPE_OPUS = 6; // TODO remove in U

    private Context mContext;

    private BluetoothA2dp mService;
@@ -328,6 +330,12 @@ public class A2dpProfile implements LocalBluetoothProfile {
           case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC:
               index = 5;
               break;
            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LC3:
                index = 6;
                break;
            case SOURCE_CODEC_TYPE_OPUS: // TODO update in U
                index = 7;
                break;
           }

        if (index < 0) {
+4 −0
Original line number Diff line number Diff line
@@ -53,6 +53,8 @@ public class BtHelper {

    private static final String TAG = "AS.BtHelper";

    private static final int SOURCE_CODEC_TYPE_OPUS = 6; // TODO remove in U

    private final @NonNull AudioDeviceBroker mDeviceBroker;

    BtHelper(@NonNull AudioDeviceBroker broker) {
@@ -907,6 +909,8 @@ public class BtHelper {
                return "ENCODING_APTX_HD";
            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC:
                return "ENCODING_LDAC";
            case SOURCE_CODEC_TYPE_OPUS: // TODO update in U
                return "ENCODING_OPUS";
            default:
                return "ENCODING_BT_CODEC_TYPE(" + btCodecType + ")";
        }