diff --git a/api/current.txt b/api/current.txt
index f92518f88be99..6e03e0f9281d6 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -19365,6 +19365,7 @@ package android.media {
field public static final deprecated int NUM_STREAMS = 5; // 0x5
field public static final java.lang.String PROPERTY_OUTPUT_FRAMES_PER_BUFFER = "android.media.property.OUTPUT_FRAMES_PER_BUFFER";
field public static final java.lang.String PROPERTY_OUTPUT_SAMPLE_RATE = "android.media.property.OUTPUT_SAMPLE_RATE";
+ field public static final java.lang.String PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED = "android.media.property.SUPPORT_AUDIO_SOURCE_UNPROCESSED";
field public static final java.lang.String PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND = "android.media.property.SUPPORT_MIC_NEAR_ULTRASOUND";
field public static final java.lang.String PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND = "android.media.property.SUPPORT_SPEAKER_NEAR_ULTRASOUND";
field public static final java.lang.String RINGER_MODE_CHANGED_ACTION = "android.media.RINGER_MODE_CHANGED";
@@ -20725,6 +20726,7 @@ package android.media {
field public static final int DEFAULT = 0; // 0x0
field public static final int MIC = 1; // 0x1
field public static final int REMOTE_SUBMIX = 8; // 0x8
+ field public static final int UNPROCESSED = 9; // 0x9
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
diff --git a/api/system-current.txt b/api/system-current.txt
index 6bba573f67873..12b9b325c759d 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -20670,6 +20670,7 @@ package android.media {
field public static final deprecated int NUM_STREAMS = 5; // 0x5
field public static final java.lang.String PROPERTY_OUTPUT_FRAMES_PER_BUFFER = "android.media.property.OUTPUT_FRAMES_PER_BUFFER";
field public static final java.lang.String PROPERTY_OUTPUT_SAMPLE_RATE = "android.media.property.OUTPUT_SAMPLE_RATE";
+ field public static final java.lang.String PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED = "android.media.property.SUPPORT_AUDIO_SOURCE_UNPROCESSED";
field public static final java.lang.String PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND = "android.media.property.SUPPORT_MIC_NEAR_ULTRASOUND";
field public static final java.lang.String PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND = "android.media.property.SUPPORT_SPEAKER_NEAR_ULTRASOUND";
field public static final java.lang.String RINGER_MODE_CHANGED_ACTION = "android.media.RINGER_MODE_CHANGED";
@@ -22035,6 +22036,7 @@ package android.media {
field public static final int MIC = 1; // 0x1
field public static final int RADIO_TUNER = 1998; // 0x7ce
field public static final int REMOTE_SUBMIX = 8; // 0x8
+ field public static final int UNPROCESSED = 9; // 0x9
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
diff --git a/api/test-current.txt b/api/test-current.txt
index 66c856f08b7ae..5e07343399115 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -19373,6 +19373,7 @@ package android.media {
field public static final deprecated int NUM_STREAMS = 5; // 0x5
field public static final java.lang.String PROPERTY_OUTPUT_FRAMES_PER_BUFFER = "android.media.property.OUTPUT_FRAMES_PER_BUFFER";
field public static final java.lang.String PROPERTY_OUTPUT_SAMPLE_RATE = "android.media.property.OUTPUT_SAMPLE_RATE";
+ field public static final java.lang.String PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED = "android.media.property.SUPPORT_AUDIO_SOURCE_UNPROCESSED";
field public static final java.lang.String PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND = "android.media.property.SUPPORT_MIC_NEAR_ULTRASOUND";
field public static final java.lang.String PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND = "android.media.property.SUPPORT_SPEAKER_NEAR_ULTRASOUND";
field public static final java.lang.String RINGER_MODE_CHANGED_ACTION = "android.media.RINGER_MODE_CHANGED";
@@ -20733,6 +20734,7 @@ package android.media {
field public static final int DEFAULT = 0; // 0x0
field public static final int MIC = 1; // 0x1
field public static final int REMOTE_SUBMIX = 8; // 0x8
+ field public static final int UNPROCESSED = 9; // 0x9
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
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index b6150e045f174..53a733d260f8a 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -2362,6 +2362,9 @@
(range of 18 - 21 kHz). -->
true
+
+ false
+
true
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 3641061f1e10b..dc288d5d0223f 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -303,6 +303,7 @@
+
diff --git a/media/java/android/media/AudioAttributes.java b/media/java/android/media/AudioAttributes.java
index 0db631542f6d0..606447b5e45f9 100644
--- a/media/java/android/media/AudioAttributes.java
+++ b/media/java/android/media/AudioAttributes.java
@@ -529,8 +529,9 @@ public final class AudioAttributes implements Parcelable {
* instance with {@link AudioRecord#AudioRecord(AudioAttributes, AudioFormat, int)}.
* @param preset one of {@link MediaRecorder.AudioSource#DEFAULT},
* {@link MediaRecorder.AudioSource#MIC}, {@link MediaRecorder.AudioSource#CAMCORDER},
- * {@link MediaRecorder.AudioSource#VOICE_RECOGNITION} or
- * {@link MediaRecorder.AudioSource#VOICE_COMMUNICATION}.
+ * {@link MediaRecorder.AudioSource#VOICE_RECOGNITION},
+ * {@link MediaRecorder.AudioSource#VOICE_COMMUNICATION} or
+ * {@link MediaRecorder.AudioSource#UNPROCESSED}
* @return the same Builder instance.
*/
@SystemApi
@@ -541,6 +542,7 @@ public final class AudioAttributes implements Parcelable {
case MediaRecorder.AudioSource.CAMCORDER:
case MediaRecorder.AudioSource.VOICE_RECOGNITION:
case MediaRecorder.AudioSource.VOICE_COMMUNICATION:
+ case MediaRecorder.AudioSource.UNPROCESSED:
mSource = preset;
break;
default:
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index ea1690fd26912..5ad6b08f542b8 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -3304,13 +3304,20 @@ public class AudioManager {
public static final String PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND =
"android.media.property.SUPPORT_SPEAKER_NEAR_ULTRASOUND";
+ /**
+ * Used as a key for {@link #getProperty} to determine if the unprocessed audio source is
+ * available and supported with the expected frequency range and level response.
+ */
+ public static final String PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED =
+ "android.media.property.SUPPORT_AUDIO_SOURCE_UNPROCESSED";
/**
* Returns the value of the property with the specified key.
* @param key One of the strings corresponding to a property key: either
* {@link #PROPERTY_OUTPUT_SAMPLE_RATE},
* {@link #PROPERTY_OUTPUT_FRAMES_PER_BUFFER},
- * {@link #PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND}, or
- * {@link #PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND}.
+ * {@link #PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND},
+ * {@link #PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND}, or
+ * {@link #PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED}.
* @return A string representing the associated value for that property key,
* or null if there is no value for that key.
*/
@@ -3329,6 +3336,9 @@ public class AudioManager {
} else if (PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND.equals(key)) {
return String.valueOf(getContext().getResources().getBoolean(
com.android.internal.R.bool.config_supportSpeakerNearUltrasound));
+ } else if (PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED.equals(key)) {
+ return String.valueOf(getContext().getResources().getBoolean(
+ com.android.internal.R.bool.config_supportAudioSourceUnprocessed));
} else {
// null or unknown key
return null;
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java
index 8ac86b01dcb8f..504c6d0d20033 100644
--- a/media/java/android/media/MediaRecorder.java
+++ b/media/java/android/media/MediaRecorder.java
@@ -251,6 +251,10 @@ public class MediaRecorder
*/
public static final int REMOTE_SUBMIX = 8;
+ /** Microphone audio source tuned for unprocessed (raw) sound if available, behaves like
+ * {@link #DEFAULT} otherwise. */
+ public static final int UNPROCESSED = 9;
+
/**
* Audio source for capturing broadcast radio tuner output.
* @hide
@@ -405,7 +409,7 @@ public class MediaRecorder
* @see android.media.MediaRecorder.AudioSource
*/
public static final int getAudioSourceMax() {
- return AudioSource.REMOTE_SUBMIX;
+ return AudioSource.UNPROCESSED;
}
/**