audio: add Ultrasound input source and content_type
The Ultrasound is added as the SystemAPI Bug: 200256985 Test: atest AudioAttributesTest Signed-off-by: Carter Hsu <carterhsu@google.com> Change-Id: I1a0146c32faeba3a60a4a7bdf997d985bbb12251
This commit is contained in:
parent
8ddb283a68
commit
0267771f63
@ -23,6 +23,7 @@ package android {
|
||||
field public static final String ACCESS_TV_DESCRAMBLER = "android.permission.ACCESS_TV_DESCRAMBLER";
|
||||
field public static final String ACCESS_TV_SHARED_FILTER = "android.permission.ACCESS_TV_SHARED_FILTER";
|
||||
field public static final String ACCESS_TV_TUNER = "android.permission.ACCESS_TV_TUNER";
|
||||
field public static final String ACCESS_ULTRASOUND = "android.permission.ACCESS_ULTRASOUND";
|
||||
field public static final String ACCESS_VIBRATOR_STATE = "android.permission.ACCESS_VIBRATOR_STATE";
|
||||
field public static final String ACTIVITY_EMBEDDING = "android.permission.ACTIVITY_EMBEDDING";
|
||||
field public static final String ADJUST_RUNTIME_PERMISSIONS_POLICY = "android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY";
|
||||
@ -5664,6 +5665,7 @@ package android.media {
|
||||
method public int getCapturePreset();
|
||||
method public int getSystemUsage();
|
||||
method public static boolean isSystemUsage(int);
|
||||
field @RequiresPermission(android.Manifest.permission.ACCESS_ULTRASOUND) public static final int CONTENT_TYPE_ULTRASOUND = 1997; // 0x7cd
|
||||
field public static final int FLAG_BEACON = 8; // 0x8
|
||||
field public static final int FLAG_BYPASS_INTERRUPTION_POLICY = 64; // 0x40
|
||||
field public static final int FLAG_BYPASS_MUTE = 128; // 0x80
|
||||
@ -5680,6 +5682,7 @@ package android.media {
|
||||
method public android.media.AudioAttributes.Builder setCapturePreset(int);
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD) public android.media.AudioAttributes.Builder setHotwordModeEnabled(boolean);
|
||||
method public android.media.AudioAttributes.Builder setInternalCapturePreset(int);
|
||||
method @NonNull public android.media.AudioAttributes.Builder setInternalContentType(int);
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioAttributes.Builder setSystemUsage(int);
|
||||
}
|
||||
|
||||
@ -5895,6 +5898,7 @@ package android.media {
|
||||
field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT) public static final int ECHO_REFERENCE = 1997; // 0x7cd
|
||||
field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD) public static final int HOTWORD = 1999; // 0x7cf
|
||||
field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT) public static final int RADIO_TUNER = 1998; // 0x7ce
|
||||
field @RequiresPermission(android.Manifest.permission.ACCESS_ULTRASOUND) public static final int ULTRASOUND = 2000; // 0x7d0
|
||||
}
|
||||
|
||||
public final class MediaRouter2 {
|
||||
|
@ -57,7 +57,7 @@ static struct {
|
||||
jmethodID setUsage;
|
||||
jmethodID setSystemUsage;
|
||||
jmethodID setInternalCapturePreset;
|
||||
jmethodID setContentType;
|
||||
jmethodID setInternalContentType;
|
||||
jmethodID replaceFlags;
|
||||
jmethodID addTag;
|
||||
} gAudioAttributesBuilderMethods;
|
||||
@ -127,7 +127,7 @@ static jint nativeAudioAttributesToJavaAudioAttributes(
|
||||
gAudioAttributesBuilderMethods.setInternalCapturePreset,
|
||||
attributes.source);
|
||||
env->CallObjectMethod(jAttributeBuilder.get(),
|
||||
gAudioAttributesBuilderMethods.setContentType,
|
||||
gAudioAttributesBuilderMethods.setInternalContentType,
|
||||
attributes.content_type);
|
||||
env->CallObjectMethod(jAttributeBuilder.get(),
|
||||
gAudioAttributesBuilderMethods.replaceFlags,
|
||||
@ -202,9 +202,9 @@ int register_android_media_AudioAttributes(JNIEnv *env)
|
||||
gAudioAttributesBuilderMethods.setInternalCapturePreset = GetMethodIDOrDie(
|
||||
env, audioAttributesBuilderClass, "setInternalCapturePreset",
|
||||
"(I)Landroid/media/AudioAttributes$Builder;");
|
||||
gAudioAttributesBuilderMethods.setContentType = GetMethodIDOrDie(
|
||||
env, audioAttributesBuilderClass, "setContentType",
|
||||
"(I)Landroid/media/AudioAttributes$Builder;");
|
||||
gAudioAttributesBuilderMethods.setInternalContentType =
|
||||
GetMethodIDOrDie(env, audioAttributesBuilderClass, "setInternalContentType",
|
||||
"(I)Landroid/media/AudioAttributes$Builder;");
|
||||
gAudioAttributesBuilderMethods.replaceFlags = GetMethodIDOrDie(
|
||||
env, audioAttributesBuilderClass, "replaceFlags",
|
||||
"(I)Landroid/media/AudioAttributes$Builder;");
|
||||
|
@ -4745,6 +4745,12 @@
|
||||
<permission android:name="android.permission.CAPTURE_AUDIO_HOTWORD"
|
||||
android:protectionLevel="signature|privileged|role" />
|
||||
|
||||
<!-- @SystemApi Allows an application to access the ultrasound content.
|
||||
<p>Not for use by third-party applications.</p>
|
||||
@hide -->
|
||||
<permission android:name="android.permission.ACCESS_ULTRASOUND"
|
||||
android:protectionLevel="signature|privileged" />
|
||||
|
||||
<!-- Puts an application in the chain of trust for sound trigger
|
||||
operations. Being in the chain of trust allows an application to
|
||||
delegate an identity of a separate entity to the sound trigger system
|
||||
|
@ -50,4 +50,8 @@ enum AudioContentType {
|
||||
* in a game. These sounds are mostly synthesized or short Foley sounds.
|
||||
*/
|
||||
SONIFICATION = 4,
|
||||
/**
|
||||
* Content type value to use when the content type is ultrasound.
|
||||
*/
|
||||
ULTRASOUND = 1997,
|
||||
}
|
||||
|
@ -59,4 +59,8 @@ enum AudioInputFlags {
|
||||
* Input contains an encoded audio stream.
|
||||
*/
|
||||
DIRECT = 7,
|
||||
/**
|
||||
* Input is for capturing "ultrasound" audio commands.
|
||||
*/
|
||||
ULTRASOUND = 8,
|
||||
}
|
||||
|
@ -97,4 +97,8 @@ enum AudioOutputFlags {
|
||||
* tracks.
|
||||
*/
|
||||
GAPLESS_OFFLOAD = 15,
|
||||
/**
|
||||
* Output is used for transmitting ultrasound audio.
|
||||
*/
|
||||
ULTRASOUND = 16,
|
||||
}
|
||||
|
@ -87,4 +87,8 @@ enum AudioSource {
|
||||
* hotword detection. Same tuning as VOICE_RECOGNITION.
|
||||
*/
|
||||
HOTWORD = 1999,
|
||||
/** Microphone audio source for ultrasound sound if available,
|
||||
* behaves like DEFAULT otherwise.
|
||||
*/
|
||||
ULTRASOUND = 2000,
|
||||
}
|
||||
|
@ -40,4 +40,5 @@ enum AudioContentType {
|
||||
MUSIC = 2,
|
||||
MOVIE = 3,
|
||||
SONIFICATION = 4,
|
||||
ULTRASOUND = 1997,
|
||||
}
|
||||
|
@ -43,4 +43,5 @@ enum AudioInputFlags {
|
||||
VOIP_TX = 5,
|
||||
HW_AV_SYNC = 6,
|
||||
DIRECT = 7,
|
||||
ULTRASOUND = 8,
|
||||
}
|
||||
|
@ -51,4 +51,5 @@ enum AudioOutputFlags {
|
||||
VOIP_RX = 13,
|
||||
INCALL_MUSIC = 14,
|
||||
GAPLESS_OFFLOAD = 15,
|
||||
ULTRASOUND = 16,
|
||||
}
|
||||
|
@ -50,4 +50,5 @@ enum AudioSource {
|
||||
ECHO_REFERENCE = 1997,
|
||||
FM_TUNER = 1998,
|
||||
HOTWORD = 1999,
|
||||
ULTRASOUND = 2000,
|
||||
}
|
||||
|
@ -101,6 +101,13 @@ public final class AudioAttributes implements Parcelable {
|
||||
* or short Foley sounds.
|
||||
*/
|
||||
public final static int CONTENT_TYPE_SONIFICATION = 4;
|
||||
/**
|
||||
* @hide
|
||||
* Content type value to use when the content type is ultrasound.
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_ULTRASOUND)
|
||||
public static final int CONTENT_TYPE_ULTRASOUND = 1997;
|
||||
|
||||
/**
|
||||
* Invalid value, only ever used for an uninitialized usage value
|
||||
@ -957,6 +964,26 @@ public final class AudioAttributes implements Parcelable {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
* Sets the attribute describing the content type of the audio signal, such as speech,
|
||||
* , music or ultrasound.
|
||||
* @param contentType the content type values.
|
||||
* @return the same Builder instance.
|
||||
*/
|
||||
@SystemApi
|
||||
public @NonNull Builder setInternalContentType(@AttrInternalContentType int contentType) {
|
||||
switch (contentType) {
|
||||
case CONTENT_TYPE_ULTRASOUND:
|
||||
mContentType = contentType;
|
||||
break;
|
||||
default:
|
||||
setContentType(contentType);
|
||||
break;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the combination of flags.
|
||||
*
|
||||
@ -1234,7 +1261,8 @@ 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, VOICE_CALL and ECHO_REFERENCE.
|
||||
* REMOTE_SUBMIX, RADIO_TUNER, VOICE_DOWNLINK, VOICE_UPLINK, VOICE_CALL, ECHO_REFERENCE
|
||||
* and ULTRASOUND
|
||||
* @param preset
|
||||
* @return the same Builder instance.
|
||||
*/
|
||||
@ -1246,7 +1274,8 @@ public final class AudioAttributes implements Parcelable {
|
||||
|| (preset == MediaRecorder.AudioSource.VOICE_DOWNLINK)
|
||||
|| (preset == MediaRecorder.AudioSource.VOICE_UPLINK)
|
||||
|| (preset == MediaRecorder.AudioSource.VOICE_CALL)
|
||||
|| (preset == MediaRecorder.AudioSource.ECHO_REFERENCE)) {
|
||||
|| (preset == MediaRecorder.AudioSource.ECHO_REFERENCE)
|
||||
|| (preset == MediaRecorder.AudioSource.ULTRASOUND)) {
|
||||
mSource = preset;
|
||||
} else {
|
||||
setCapturePreset(preset);
|
||||
@ -1589,6 +1618,7 @@ public final class AudioAttributes implements Parcelable {
|
||||
case CONTENT_TYPE_MUSIC: return new String("CONTENT_TYPE_MUSIC");
|
||||
case CONTENT_TYPE_MOVIE: return new String("CONTENT_TYPE_MOVIE");
|
||||
case CONTENT_TYPE_SONIFICATION: return new String("CONTENT_TYPE_SONIFICATION");
|
||||
case CONTENT_TYPE_ULTRASOUND: return new String("CONTENT_TYPE_ULTRASOUND");
|
||||
default: return new String("unknown content type " + mContentType);
|
||||
}
|
||||
}
|
||||
@ -1823,4 +1853,16 @@ public final class AudioAttributes implements Parcelable {
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface AttributeContentType {}
|
||||
|
||||
/** @hide */
|
||||
@IntDef({
|
||||
CONTENT_TYPE_UNKNOWN,
|
||||
CONTENT_TYPE_SPEECH,
|
||||
CONTENT_TYPE_MUSIC,
|
||||
CONTENT_TYPE_MOVIE,
|
||||
CONTENT_TYPE_SONIFICATION,
|
||||
CONTENT_TYPE_ULTRASOUND
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface AttrInternalContentType {}
|
||||
}
|
||||
|
@ -1033,11 +1033,12 @@ public class AudioRecord implements AudioRouting, MicrophoneDirection,
|
||||
|
||||
//--------------
|
||||
// audio source
|
||||
if ( (audioSource < MediaRecorder.AudioSource.DEFAULT) ||
|
||||
((audioSource > MediaRecorder.getAudioSourceMax()) &&
|
||||
(audioSource != MediaRecorder.AudioSource.RADIO_TUNER) &&
|
||||
(audioSource != MediaRecorder.AudioSource.ECHO_REFERENCE) &&
|
||||
(audioSource != MediaRecorder.AudioSource.HOTWORD)) ) {
|
||||
if ((audioSource < MediaRecorder.AudioSource.DEFAULT)
|
||||
|| ((audioSource > MediaRecorder.getAudioSourceMax())
|
||||
&& (audioSource != MediaRecorder.AudioSource.RADIO_TUNER)
|
||||
&& (audioSource != MediaRecorder.AudioSource.ECHO_REFERENCE)
|
||||
&& (audioSource != MediaRecorder.AudioSource.HOTWORD)
|
||||
&& (audioSource != MediaRecorder.AudioSource.ULTRASOUND))) {
|
||||
throw new IllegalArgumentException("Invalid audio source " + audioSource);
|
||||
}
|
||||
mRecordSource = audioSource;
|
||||
|
@ -365,6 +365,7 @@ public class MediaRecorder implements AudioRouting,
|
||||
*/
|
||||
public static final int VOICE_PERFORMANCE = 10;
|
||||
|
||||
|
||||
/**
|
||||
* Source for an echo canceller to capture the reference signal to be cancelled.
|
||||
* <p>
|
||||
@ -408,6 +409,15 @@ public class MediaRecorder implements AudioRouting,
|
||||
@SystemApi
|
||||
@RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD)
|
||||
public static final int HOTWORD = 1999;
|
||||
|
||||
/** Microphone audio source for ultrasound sound if available, behaves like
|
||||
* {@link #DEFAULT} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(android.Manifest.permission.ACCESS_ULTRASOUND)
|
||||
public static final int ULTRASOUND = 2000;
|
||||
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@ -442,6 +452,7 @@ public class MediaRecorder implements AudioRouting,
|
||||
AudioSource.ECHO_REFERENCE,
|
||||
AudioSource.RADIO_TUNER,
|
||||
AudioSource.HOTWORD,
|
||||
AudioSource.ULTRASOUND,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface SystemSource {}
|
||||
@ -454,20 +465,20 @@ public class MediaRecorder implements AudioRouting,
|
||||
*/
|
||||
public static boolean isSystemOnlyAudioSource(int source) {
|
||||
switch(source) {
|
||||
case AudioSource.DEFAULT:
|
||||
case AudioSource.MIC:
|
||||
case AudioSource.VOICE_UPLINK:
|
||||
case AudioSource.VOICE_DOWNLINK:
|
||||
case AudioSource.VOICE_CALL:
|
||||
case AudioSource.CAMCORDER:
|
||||
case AudioSource.VOICE_RECOGNITION:
|
||||
case AudioSource.VOICE_COMMUNICATION:
|
||||
//case REMOTE_SUBMIX: considered "system" as it requires system permissions
|
||||
case AudioSource.UNPROCESSED:
|
||||
case AudioSource.VOICE_PERFORMANCE:
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
case AudioSource.DEFAULT:
|
||||
case AudioSource.MIC:
|
||||
case AudioSource.VOICE_UPLINK:
|
||||
case AudioSource.VOICE_DOWNLINK:
|
||||
case AudioSource.VOICE_CALL:
|
||||
case AudioSource.CAMCORDER:
|
||||
case AudioSource.VOICE_RECOGNITION:
|
||||
case AudioSource.VOICE_COMMUNICATION:
|
||||
//case REMOTE_SUBMIX: considered "system" as it requires system permissions
|
||||
case AudioSource.UNPROCESSED:
|
||||
case AudioSource.VOICE_PERFORMANCE:
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -491,6 +502,7 @@ public class MediaRecorder implements AudioRouting,
|
||||
case AudioSource.ECHO_REFERENCE:
|
||||
case AudioSource.RADIO_TUNER:
|
||||
case AudioSource.HOTWORD:
|
||||
case AudioSource.ULTRASOUND:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
@ -500,38 +512,40 @@ public class MediaRecorder implements AudioRouting,
|
||||
/** @hide */
|
||||
public static final String toLogFriendlyAudioSource(int source) {
|
||||
switch(source) {
|
||||
case AudioSource.DEFAULT:
|
||||
return "DEFAULT";
|
||||
case AudioSource.MIC:
|
||||
return "MIC";
|
||||
case AudioSource.VOICE_UPLINK:
|
||||
return "VOICE_UPLINK";
|
||||
case AudioSource.VOICE_DOWNLINK:
|
||||
return "VOICE_DOWNLINK";
|
||||
case AudioSource.VOICE_CALL:
|
||||
return "VOICE_CALL";
|
||||
case AudioSource.CAMCORDER:
|
||||
return "CAMCORDER";
|
||||
case AudioSource.VOICE_RECOGNITION:
|
||||
return "VOICE_RECOGNITION";
|
||||
case AudioSource.VOICE_COMMUNICATION:
|
||||
return "VOICE_COMMUNICATION";
|
||||
case AudioSource.REMOTE_SUBMIX:
|
||||
return "REMOTE_SUBMIX";
|
||||
case AudioSource.UNPROCESSED:
|
||||
return "UNPROCESSED";
|
||||
case AudioSource.ECHO_REFERENCE:
|
||||
return "ECHO_REFERENCE";
|
||||
case AudioSource.VOICE_PERFORMANCE:
|
||||
return "VOICE_PERFORMANCE";
|
||||
case AudioSource.RADIO_TUNER:
|
||||
return "RADIO_TUNER";
|
||||
case AudioSource.HOTWORD:
|
||||
return "HOTWORD";
|
||||
case AudioSource.AUDIO_SOURCE_INVALID:
|
||||
return "AUDIO_SOURCE_INVALID";
|
||||
default:
|
||||
return "unknown source " + source;
|
||||
case AudioSource.DEFAULT:
|
||||
return "DEFAULT";
|
||||
case AudioSource.MIC:
|
||||
return "MIC";
|
||||
case AudioSource.VOICE_UPLINK:
|
||||
return "VOICE_UPLINK";
|
||||
case AudioSource.VOICE_DOWNLINK:
|
||||
return "VOICE_DOWNLINK";
|
||||
case AudioSource.VOICE_CALL:
|
||||
return "VOICE_CALL";
|
||||
case AudioSource.CAMCORDER:
|
||||
return "CAMCORDER";
|
||||
case AudioSource.VOICE_RECOGNITION:
|
||||
return "VOICE_RECOGNITION";
|
||||
case AudioSource.VOICE_COMMUNICATION:
|
||||
return "VOICE_COMMUNICATION";
|
||||
case AudioSource.REMOTE_SUBMIX:
|
||||
return "REMOTE_SUBMIX";
|
||||
case AudioSource.UNPROCESSED:
|
||||
return "UNPROCESSED";
|
||||
case AudioSource.ECHO_REFERENCE:
|
||||
return "ECHO_REFERENCE";
|
||||
case AudioSource.VOICE_PERFORMANCE:
|
||||
return "VOICE_PERFORMANCE";
|
||||
case AudioSource.RADIO_TUNER:
|
||||
return "RADIO_TUNER";
|
||||
case AudioSource.HOTWORD:
|
||||
return "HOTWORD";
|
||||
case AudioSource.ULTRASOUND:
|
||||
return "ULTRASOUND";
|
||||
case AudioSource.AUDIO_SOURCE_INVALID:
|
||||
return "AUDIO_SOURCE_INVALID";
|
||||
default:
|
||||
return "unknown source " + source;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user