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

Commit 0016c5b7 authored by Eric Laurent's avatar Eric Laurent
Browse files

add new audio sources for audio capture

This commit adds the following audio capture sources:
- AudioSource.VOICE_PERFORMANCE: for real time live performances like Karaoke.
- AudioSource.ECHO_REFERENCE: for capturing the reference signal to suppress by an echo
canceller. Protected by privileged permission CAPTURE_AUDIO_OUTPUT.

Also added device AUDIO_DEVICE_IN_ECHO_REFERENCE selected when the requested
capture source is AudioSource.ECHO_REFERENCE.

Bug: 118203066
Test: CTS tests for audio capture

Change-Id: I8258296736848986562f7fc89c9260aad562d3d1
parent a32c79d3
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -25653,6 +25653,7 @@ package android.media {
    field public static final int VOICE_CALL = 4; // 0x4
    field public static final int VOICE_COMMUNICATION = 7; // 0x7
    field public static final int VOICE_DOWNLINK = 3; // 0x3
    field public static final int VOICE_PERFORMANCE = 10; // 0xa
    field public static final int VOICE_RECOGNITION = 6; // 0x6
    field public static final int VOICE_UPLINK = 2; // 0x2
  }
+1 −0
Original line number Diff line number Diff line
@@ -3301,6 +3301,7 @@ package android.media {
  }
  public final class MediaRecorder.AudioSource {
    field public static final int ECHO_REFERENCE = 1997; // 0x7cd
    field public static final int HOTWORD = 1999; // 0x7cf
    field public static final int RADIO_TUNER = 1998; // 0x7ce
  }
+7 −4
Original line number Diff line number Diff line
@@ -736,8 +736,9 @@ public final class AudioAttributes implements Parcelable {
         * @param preset one of {@link MediaRecorder.AudioSource#DEFAULT},
         *     {@link MediaRecorder.AudioSource#MIC}, {@link MediaRecorder.AudioSource#CAMCORDER},
         *     {@link MediaRecorder.AudioSource#VOICE_RECOGNITION},
         *     {@link MediaRecorder.AudioSource#VOICE_COMMUNICATION} or
         *     {@link MediaRecorder.AudioSource#UNPROCESSED}
         *     {@link MediaRecorder.AudioSource#VOICE_COMMUNICATION},
         *     {@link MediaRecorder.AudioSource#UNPROCESSED} or
         *     {@link MediaRecorder.AudioSource#VOICE_PERFORMANCE}
         * @return the same Builder instance.
         */
        @SystemApi
@@ -749,6 +750,7 @@ public final class AudioAttributes implements Parcelable {
                case MediaRecorder.AudioSource.VOICE_RECOGNITION:
                case MediaRecorder.AudioSource.VOICE_COMMUNICATION:
                case MediaRecorder.AudioSource.UNPROCESSED:
                case MediaRecorder.AudioSource.VOICE_PERFORMANCE:
                    mSource = preset;
                    break;
                default:
@@ -760,7 +762,7 @@ public final class AudioAttributes implements Parcelable {
        /**
         * @hide
         * Same as {@link #setCapturePreset(int)} but authorizes the use of HOTWORD,
         * REMOTE_SUBMIX, RADIO_TUNER, VOICE_DOWNLINK, VOICE_UPLINK and VOICE_CALL.
         * REMOTE_SUBMIX, RADIO_TUNER, VOICE_DOWNLINK, VOICE_UPLINK, VOICE_CALL and ECHO_REFERENCE.
         * @param preset
         * @return the same Builder instance.
         */
@@ -771,7 +773,8 @@ public final class AudioAttributes implements Parcelable {
                    || (preset == MediaRecorder.AudioSource.RADIO_TUNER)
                    || (preset == MediaRecorder.AudioSource.VOICE_DOWNLINK)
                    || (preset == MediaRecorder.AudioSource.VOICE_UPLINK)
                    || (preset == MediaRecorder.AudioSource.VOICE_CALL)) {
                    || (preset == MediaRecorder.AudioSource.VOICE_CALL)
                    || (preset == MediaRecorder.AudioSource.ECHO_REFERENCE)) {
                mSource = preset;
            } else {
                setCapturePreset(preset);
+2 −1
Original line number Diff line number Diff line
@@ -172,7 +172,8 @@ public final class AudioRecordingConfiguration implements Parcelable {
        MediaRecorder.AudioSource.CAMCORDER,
        MediaRecorder.AudioSource.VOICE_RECOGNITION,
        MediaRecorder.AudioSource.VOICE_COMMUNICATION,
        MediaRecorder.AudioSource.UNPROCESSED
        MediaRecorder.AudioSource.UNPROCESSED,
        MediaRecorder.AudioSource.VOICE_PERFORMANCE
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface AudioSource {}
+10 −0
Original line number Diff line number Diff line
@@ -541,6 +541,8 @@ public class AudioSystem
    public static final int DEVICE_IN_BUS = DEVICE_BIT_IN | 0x100000;
    public static final int DEVICE_IN_PROXY = DEVICE_BIT_IN | 0x1000000;
    public static final int DEVICE_IN_USB_HEADSET = DEVICE_BIT_IN | 0x2000000;
    public static final int DEVICE_IN_BLUETOOTH_BLE = DEVICE_BIT_IN | 0x4000000;
    public static final int DEVICE_IN_ECHO_REFERENCE = DEVICE_BIT_IN | 0x10000000;
    @UnsupportedAppUsage
    public static final int DEVICE_IN_DEFAULT = DEVICE_BIT_IN | DEVICE_BIT_DEFAULT;

@@ -567,6 +569,8 @@ public class AudioSystem
                                             DEVICE_IN_BUS |
                                             DEVICE_IN_PROXY |
                                             DEVICE_IN_USB_HEADSET |
                                             DEVICE_IN_BLUETOOTH_BLE |
                                             DEVICE_IN_ECHO_REFERENCE |
                                             DEVICE_IN_DEFAULT);
    public static final int DEVICE_IN_ALL_SCO = DEVICE_IN_BLUETOOTH_SCO_HEADSET;
    public static final int DEVICE_IN_ALL_USB = (DEVICE_IN_USB_ACCESSORY |
@@ -641,6 +645,8 @@ public class AudioSystem
    public static final String DEVICE_IN_BUS_NAME = "bus";
    public static final String DEVICE_IN_PROXY_NAME = "proxy";
    public static final String DEVICE_IN_USB_HEADSET_NAME = "usb_headset";
    public static final String DEVICE_IN_BLUETOOTH_BLE_NAME = "bt_ble";
    public static final String DEVICE_IN_ECHO_REFERENCE_NAME = "echo_reference";

    @UnsupportedAppUsage
    public static String getOutputDeviceName(int device)
@@ -757,6 +763,10 @@ public class AudioSystem
            return DEVICE_IN_PROXY_NAME;
        case DEVICE_IN_USB_HEADSET:
            return DEVICE_IN_USB_HEADSET_NAME;
        case DEVICE_IN_BLUETOOTH_BLE:
            return DEVICE_IN_BLUETOOTH_BLE_NAME;
        case DEVICE_IN_ECHO_REFERENCE:
            return DEVICE_IN_ECHO_REFERENCE_NAME;
        case DEVICE_IN_DEFAULT:
        default:
            return Integer.toString(device);
Loading