Add TV audio device management APIs.
Updates to AudioManager, AudioDeviceInfo, AudioTrack. Test: make, boot sanity (functionality stubbed, no effect) Bug: 133526565 Change-Id: Iba99871a5050a90887c4dd101ae227b1663fe149
This commit is contained in:
@@ -23828,6 +23828,8 @@ package android.media {
|
||||
method @NonNull public int[] getChannelCounts();
|
||||
method @NonNull public int[] getChannelIndexMasks();
|
||||
method @NonNull public int[] getChannelMasks();
|
||||
method @NonNull public int[] getEncapsulationMetadataTypes();
|
||||
method @NonNull public int[] getEncapsulationModes();
|
||||
method @NonNull public int[] getEncodings();
|
||||
method public int getId();
|
||||
method public CharSequence getProductName();
|
||||
@@ -24448,6 +24450,8 @@ package android.media {
|
||||
field public static final int DUAL_MONO_MODE_LR = 1; // 0x1
|
||||
field public static final int DUAL_MONO_MODE_OFF = 0; // 0x0
|
||||
field public static final int DUAL_MONO_MODE_RR = 3; // 0x3
|
||||
field public static final int ENCAPSULATION_METADATA_TYPE_DVB_AD_DESCRIPTOR = 2; // 0x2
|
||||
field public static final int ENCAPSULATION_METADATA_TYPE_FRAMEWORK_TUNER = 1; // 0x1
|
||||
field public static final int ENCAPSULATION_MODE_ELEMENTARY_STREAM = 1; // 0x1
|
||||
field public static final int ENCAPSULATION_MODE_HANDLE = 2; // 0x2
|
||||
field public static final int ENCAPSULATION_MODE_NONE = 0; // 0x0
|
||||
|
||||
@@ -4184,9 +4184,11 @@ package android.media {
|
||||
method @Deprecated public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes);
|
||||
method public void clearAudioServerStateCallback();
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int dispatchAudioFocusChange(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
|
||||
method @IntRange(from=0) public int getAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo);
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List<android.media.audiopolicy.AudioProductStrategy> getAudioProductStrategies();
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List<android.media.audiopolicy.AudioVolumeGroup> getAudioVolumeGroups();
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public java.util.List<android.media.AudioDeviceAddress> getDevicesForAttributes(@NonNull android.media.AudioAttributes);
|
||||
method @IntRange(from=0) public int getMaxAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo);
|
||||
method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMaxVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
|
||||
method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMinVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
|
||||
method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioDeviceAddress getPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
|
||||
@@ -4200,6 +4202,7 @@ package android.media {
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, @NonNull android.media.AudioAttributes, int, int) throws java.lang.IllegalArgumentException;
|
||||
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.MODIFY_AUDIO_ROUTING}) public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, @NonNull android.media.AudioAttributes, int, int, android.media.audiopolicy.AudioPolicy) throws java.lang.IllegalArgumentException;
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int requestAudioFocus(@NonNull android.media.AudioFocusRequest, @Nullable android.media.audiopolicy.AudioPolicy);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo, @IntRange(from=0) int);
|
||||
method public void setAudioServerStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.AudioServerStateCallback);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setFocusRequestResult(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy, @NonNull android.media.AudioDeviceAddress);
|
||||
|
||||
@@ -422,6 +422,40 @@ public final class AudioDeviceInfo {
|
||||
return AudioFormat.filterPublicFormats(mPort.formats());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of supported encapsulation modes for the device.
|
||||
*
|
||||
* The array can include any of
|
||||
* {@link AudioTrack#ENCAPSULATION_MODE_ELEMENTARY_STREAM},
|
||||
* {@link AudioTrack#ENCAPSULATION_MODE_HANDLE}.
|
||||
*
|
||||
* @return An array of supported encapsulation modes for the device. This
|
||||
* may be an empty array if no encapsulation modes are supported.
|
||||
*/
|
||||
public @NonNull int[] getEncapsulationModes() {
|
||||
// Implement a getter in r-dev or r-tv-dev as needed.
|
||||
return new int[0]; // be careful of returning a copy of any internal data.
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of supported encapsulation metadata types for the device.
|
||||
*
|
||||
* The metadata type returned should be allowed for all encapsulation modes supported
|
||||
* by the device. Some metadata types may apply only to certain
|
||||
* compressed stream formats, the returned list is the union of subsets.
|
||||
*
|
||||
* The array can include any of
|
||||
* {@link AudioTrack#ENCAPSULATION_METADATA_TYPE_FRAMEWORK_TUNER},
|
||||
* {@link AudioTrack#ENCAPSULATION_METADATA_TYPE_DVB_AD_DESCRIPTOR}.
|
||||
*
|
||||
* @return An array of supported encapsulation metadata types for the device. This
|
||||
* may be an empty array if no metadata types are supported.
|
||||
*/
|
||||
public @NonNull int[] getEncapsulationMetadataTypes() {
|
||||
// Implement a getter in r-dev or r-tv-dev as needed.
|
||||
return new int[0]; // be careful of returning a copy of any internal data.
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The device type identifier of the audio device (i.e. TYPE_BUILTIN_SPEAKER).
|
||||
*/
|
||||
|
||||
@@ -4566,6 +4566,70 @@ public class AudioManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
* Sets an additional audio output device delay in milliseconds.
|
||||
*
|
||||
* The additional output delay is a request to the output device to
|
||||
* delay audio presentation (generally with respect to video presentation for better
|
||||
* synchronization).
|
||||
* It may not be supported by all output devices,
|
||||
* and typically increases the audio latency by the amount of additional
|
||||
* audio delay requested.
|
||||
*
|
||||
* If additional audio delay is supported by an audio output device,
|
||||
* it is expected to be supported for all output streams (and configurations)
|
||||
* opened on that device.
|
||||
*
|
||||
* @param device an instance of {@link AudioDeviceInfo} returned from {@link getDevices()}.
|
||||
* @param delayMs delay in milliseconds desired. This should be in range of {@code 0}
|
||||
* to the value returned by {@link #getMaxAdditionalOutputDeviceDelay()}.
|
||||
* @return true if successful, false if the device does not support output device delay
|
||||
* or the delay is not in range of {@link #getMaxAdditionalOutputDeviceDelay()}.
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
|
||||
public boolean setAdditionalOutputDeviceDelay(
|
||||
@NonNull AudioDeviceInfo device, @IntRange(from = 0) int delayMs) {
|
||||
Objects.requireNonNull(device);
|
||||
// Implement the setter in r-dev or r-tv-dev as needed.
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
* Returns the current additional audio output device delay in milliseconds.
|
||||
*
|
||||
* @param device an instance of {@link AudioDeviceInfo} returned from {@link getDevices()}.
|
||||
* @return the additional output device delay. This is a non-negative number.
|
||||
* {@code 0} is returned if unsupported.
|
||||
*/
|
||||
@SystemApi
|
||||
@IntRange(from = 0)
|
||||
public int getAdditionalOutputDeviceDelay(@NonNull AudioDeviceInfo device) {
|
||||
Objects.requireNonNull(device);
|
||||
// Implement the getter in r-dev or r-tv-dev as needed.
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
* Returns the maximum additional audio output device delay in milliseconds.
|
||||
*
|
||||
* @param device an instance of {@link AudioDeviceInfo} returned from {@link getDevices()}.
|
||||
* @return the maximum output device delay in milliseconds that can be set.
|
||||
* This is a non-negative number
|
||||
* representing the additional audio delay supported for the device.
|
||||
* {@code 0} is returned if unsupported.
|
||||
*/
|
||||
@SystemApi
|
||||
@IntRange(from = 0)
|
||||
public int getMaxAdditionalOutputDeviceDelay(@NonNull AudioDeviceInfo device) {
|
||||
Objects.requireNonNull(device);
|
||||
// Implement the getter in r-dev or r-tv-dev as needed.
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the estimated latency for the given stream type in milliseconds.
|
||||
*
|
||||
|
||||
@@ -256,6 +256,38 @@ public class AudioTrack extends PlayerBase
|
||||
*/
|
||||
public static final int ENCAPSULATION_MODE_HANDLE = 2;
|
||||
|
||||
/* Enumeration of metadata types permitted for use by
|
||||
* encapsulation mode audio streams.
|
||||
*/
|
||||
/** @hide */
|
||||
@IntDef(prefix = { "ENCAPSULATION_METADATA_TYPE_" }, value = {
|
||||
ENCAPSULATION_METADATA_TYPE_NONE, /* reserved */
|
||||
ENCAPSULATION_METADATA_TYPE_FRAMEWORK_TUNER,
|
||||
ENCAPSULATION_METADATA_TYPE_DVB_AD_DESCRIPTOR,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface EncapsulationMetadataType {}
|
||||
|
||||
/**
|
||||
* Reserved do not use.
|
||||
* @hide
|
||||
*/
|
||||
public static final int ENCAPSULATION_METADATA_TYPE_NONE = 0; // reserved
|
||||
|
||||
/**
|
||||
* Encapsulation metadata type for framework tuner information.
|
||||
*
|
||||
* TODO(b/147778408) Link: Fill in Tuner API info.
|
||||
*/
|
||||
public static final int ENCAPSULATION_METADATA_TYPE_FRAMEWORK_TUNER = 1;
|
||||
|
||||
/**
|
||||
* Encapsulation metadata type for DVB AD descriptor.
|
||||
*
|
||||
* This metadata is formatted per ETSI TS 101 154 Table E.1: AD_descriptor.
|
||||
*/
|
||||
public static final int ENCAPSULATION_METADATA_TYPE_DVB_AD_DESCRIPTOR = 2;
|
||||
|
||||
/* Dual Mono handling is used when a stereo audio stream
|
||||
* contains separate audio content on the left and right channels.
|
||||
* Such information about the content of the stream may be found, for example, in
|
||||
|
||||
Reference in New Issue
Block a user