/*
 * This file is auto-generated.  DO NOT MODIFY.
 * Using: out/host/linux-x86/bin/aidl --lang=java -Weverything -Wno-missing-permission-annotation --min_sdk_version current -pout/soong/.intermediates/system/hardware/interfaces/media/android.media.audio.common.types_interface/5/preprocessed.aidl -pout/soong/.intermediates/frameworks/av/media/aidl/audio-permission-aidl_interface/preprocessed.aidl -pout/soong/.intermediates/frameworks/av/media/libaudioclient/audioclient-types-aidl_interface/preprocessed.aidl -pout/soong/.intermediates/frameworks/av/media/libaudioclient/audiopolicy-types-aidl_interface/preprocessed.aidl -pout/soong/.intermediates/frameworks/av/media/libaudioclient/capture_state_listener-aidl_interface/preprocessed.aidl -pout/soong/.intermediates/frameworks/native/libs/permission/framework-permission-aidl_interface/preprocessed.aidl -pout/soong/.intermediates/frameworks/av/media/libaudioclient/spatializer-aidl_interface/preprocessed.aidl -pout/soong/.intermediates/frameworks/av/media/libaudioclient/volumegroupcallback-aidl_interface/preprocessed.aidl --ninja -d out/soong/.intermediates/frameworks/av/media/libaudioclient/audiopolicy-aidl-java-source/gen/android/media/IAudioPolicyService.java.d -o out/soong/.intermediates/frameworks/av/media/libaudioclient/audiopolicy-aidl-java-source/gen -Nframeworks/av/media/libaudioclient/aidl frameworks/av/media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl
 *
 * DO NOT CHECK THIS FILE INTO A CODE TREE (e.g. git, etc..).
 * ALWAYS GENERATE THIS FILE FROM UPDATED AIDL COMPILER
 * AS A BUILD INTERMEDIATE ONLY. THIS IS NOT SOURCE CODE.
 */
package android.media;
/**
 * IAudioPolicyService interface (see AudioPolicyInterface for method descriptions).
 * 
 * @hide
 */
public interface IAudioPolicyService extends android.os.IInterface
{
  /** Default implementation for IAudioPolicyService. */
  public static class Default implements android.media.IAudioPolicyService
  {
    @Override public void onNewAudioModulesAvailable() throws android.os.RemoteException
    {
    }
    @Override public void setDeviceConnectionState(int state, android.media.audio.common.AudioPort port, android.media.audio.common.AudioFormatDescription encodedFormat, boolean deviceSwitch) throws android.os.RemoteException
    {
    }
    @Override public int getDeviceConnectionState(android.media.audio.common.AudioDevice device) throws android.os.RemoteException
    {
      return 0;
    }
    @Override public void handleDeviceConfigChange(android.media.audio.common.AudioDevice device, java.lang.String deviceName, android.media.audio.common.AudioFormatDescription encodedFormat) throws android.os.RemoteException
    {
    }
    @Override public void setPhoneState(int state, int uid) throws android.os.RemoteException
    {
    }
    @Override public void setForceUse(int usage, int config) throws android.os.RemoteException
    {
    }
    @Override public int getForceUse(int usage) throws android.os.RemoteException
    {
      return 0;
    }
    /** audio_io_handle_t */
    @Override public int getOutput(int stream) throws android.os.RemoteException
    {
      return 0;
    }
    @Override public android.media.GetOutputForAttrResponse getOutputForAttr(android.media.audio.common.AudioAttributes attr, int session, android.content.AttributionSourceState attributionSource, android.media.audio.common.AudioConfig config, int flags, int[] selectedDeviceIds) throws android.os.RemoteException
    {
      return null;
    }
    @Override public android.media.StartOutputResponse startOutput(int portId) throws android.os.RemoteException
    {
      return null;
    }
    @Override public void stopOutput(int portId) throws android.os.RemoteException
    {
    }
    @Override public void releaseOutput(int portId) throws android.os.RemoteException
    {
    }
    @Override public void forceReleaseDirectOutput(int output) throws android.os.RemoteException
    {
    }
    @Override public android.media.GetInputForAttrResponse getInputForAttr(android.media.audio.common.AudioAttributes attr, int input, int riid, int session, android.content.AttributionSourceState attributionSource, android.media.audio.common.AudioConfigBase config, int flags, int selectedDeviceId) throws android.os.RemoteException
    {
      return null;
    }
    @Override public void startInput(int portId) throws android.os.RemoteException
    {
    }
    @Override public void stopInput(int portId) throws android.os.RemoteException
    {
    }
    @Override public void releaseInput(int portId) throws android.os.RemoteException
    {
    }
    @Override public void setDeviceAbsoluteVolumeEnabled(android.media.audio.common.AudioDevice device, boolean enabled, int streamToDriveAbs) throws android.os.RemoteException
    {
    }
    @Override public void initStreamVolume(int stream, int indexMin, int indexMax) throws android.os.RemoteException
    {
    }
    @Override public void setStreamVolumeIndex(int stream, android.media.audio.common.AudioDeviceDescription device, int index, boolean muted) throws android.os.RemoteException
    {
    }
    @Override public int getStreamVolumeIndex(int stream, android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException
    {
      return 0;
    }
    @Override public void setVolumeIndexForAttributes(android.media.audio.common.AudioAttributes attr, android.media.audio.common.AudioDeviceDescription device, int index, boolean muted) throws android.os.RemoteException
    {
    }
    @Override public int getVolumeIndexForAttributes(android.media.audio.common.AudioAttributes attr, android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException
    {
      return 0;
    }
    @Override public int getMaxVolumeIndexForAttributes(android.media.audio.common.AudioAttributes attr) throws android.os.RemoteException
    {
      return 0;
    }
    @Override public int getMinVolumeIndexForAttributes(android.media.audio.common.AudioAttributes attr) throws android.os.RemoteException
    {
      return 0;
    }
    @Override public int getMaxVolumeIndexForGroup(int groupId) throws android.os.RemoteException
    {
      return 0;
    }
    @Override public int getMinVolumeIndexForGroup(int groupId) throws android.os.RemoteException
    {
      return 0;
    }
    @Override public void setMaxVolumeIndexForGroup(int groupId, int maxIndex) throws android.os.RemoteException
    {
    }
    @Override public void setMinVolumeIndexForGroup(int groupId, int minIndex) throws android.os.RemoteException
    {
    }
    /**
     * Set the volume for the given group id, device and index. UID is given as the attenuation
     * depends on the device. Routing rules may be registered for a given UID / User ID. Thus,
     * AudioPolicy will re-check the device for which the attenuation shall be taken.
     * TODO (b/434866735) merge per attribute/per stream API into this API
     */
    @Override public void setVolumeIndexForGroup(int groupId, int uid, android.media.audio.common.AudioDeviceDescription device, int index, boolean muted) throws android.os.RemoteException
    {
    }
    /**
     * TODO (b/434866735) merge per attribute/per stream API into this API and add the Min / Max
     * getter API.
     */
    @Override public int getVolumeIndexForGroup(int groupId, android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException
    {
      return 0;
    }
    /** product_strategy_t */
    @Override public int getStrategyForStream(int stream, int uid) throws android.os.RemoteException
    {
      return 0;
    }
    /**
     * Requests the devices that would be used for routing (if forVolume is false) or for volume
     * operations for the given attributes and UID (as routing rules may be registered on
     * UID / User ID)
     */
    @Override public android.media.audio.common.AudioDevice[] getDevicesForAttributes(android.media.audio.common.AudioAttributes attr, int uid, boolean forVolume) throws android.os.RemoteException
    {
      return null;
    }
    /** audio_io_handle_t */
    @Override public int getOutputForEffect(android.media.EffectDescriptor desc) throws android.os.RemoteException
    {
      return 0;
    }
    @Override public void registerEffect(android.media.EffectDescriptor desc, int io, int strategy, int session, int id) throws android.os.RemoteException
    {
    }
    @Override public void unregisterEffect(int id) throws android.os.RemoteException
    {
    }
    @Override public void setEffectEnabled(int id, boolean enabled) throws android.os.RemoteException
    {
    }
    @Override public void moveEffectsToIo(int[] ids, int io) throws android.os.RemoteException
    {
    }
    @Override public boolean isStreamActive(int stream, int inPastMs) throws android.os.RemoteException
    {
      return false;
    }
    @Override public boolean isStreamActiveRemotely(int stream, int inPastMs) throws android.os.RemoteException
    {
      return false;
    }
    @Override public boolean isSourceActive(int source) throws android.os.RemoteException
    {
      return false;
    }
    /**
     * On input, count represents the maximum length of the returned array.
     * On output, count is the total number of elements, which may be larger than the array size.
     * Passing '0' on input and inspecting the value on output is a common way of determining the
     * number of elements without actually retrieving them.
     */
    @Override public android.media.EffectDescriptor[] queryDefaultPreProcessing(int audioSession, android.media.audio.common.Int count) throws android.os.RemoteException
    {
      return null;
    }
    /** audio_unique_id_t */
    @Override public int addSourceDefaultEffect(android.media.audio.common.AudioUuid type, java.lang.String opPackageName, android.media.audio.common.AudioUuid uuid, int priority, int source) throws android.os.RemoteException
    {
      return 0;
    }
    /** audio_unique_id_t */
    @Override public int addStreamDefaultEffect(android.media.audio.common.AudioUuid type, java.lang.String opPackageName, android.media.audio.common.AudioUuid uuid, int priority, int usage) throws android.os.RemoteException
    {
      return 0;
    }
    @Override public void removeSourceDefaultEffect(int id) throws android.os.RemoteException
    {
    }
    @Override public void removeStreamDefaultEffect(int id) throws android.os.RemoteException
    {
    }
    @Override public void setSupportedSystemUsages(int[] systemUsages) throws android.os.RemoteException
    {
    }
    @Override public void setAllowedCapturePolicy(int uid, int capturePolicy) throws android.os.RemoteException
    {
    }
    /**
     * Check if offload is possible for given format, stream type, sample rate,
     * bit rate, duration, video and streaming or offload property is enabled.
     */
    @Override public int getOffloadSupport(android.media.audio.common.AudioOffloadInfo info) throws android.os.RemoteException
    {
      return 0;
    }
    /** Check if direct playback is possible for given format, sample rate, channel mask and flags. */
    @Override public boolean isDirectOutputSupported(android.media.audio.common.AudioConfigBase config, android.media.audio.common.AudioAttributes attributes) throws android.os.RemoteException
    {
      return false;
    }
    /**
     * List currently attached audio ports and their attributes. Returns the generation.
     * The generation is incremented each time when anything changes in the ports
     * configuration.
     * 
     * On input, count represents the maximum length of the returned array.
     * On output, count is the total number of elements, which may be larger than the array size.
     * Passing '0' on input and inspecting the value on output is a common way of determining the
     * number of elements without actually retrieving them.
     */
    @Override public int listAudioPorts(int role, int type, android.media.audio.common.Int count, android.media.AudioPortFw[] ports) throws android.os.RemoteException
    {
      return 0;
    }
    /**
     * List all device ports declared in the configuration (including currently detached ones)
     * 'role' can be 'NONE' to get both input and output devices,
     * 'SINK' for output devices, and 'SOURCE' for input devices.
     */
    @Override public android.media.AudioPortFw[] listDeclaredDevicePorts(int role) throws android.os.RemoteException
    {
      return null;
    }
    /** Get attributes for the audio port with the given id (AudioPort.hal.id field). */
    @Override public android.media.AudioPortFw getAudioPort(int portId) throws android.os.RemoteException
    {
      return null;
    }
    /**
     * Create an audio patch between several source and sink ports.
     * The handle argument is used when updating an existing patch.
     */
    /** audio_patch_handle_t */
    @Override public int createAudioPatch(android.media.AudioPatchFw patch, int handle) throws android.os.RemoteException
    {
      return 0;
    }
    /** Release an audio patch. */
    @Override public void releaseAudioPatch(int handle) throws android.os.RemoteException
    {
    }
    /**
     * List existing audio patches. Returns the generation.
     * 
     * On input, count represents the maximum length of the returned array.
     * On output, count is the total number of elements, which may be larger than the array size.
     * Passing '0' on input and inspecting the value on output is a common way of determining the
     * number of elements without actually retrieving them.
     */
    @Override public int listAudioPatches(android.media.audio.common.Int count, android.media.AudioPatchFw[] patches) throws android.os.RemoteException
    {
      return 0;
    }
    /** Set audio port configuration. */
    @Override public void setAudioPortConfig(android.media.AudioPortConfigFw config) throws android.os.RemoteException
    {
    }
    @Override public void registerClient(android.media.IAudioPolicyServiceClient client) throws android.os.RemoteException
    {
    }
    @Override public void setAudioPortCallbacksEnabled(boolean enabled) throws android.os.RemoteException
    {
    }
    @Override public void setAudioVolumeGroupCallbacksEnabled(boolean enabled) throws android.os.RemoteException
    {
    }
    @Override public android.media.SoundTriggerSession acquireSoundTriggerSession() throws android.os.RemoteException
    {
      return null;
    }
    @Override public void releaseSoundTriggerSession(int session) throws android.os.RemoteException
    {
    }
    @Override public int getPhoneState() throws android.os.RemoteException
    {
      return 0;
    }
    @Override public void registerPolicyMixes(android.media.AudioMix[] mixes, boolean registration) throws android.os.RemoteException
    {
    }
    @Override public java.util.List<android.media.AudioMix> getRegisteredPolicyMixes() throws android.os.RemoteException
    {
      return null;
    }
    @Override public void updatePolicyMixes(android.media.AudioMixUpdate[] updates) throws android.os.RemoteException
    {
    }
    @Override public void setUidDeviceAffinities(int uid, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
    {
    }
    @Override public void removeUidDeviceAffinities(int uid) throws android.os.RemoteException
    {
    }
    @Override public void setUserIdDeviceAffinities(int userId, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
    {
    }
    @Override public void removeUserIdDeviceAffinities(int userId) throws android.os.RemoteException
    {
    }
    /** audio_port_handle_t */
    @Override public int startAudioSource(android.media.AudioPortConfigFw source, android.media.audio.common.AudioAttributes attributes) throws android.os.RemoteException
    {
      return 0;
    }
    @Override public void stopAudioSource(int portId) throws android.os.RemoteException
    {
    }
    @Override public void setMasterMono(boolean mono) throws android.os.RemoteException
    {
    }
    @Override public boolean getMasterMono() throws android.os.RemoteException
    {
      return false;
    }
    @Override public float getStreamVolumeDB(int stream, int index, android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException
    {
      return 0.0f;
    }
    /**
     * Populates supported surround formats and their enabled state in formats and formatsEnabled.
     * 
     * On input, count represents the maximum length of the returned array.
     * On output, count is the total number of elements, which may be larger than the array size.
     * Passing '0' on input and inspecting the value on output is a common way of determining the
     * number of elements without actually retrieving them.
     */
    @Override public void getSurroundFormats(android.media.audio.common.Int count, android.media.audio.common.AudioFormatDescription[] formats, boolean[] formatsEnabled) throws android.os.RemoteException
    {
    }
    /**
     * Populates the surround formats reported by the HDMI devices in formats.
     * 
     * On input, count represents the maximum length of the returned array.
     * On output, count is the total number of elements, which may be larger than the array size.
     * Passing '0' on input and inspecting the value on output is a common way of determining the
     * number of elements without actually retrieving them.
     */
    @Override public void getReportedSurroundFormats(android.media.audio.common.Int count, android.media.audio.common.AudioFormatDescription[] formats) throws android.os.RemoteException
    {
    }
    @Override public android.media.audio.common.AudioFormatDescription[] getHwOffloadFormatsSupportedForBluetoothMedia(android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException
    {
      return null;
    }
    @Override public void setSurroundFormatEnabled(android.media.audio.common.AudioFormatDescription audioFormat, boolean enabled) throws android.os.RemoteException
    {
    }
    @Override public void setAssistantServicesUids(int[] uids) throws android.os.RemoteException
    {
    }
    @Override public void setActiveAssistantServicesUids(int[] activeUids) throws android.os.RemoteException
    {
    }
    @Override public void setA11yServicesUids(int[] uids) throws android.os.RemoteException
    {
    }
    @Override public void setCurrentImeUid(int uid) throws android.os.RemoteException
    {
    }
    @Override public boolean isHapticPlaybackSupported() throws android.os.RemoteException
    {
      return false;
    }
    @Override public boolean isUltrasoundSupported() throws android.os.RemoteException
    {
      return false;
    }
    /**
     * Queries if there is hardware support for requesting audio capture content from
     * the DSP hotword pipeline.
     * 
     * @param lookbackAudio true if additionally querying for the ability to capture audio
     *                      from the pipeline prior to capture stream open.
     */
    @Override public boolean isHotwordStreamSupported(boolean lookbackAudio) throws android.os.RemoteException
    {
      return false;
    }
    @Override public android.media.audio.common.AudioAttributes getAttributesForStreamType(int stream) throws android.os.RemoteException
    {
      return null;
    }
    @Override public int getStreamTypeForAttributes(android.media.audio.common.AudioAttributes attributes) throws android.os.RemoteException
    {
      return 0;
    }
    @Override public android.media.AudioProductStrategy[] listAudioProductStrategies() throws android.os.RemoteException
    {
      return null;
    }
    @Override public void setProductStrategiesZoneIdForUserId(int userId, int zoneId) throws android.os.RemoteException
    {
    }
    @Override public void resetProductStrategiesZoneIdForUserId(int userId) throws android.os.RemoteException
    {
    }
    /** product_strategy_t */
    @Override public int getProductStrategyFromAudioAttributes(android.media.audio.common.AudioAttributes aa, boolean fallbackOnDefault) throws android.os.RemoteException
    {
      return 0;
    }
    @Override public android.media.AudioVolumeGroup[] listAudioVolumeGroups() throws android.os.RemoteException
    {
      return null;
    }
    /** volume_group_t */
    @Override public int getVolumeGroupFromAudioAttributes(android.media.audio.common.AudioAttributes aa, boolean fallbackOnDefault) throws android.os.RemoteException
    {
      return 0;
    }
    @Override public void setRttEnabled(boolean enabled) throws android.os.RemoteException
    {
    }
    @Override public boolean isCallScreenModeSupported() throws android.os.RemoteException
    {
      return false;
    }
    @Override public void setDevicesRoleForStrategy(int strategy, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
    {
    }
    @Override public void removeDevicesRoleForStrategy(int strategy, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
    {
    }
    @Override public void clearDevicesRoleForStrategy(int strategy, int role) throws android.os.RemoteException
    {
    }
    @Override public android.media.audio.common.AudioDevice[] getDevicesForRoleAndStrategy(int strategy, int role) throws android.os.RemoteException
    {
      return null;
    }
    @Override public void setDevicesRoleForCapturePreset(int audioSource, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
    {
    }
    @Override public void addDevicesRoleForCapturePreset(int audioSource, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
    {
    }
    @Override public void removeDevicesRoleForCapturePreset(int audioSource, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
    {
    }
    @Override public void clearDevicesRoleForCapturePreset(int audioSource, int role) throws android.os.RemoteException
    {
    }
    @Override public android.media.audio.common.AudioDevice[] getDevicesForRoleAndCapturePreset(int audioSource, int role) throws android.os.RemoteException
    {
      return null;
    }
    @Override public boolean registerSoundTriggerCaptureStateListener(android.media.ICaptureStateListener listener) throws android.os.RemoteException
    {
      return false;
    }
    /**
     * If a spatializer stage effect is present on the platform, this will return an
     * ISpatializer interface (see GetSpatializerResponse,aidl) to control this
     * feature.
     * If no spatializer stage is present, a null interface is returned.
     * The INativeSpatializerCallback passed must not be null.
     * Only one ISpatializer interface can exist at a given time. The native audio policy
     * service will reject the request if an interface was already acquired and previous owner
     * did not die or call ISpatializer.release().
     */
    @Override public android.media.GetSpatializerResponse getSpatializer(android.media.INativeSpatializerCallback callback) throws android.os.RemoteException
    {
      return null;
    }
    /**
     * Queries if some kind of spatialization will be performed if the audio playback context
     * described by the provided arguments is present.
     * The context is made of:
     * - The audio attributes describing the playback use case.
     * - The audio configuration describing the audio format, channels, sampling rate...
     * - The devices describing the sink audio device selected for playback.
     * All arguments are optional and only the specified arguments are used to match against
     * supported criteria. For instance, supplying no argument will tell if spatialization is
     * supported or not in general.
     */
    @Override public boolean canBeSpatialized(android.media.audio.common.AudioAttributes attr, android.media.audio.common.AudioConfig config, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
    {
      return false;
    }
    /**
     * Query how the direct playback is currently supported on the device routed for the given
     * attributes and UID (as routing rules may be registered on UID / User ID)
     */
    @Override public int getDirectPlaybackSupport(android.media.audio.common.AudioAttributes attr, int uid, android.media.audio.common.AudioConfig config) throws android.os.RemoteException
    {
      return 0;
    }
    /**
     * Query audio profiles available for direct playback on the current output device(s)
     * for the specified audio attributes and UID (as routing rules may be registered on
     * UID / User ID).
     */
    @Override public android.media.audio.common.AudioProfile[] getDirectProfilesForAttributes(android.media.audio.common.AudioAttributes attr, int uid) throws android.os.RemoteException
    {
      return null;
    }
    /**
     * Return a list of AudioMixerAttributes that can be used to set preferred mixer attributes
     * for the given device.
     */
    @Override public android.media.AudioMixerAttributesInternal[] getSupportedMixerAttributes(int portId) throws android.os.RemoteException
    {
      return null;
    }
    /**
     * Set preferred mixer attributes for a given device on a given audio attributes.
     * When conflicting requests are received, the last request will be honored.
     * The preferred mixer attributes can only be set when 1) the usage is media, 2) the
     * given device is currently available, 3) the given device is usb device, 4) the given mixer
     * attributes is supported by the given device.
     * 
     * @param attr the audio attributes whose mixer attributes should be set.
     * @param portId the port id of the device to be routed.
     * @param uid the uid of the request client. The uid will be used to recognize the ownership for
     *            the preferred mixer attributes. All the playback with same audio attributes from
     *            the same uid will be attached to the mixer with the preferred attributes if the
     *            playback is routed to the given device.
     * @param mixerAttr the preferred mixer attributes.
     */
    @Override public void setPreferredMixerAttributes(android.media.audio.common.AudioAttributes attr, int portId, int uid, android.media.AudioMixerAttributesInternal mixerAttr) throws android.os.RemoteException
    {
    }
    /**
     * Get preferred mixer attributes for a given device on a given audio attributes.
     * Null will be returned if there is no preferred mixer attributes set or it has
     * been cleared.
     * 
     * @param attr the audio attributes whose mixer attributes should be set.
     * @param portId the port id of the device to be routed.
     */
    @Override public android.media.AudioMixerAttributesInternal getPreferredMixerAttributes(android.media.audio.common.AudioAttributes attr, int portId, int uid) throws android.os.RemoteException
    {
      return null;
    }
    /**
     * Clear preferred mixer attributes for a given device on a given audio attributes that
     * is previously set via setPreferredMixerAttributes.
     * 
     * @param attr the audio attributes whose mixer attributes should be set.
     * @param portId the port id of the device to be routed.
     * @param uid the uid of the request client. The uid is used to identify the ownership for the
     *            preferred mixer attributes. The preferred mixer attributes will only be cleared
     *            if the uid is the same as the owner of current preferred mixer attributes.
     */
    @Override public void clearPreferredMixerAttributes(android.media.audio.common.AudioAttributes attr, int portId, int uid) throws android.os.RemoteException
    {
    }
    /**
     * Get the native permission controller for audioserver, to push package and permission info
     * required to control audio access.
     */
    @Override public com.android.media.permission.INativePermissionController getPermissionController() throws android.os.RemoteException
    {
      return null;
    }
    /** Query mmap policy information. */
    @Override public android.media.audio.common.AudioMMapPolicyInfo[] getMmapPolicyInfos(int policyType) throws android.os.RemoteException
    {
      return null;
    }
    /** Get all devices that support AAudio MMAP. */
    @Override public void getMmapPolicyForDevice(int policyType, android.media.audio.common.AudioMMapPolicyInfo policyInfo) throws android.os.RemoteException
    {
    }
    /** Enable hardening independent of flag or exemption state */
    @Override public void setHardeningOverride(byte hardeningOverride) throws android.os.RemoteException
    {
    }
    /**
     * Returns how flushFromFrame is supported when the playback is created with given
     * audio config and audio attributes.
     */
    @Override public int getFlushFromFrameSupport(android.media.audio.common.AudioConfigBase config, android.media.audio.common.AudioAttributes attributes, int uid, int flags) throws android.os.RemoteException
    {
      return 0;
    }
    /** Returns if mmap path is preferred for pcm offload playback. */
    @Override public boolean useMmapForPcmOffload() throws android.os.RemoteException
    {
      return false;
    }
    @Override
    public android.os.IBinder asBinder() {
      return null;
    }
  }
  /** Local-side IPC implementation stub class. */
  public static abstract class Stub extends android.os.Binder implements android.media.IAudioPolicyService
  {
    /** Construct the stub and attach it to the interface. */
    @SuppressWarnings("this-escape")
    public Stub()
    {
      this.attachInterface(this, DESCRIPTOR);
    }
    /**
     * Cast an IBinder object into an android.media.IAudioPolicyService interface,
     * generating a proxy if needed.
     */
    public static android.media.IAudioPolicyService asInterface(android.os.IBinder obj)
    {
      if ((obj==null)) {
        return null;
      }
      android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
      if (((iin!=null)&&(iin instanceof android.media.IAudioPolicyService))) {
        return ((android.media.IAudioPolicyService)iin);
      }
      return new android.media.IAudioPolicyService.Stub.Proxy(obj);
    }
    @Override public android.os.IBinder asBinder()
    {
      return this;
    }
    @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
    {
      if (code >= android.os.IBinder.FIRST_CALL_TRANSACTION && code <= android.os.IBinder.LAST_CALL_TRANSACTION) {
        data.enforceInterface(DESCRIPTOR);
      }
      switch (code)
      {
        case TRANSACTION_onNewAudioModulesAvailable:
        {
          this.onNewAudioModulesAvailable();
          break;
        }
        case TRANSACTION_setDeviceConnectionState:
        {
          int _arg0;
          _arg0 = data.readInt();
          android.media.audio.common.AudioPort _arg1;
          _arg1 = data.readTypedObject(android.media.audio.common.AudioPort.CREATOR);
          android.media.audio.common.AudioFormatDescription _arg2;
          _arg2 = data.readTypedObject(android.media.audio.common.AudioFormatDescription.CREATOR);
          boolean _arg3;
          _arg3 = data.readBoolean();
          data.enforceNoDataAvail();
          this.setDeviceConnectionState(_arg0, _arg1, _arg2, _arg3);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getDeviceConnectionState:
        {
          android.media.audio.common.AudioDevice _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioDevice.CREATOR);
          data.enforceNoDataAvail();
          int _result = this.getDeviceConnectionState(_arg0);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_handleDeviceConfigChange:
        {
          android.media.audio.common.AudioDevice _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioDevice.CREATOR);
          java.lang.String _arg1;
          _arg1 = data.readString();
          android.media.audio.common.AudioFormatDescription _arg2;
          _arg2 = data.readTypedObject(android.media.audio.common.AudioFormatDescription.CREATOR);
          data.enforceNoDataAvail();
          this.handleDeviceConfigChange(_arg0, _arg1, _arg2);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setPhoneState:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          this.setPhoneState(_arg0, _arg1);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setForceUse:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          this.setForceUse(_arg0, _arg1);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getForceUse:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          int _result = this.getForceUse(_arg0);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_getOutput:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          int _result = this.getOutput(_arg0);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_getOutputForAttr:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          int _arg1;
          _arg1 = data.readInt();
          android.content.AttributionSourceState _arg2;
          _arg2 = data.readTypedObject(android.content.AttributionSourceState.CREATOR);
          android.media.audio.common.AudioConfig _arg3;
          _arg3 = data.readTypedObject(android.media.audio.common.AudioConfig.CREATOR);
          int _arg4;
          _arg4 = data.readInt();
          int[] _arg5;
          _arg5 = data.createIntArray();
          data.enforceNoDataAvail();
          android.media.GetOutputForAttrResponse _result = this.getOutputForAttr(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5);
          reply.writeNoException();
          reply.writeTypedObject(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_startOutput:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          android.media.StartOutputResponse _result = this.startOutput(_arg0);
          reply.writeNoException();
          reply.writeTypedObject(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_stopOutput:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.stopOutput(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_releaseOutput:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.releaseOutput(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_forceReleaseDirectOutput:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.forceReleaseDirectOutput(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getInputForAttr:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          int _arg1;
          _arg1 = data.readInt();
          int _arg2;
          _arg2 = data.readInt();
          int _arg3;
          _arg3 = data.readInt();
          android.content.AttributionSourceState _arg4;
          _arg4 = data.readTypedObject(android.content.AttributionSourceState.CREATOR);
          android.media.audio.common.AudioConfigBase _arg5;
          _arg5 = data.readTypedObject(android.media.audio.common.AudioConfigBase.CREATOR);
          int _arg6;
          _arg6 = data.readInt();
          int _arg7;
          _arg7 = data.readInt();
          data.enforceNoDataAvail();
          android.media.GetInputForAttrResponse _result = this.getInputForAttr(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7);
          reply.writeNoException();
          reply.writeTypedObject(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_startInput:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.startInput(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_stopInput:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.stopInput(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_releaseInput:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.releaseInput(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setDeviceAbsoluteVolumeEnabled:
        {
          android.media.audio.common.AudioDevice _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioDevice.CREATOR);
          boolean _arg1;
          _arg1 = data.readBoolean();
          int _arg2;
          _arg2 = data.readInt();
          data.enforceNoDataAvail();
          this.setDeviceAbsoluteVolumeEnabled(_arg0, _arg1, _arg2);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_initStreamVolume:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          int _arg2;
          _arg2 = data.readInt();
          data.enforceNoDataAvail();
          this.initStreamVolume(_arg0, _arg1, _arg2);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setStreamVolumeIndex:
        {
          int _arg0;
          _arg0 = data.readInt();
          android.media.audio.common.AudioDeviceDescription _arg1;
          _arg1 = data.readTypedObject(android.media.audio.common.AudioDeviceDescription.CREATOR);
          int _arg2;
          _arg2 = data.readInt();
          boolean _arg3;
          _arg3 = data.readBoolean();
          data.enforceNoDataAvail();
          this.setStreamVolumeIndex(_arg0, _arg1, _arg2, _arg3);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getStreamVolumeIndex:
        {
          int _arg0;
          _arg0 = data.readInt();
          android.media.audio.common.AudioDeviceDescription _arg1;
          _arg1 = data.readTypedObject(android.media.audio.common.AudioDeviceDescription.CREATOR);
          data.enforceNoDataAvail();
          int _result = this.getStreamVolumeIndex(_arg0, _arg1);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_setVolumeIndexForAttributes:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          android.media.audio.common.AudioDeviceDescription _arg1;
          _arg1 = data.readTypedObject(android.media.audio.common.AudioDeviceDescription.CREATOR);
          int _arg2;
          _arg2 = data.readInt();
          boolean _arg3;
          _arg3 = data.readBoolean();
          data.enforceNoDataAvail();
          this.setVolumeIndexForAttributes(_arg0, _arg1, _arg2, _arg3);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getVolumeIndexForAttributes:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          android.media.audio.common.AudioDeviceDescription _arg1;
          _arg1 = data.readTypedObject(android.media.audio.common.AudioDeviceDescription.CREATOR);
          data.enforceNoDataAvail();
          int _result = this.getVolumeIndexForAttributes(_arg0, _arg1);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_getMaxVolumeIndexForAttributes:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          data.enforceNoDataAvail();
          int _result = this.getMaxVolumeIndexForAttributes(_arg0);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_getMinVolumeIndexForAttributes:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          data.enforceNoDataAvail();
          int _result = this.getMinVolumeIndexForAttributes(_arg0);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_getMaxVolumeIndexForGroup:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          int _result = this.getMaxVolumeIndexForGroup(_arg0);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_getMinVolumeIndexForGroup:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          int _result = this.getMinVolumeIndexForGroup(_arg0);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_setMaxVolumeIndexForGroup:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          this.setMaxVolumeIndexForGroup(_arg0, _arg1);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setMinVolumeIndexForGroup:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          this.setMinVolumeIndexForGroup(_arg0, _arg1);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setVolumeIndexForGroup:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          android.media.audio.common.AudioDeviceDescription _arg2;
          _arg2 = data.readTypedObject(android.media.audio.common.AudioDeviceDescription.CREATOR);
          int _arg3;
          _arg3 = data.readInt();
          boolean _arg4;
          _arg4 = data.readBoolean();
          data.enforceNoDataAvail();
          this.setVolumeIndexForGroup(_arg0, _arg1, _arg2, _arg3, _arg4);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getVolumeIndexForGroup:
        {
          int _arg0;
          _arg0 = data.readInt();
          android.media.audio.common.AudioDeviceDescription _arg1;
          _arg1 = data.readTypedObject(android.media.audio.common.AudioDeviceDescription.CREATOR);
          data.enforceNoDataAvail();
          int _result = this.getVolumeIndexForGroup(_arg0, _arg1);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_getStrategyForStream:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          int _result = this.getStrategyForStream(_arg0, _arg1);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_getDevicesForAttributes:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          int _arg1;
          _arg1 = data.readInt();
          boolean _arg2;
          _arg2 = data.readBoolean();
          data.enforceNoDataAvail();
          android.media.audio.common.AudioDevice[] _result = this.getDevicesForAttributes(_arg0, _arg1, _arg2);
          reply.writeNoException();
          reply.writeTypedArray(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_getOutputForEffect:
        {
          android.media.EffectDescriptor _arg0;
          _arg0 = data.readTypedObject(android.media.EffectDescriptor.CREATOR);
          data.enforceNoDataAvail();
          int _result = this.getOutputForEffect(_arg0);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_registerEffect:
        {
          android.media.EffectDescriptor _arg0;
          _arg0 = data.readTypedObject(android.media.EffectDescriptor.CREATOR);
          int _arg1;
          _arg1 = data.readInt();
          int _arg2;
          _arg2 = data.readInt();
          int _arg3;
          _arg3 = data.readInt();
          int _arg4;
          _arg4 = data.readInt();
          data.enforceNoDataAvail();
          this.registerEffect(_arg0, _arg1, _arg2, _arg3, _arg4);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_unregisterEffect:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.unregisterEffect(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setEffectEnabled:
        {
          int _arg0;
          _arg0 = data.readInt();
          boolean _arg1;
          _arg1 = data.readBoolean();
          data.enforceNoDataAvail();
          this.setEffectEnabled(_arg0, _arg1);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_moveEffectsToIo:
        {
          int[] _arg0;
          _arg0 = data.createIntArray();
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          this.moveEffectsToIo(_arg0, _arg1);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_isStreamActive:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          boolean _result = this.isStreamActive(_arg0, _arg1);
          reply.writeNoException();
          reply.writeBoolean(_result);
          break;
        }
        case TRANSACTION_isStreamActiveRemotely:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          boolean _result = this.isStreamActiveRemotely(_arg0, _arg1);
          reply.writeNoException();
          reply.writeBoolean(_result);
          break;
        }
        case TRANSACTION_isSourceActive:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          boolean _result = this.isSourceActive(_arg0);
          reply.writeNoException();
          reply.writeBoolean(_result);
          break;
        }
        case TRANSACTION_queryDefaultPreProcessing:
        {
          int _arg0;
          _arg0 = data.readInt();
          android.media.audio.common.Int _arg1;
          _arg1 = data.readTypedObject(android.media.audio.common.Int.CREATOR);
          data.enforceNoDataAvail();
          android.media.EffectDescriptor[] _result = this.queryDefaultPreProcessing(_arg0, _arg1);
          reply.writeNoException();
          reply.writeTypedArray(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          reply.writeTypedObject(_arg1, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_addSourceDefaultEffect:
        {
          android.media.audio.common.AudioUuid _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioUuid.CREATOR);
          java.lang.String _arg1;
          _arg1 = data.readString();
          android.media.audio.common.AudioUuid _arg2;
          _arg2 = data.readTypedObject(android.media.audio.common.AudioUuid.CREATOR);
          int _arg3;
          _arg3 = data.readInt();
          int _arg4;
          _arg4 = data.readInt();
          data.enforceNoDataAvail();
          int _result = this.addSourceDefaultEffect(_arg0, _arg1, _arg2, _arg3, _arg4);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_addStreamDefaultEffect:
        {
          android.media.audio.common.AudioUuid _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioUuid.CREATOR);
          java.lang.String _arg1;
          _arg1 = data.readString();
          android.media.audio.common.AudioUuid _arg2;
          _arg2 = data.readTypedObject(android.media.audio.common.AudioUuid.CREATOR);
          int _arg3;
          _arg3 = data.readInt();
          int _arg4;
          _arg4 = data.readInt();
          data.enforceNoDataAvail();
          int _result = this.addStreamDefaultEffect(_arg0, _arg1, _arg2, _arg3, _arg4);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_removeSourceDefaultEffect:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.removeSourceDefaultEffect(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_removeStreamDefaultEffect:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.removeStreamDefaultEffect(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setSupportedSystemUsages:
        {
          int[] _arg0;
          _arg0 = data.createIntArray();
          data.enforceNoDataAvail();
          this.setSupportedSystemUsages(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setAllowedCapturePolicy:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          this.setAllowedCapturePolicy(_arg0, _arg1);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getOffloadSupport:
        {
          android.media.audio.common.AudioOffloadInfo _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioOffloadInfo.CREATOR);
          data.enforceNoDataAvail();
          int _result = this.getOffloadSupport(_arg0);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_isDirectOutputSupported:
        {
          android.media.audio.common.AudioConfigBase _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioConfigBase.CREATOR);
          android.media.audio.common.AudioAttributes _arg1;
          _arg1 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          data.enforceNoDataAvail();
          boolean _result = this.isDirectOutputSupported(_arg0, _arg1);
          reply.writeNoException();
          reply.writeBoolean(_result);
          break;
        }
        case TRANSACTION_listAudioPorts:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          android.media.audio.common.Int _arg2;
          _arg2 = data.readTypedObject(android.media.audio.common.Int.CREATOR);
          android.media.AudioPortFw[] _arg3;
          int _arg3_length = data.readInt();
          if (_arg3_length > 1000000) {
            throw new android.os.BadParcelableException("Array too large: " + _arg3_length);
          } else if (_arg3_length < 0) {
            _arg3 = null;
          } else {
            _arg3 = new android.media.AudioPortFw[_arg3_length];
          }
          data.enforceNoDataAvail();
          int _result = this.listAudioPorts(_arg0, _arg1, _arg2, _arg3);
          reply.writeNoException();
          reply.writeInt(_result);
          reply.writeTypedObject(_arg2, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          reply.writeTypedArray(_arg3, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_listDeclaredDevicePorts:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          android.media.AudioPortFw[] _result = this.listDeclaredDevicePorts(_arg0);
          reply.writeNoException();
          reply.writeTypedArray(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_getAudioPort:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          android.media.AudioPortFw _result = this.getAudioPort(_arg0);
          reply.writeNoException();
          reply.writeTypedObject(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_createAudioPatch:
        {
          android.media.AudioPatchFw _arg0;
          _arg0 = data.readTypedObject(android.media.AudioPatchFw.CREATOR);
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          int _result = this.createAudioPatch(_arg0, _arg1);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_releaseAudioPatch:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.releaseAudioPatch(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_listAudioPatches:
        {
          android.media.audio.common.Int _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.Int.CREATOR);
          android.media.AudioPatchFw[] _arg1;
          int _arg1_length = data.readInt();
          if (_arg1_length > 1000000) {
            throw new android.os.BadParcelableException("Array too large: " + _arg1_length);
          } else if (_arg1_length < 0) {
            _arg1 = null;
          } else {
            _arg1 = new android.media.AudioPatchFw[_arg1_length];
          }
          data.enforceNoDataAvail();
          int _result = this.listAudioPatches(_arg0, _arg1);
          reply.writeNoException();
          reply.writeInt(_result);
          reply.writeTypedObject(_arg0, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          reply.writeTypedArray(_arg1, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_setAudioPortConfig:
        {
          android.media.AudioPortConfigFw _arg0;
          _arg0 = data.readTypedObject(android.media.AudioPortConfigFw.CREATOR);
          data.enforceNoDataAvail();
          this.setAudioPortConfig(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_registerClient:
        {
          android.media.IAudioPolicyServiceClient _arg0;
          _arg0 = android.media.IAudioPolicyServiceClient.Stub.asInterface(data.readStrongBinder());
          data.enforceNoDataAvail();
          this.registerClient(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setAudioPortCallbacksEnabled:
        {
          boolean _arg0;
          _arg0 = data.readBoolean();
          data.enforceNoDataAvail();
          this.setAudioPortCallbacksEnabled(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setAudioVolumeGroupCallbacksEnabled:
        {
          boolean _arg0;
          _arg0 = data.readBoolean();
          data.enforceNoDataAvail();
          this.setAudioVolumeGroupCallbacksEnabled(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_acquireSoundTriggerSession:
        {
          android.media.SoundTriggerSession _result = this.acquireSoundTriggerSession();
          reply.writeNoException();
          reply.writeTypedObject(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_releaseSoundTriggerSession:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.releaseSoundTriggerSession(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getPhoneState:
        {
          int _result = this.getPhoneState();
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_registerPolicyMixes:
        {
          android.media.AudioMix[] _arg0;
          _arg0 = data.createTypedArray(android.media.AudioMix.CREATOR);
          boolean _arg1;
          _arg1 = data.readBoolean();
          data.enforceNoDataAvail();
          this.registerPolicyMixes(_arg0, _arg1);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getRegisteredPolicyMixes:
        {
          java.util.List<android.media.AudioMix> _result = this.getRegisteredPolicyMixes();
          reply.writeNoException();
          reply.writeTypedList(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_updatePolicyMixes:
        {
          android.media.AudioMixUpdate[] _arg0;
          _arg0 = data.createTypedArray(android.media.AudioMixUpdate.CREATOR);
          data.enforceNoDataAvail();
          this.updatePolicyMixes(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setUidDeviceAffinities:
        {
          int _arg0;
          _arg0 = data.readInt();
          android.media.audio.common.AudioDevice[] _arg1;
          _arg1 = data.createTypedArray(android.media.audio.common.AudioDevice.CREATOR);
          data.enforceNoDataAvail();
          this.setUidDeviceAffinities(_arg0, _arg1);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_removeUidDeviceAffinities:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.removeUidDeviceAffinities(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setUserIdDeviceAffinities:
        {
          int _arg0;
          _arg0 = data.readInt();
          android.media.audio.common.AudioDevice[] _arg1;
          _arg1 = data.createTypedArray(android.media.audio.common.AudioDevice.CREATOR);
          data.enforceNoDataAvail();
          this.setUserIdDeviceAffinities(_arg0, _arg1);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_removeUserIdDeviceAffinities:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.removeUserIdDeviceAffinities(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_startAudioSource:
        {
          android.media.AudioPortConfigFw _arg0;
          _arg0 = data.readTypedObject(android.media.AudioPortConfigFw.CREATOR);
          android.media.audio.common.AudioAttributes _arg1;
          _arg1 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          data.enforceNoDataAvail();
          int _result = this.startAudioSource(_arg0, _arg1);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_stopAudioSource:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.stopAudioSource(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setMasterMono:
        {
          boolean _arg0;
          _arg0 = data.readBoolean();
          data.enforceNoDataAvail();
          this.setMasterMono(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getMasterMono:
        {
          boolean _result = this.getMasterMono();
          reply.writeNoException();
          reply.writeBoolean(_result);
          break;
        }
        case TRANSACTION_getStreamVolumeDB:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          android.media.audio.common.AudioDeviceDescription _arg2;
          _arg2 = data.readTypedObject(android.media.audio.common.AudioDeviceDescription.CREATOR);
          data.enforceNoDataAvail();
          float _result = this.getStreamVolumeDB(_arg0, _arg1, _arg2);
          reply.writeNoException();
          reply.writeFloat(_result);
          break;
        }
        case TRANSACTION_getSurroundFormats:
        {
          android.media.audio.common.Int _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.Int.CREATOR);
          android.media.audio.common.AudioFormatDescription[] _arg1;
          int _arg1_length = data.readInt();
          if (_arg1_length > 1000000) {
            throw new android.os.BadParcelableException("Array too large: " + _arg1_length);
          } else if (_arg1_length < 0) {
            _arg1 = null;
          } else {
            _arg1 = new android.media.audio.common.AudioFormatDescription[_arg1_length];
          }
          boolean[] _arg2;
          int _arg2_length = data.readInt();
          if (_arg2_length > 1000000) {
            throw new android.os.BadParcelableException("Array too large: " + _arg2_length);
          } else if (_arg2_length < 0) {
            _arg2 = null;
          } else {
            _arg2 = new boolean[_arg2_length];
          }
          data.enforceNoDataAvail();
          this.getSurroundFormats(_arg0, _arg1, _arg2);
          reply.writeNoException();
          reply.writeTypedObject(_arg0, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          reply.writeTypedArray(_arg1, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          reply.writeBooleanArray(_arg2);
          break;
        }
        case TRANSACTION_getReportedSurroundFormats:
        {
          android.media.audio.common.Int _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.Int.CREATOR);
          android.media.audio.common.AudioFormatDescription[] _arg1;
          int _arg1_length = data.readInt();
          if (_arg1_length > 1000000) {
            throw new android.os.BadParcelableException("Array too large: " + _arg1_length);
          } else if (_arg1_length < 0) {
            _arg1 = null;
          } else {
            _arg1 = new android.media.audio.common.AudioFormatDescription[_arg1_length];
          }
          data.enforceNoDataAvail();
          this.getReportedSurroundFormats(_arg0, _arg1);
          reply.writeNoException();
          reply.writeTypedObject(_arg0, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          reply.writeTypedArray(_arg1, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_getHwOffloadFormatsSupportedForBluetoothMedia:
        {
          android.media.audio.common.AudioDeviceDescription _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioDeviceDescription.CREATOR);
          data.enforceNoDataAvail();
          android.media.audio.common.AudioFormatDescription[] _result = this.getHwOffloadFormatsSupportedForBluetoothMedia(_arg0);
          reply.writeNoException();
          reply.writeTypedArray(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_setSurroundFormatEnabled:
        {
          android.media.audio.common.AudioFormatDescription _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioFormatDescription.CREATOR);
          boolean _arg1;
          _arg1 = data.readBoolean();
          data.enforceNoDataAvail();
          this.setSurroundFormatEnabled(_arg0, _arg1);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setAssistantServicesUids:
        {
          int[] _arg0;
          _arg0 = data.createIntArray();
          data.enforceNoDataAvail();
          this.setAssistantServicesUids(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setActiveAssistantServicesUids:
        {
          int[] _arg0;
          _arg0 = data.createIntArray();
          data.enforceNoDataAvail();
          this.setActiveAssistantServicesUids(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setA11yServicesUids:
        {
          int[] _arg0;
          _arg0 = data.createIntArray();
          data.enforceNoDataAvail();
          this.setA11yServicesUids(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_setCurrentImeUid:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.setCurrentImeUid(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_isHapticPlaybackSupported:
        {
          boolean _result = this.isHapticPlaybackSupported();
          reply.writeNoException();
          reply.writeBoolean(_result);
          break;
        }
        case TRANSACTION_isUltrasoundSupported:
        {
          boolean _result = this.isUltrasoundSupported();
          reply.writeNoException();
          reply.writeBoolean(_result);
          break;
        }
        case TRANSACTION_isHotwordStreamSupported:
        {
          boolean _arg0;
          _arg0 = data.readBoolean();
          data.enforceNoDataAvail();
          boolean _result = this.isHotwordStreamSupported(_arg0);
          reply.writeNoException();
          reply.writeBoolean(_result);
          break;
        }
        case TRANSACTION_getAttributesForStreamType:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          android.media.audio.common.AudioAttributes _result = this.getAttributesForStreamType(_arg0);
          reply.writeNoException();
          reply.writeTypedObject(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_getStreamTypeForAttributes:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          data.enforceNoDataAvail();
          int _result = this.getStreamTypeForAttributes(_arg0);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_listAudioProductStrategies:
        {
          android.media.AudioProductStrategy[] _result = this.listAudioProductStrategies();
          reply.writeNoException();
          reply.writeTypedArray(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_setProductStrategiesZoneIdForUserId:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          this.setProductStrategiesZoneIdForUserId(_arg0, _arg1);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_resetProductStrategiesZoneIdForUserId:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          this.resetProductStrategiesZoneIdForUserId(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getProductStrategyFromAudioAttributes:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          boolean _arg1;
          _arg1 = data.readBoolean();
          data.enforceNoDataAvail();
          int _result = this.getProductStrategyFromAudioAttributes(_arg0, _arg1);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_listAudioVolumeGroups:
        {
          android.media.AudioVolumeGroup[] _result = this.listAudioVolumeGroups();
          reply.writeNoException();
          reply.writeTypedArray(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_getVolumeGroupFromAudioAttributes:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          boolean _arg1;
          _arg1 = data.readBoolean();
          data.enforceNoDataAvail();
          int _result = this.getVolumeGroupFromAudioAttributes(_arg0, _arg1);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_setRttEnabled:
        {
          boolean _arg0;
          _arg0 = data.readBoolean();
          data.enforceNoDataAvail();
          this.setRttEnabled(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_isCallScreenModeSupported:
        {
          boolean _result = this.isCallScreenModeSupported();
          reply.writeNoException();
          reply.writeBoolean(_result);
          break;
        }
        case TRANSACTION_setDevicesRoleForStrategy:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          android.media.audio.common.AudioDevice[] _arg2;
          _arg2 = data.createTypedArray(android.media.audio.common.AudioDevice.CREATOR);
          data.enforceNoDataAvail();
          this.setDevicesRoleForStrategy(_arg0, _arg1, _arg2);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_removeDevicesRoleForStrategy:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          android.media.audio.common.AudioDevice[] _arg2;
          _arg2 = data.createTypedArray(android.media.audio.common.AudioDevice.CREATOR);
          data.enforceNoDataAvail();
          this.removeDevicesRoleForStrategy(_arg0, _arg1, _arg2);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_clearDevicesRoleForStrategy:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          this.clearDevicesRoleForStrategy(_arg0, _arg1);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getDevicesForRoleAndStrategy:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          android.media.audio.common.AudioDevice[] _result = this.getDevicesForRoleAndStrategy(_arg0, _arg1);
          reply.writeNoException();
          reply.writeTypedArray(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_setDevicesRoleForCapturePreset:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          android.media.audio.common.AudioDevice[] _arg2;
          _arg2 = data.createTypedArray(android.media.audio.common.AudioDevice.CREATOR);
          data.enforceNoDataAvail();
          this.setDevicesRoleForCapturePreset(_arg0, _arg1, _arg2);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_addDevicesRoleForCapturePreset:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          android.media.audio.common.AudioDevice[] _arg2;
          _arg2 = data.createTypedArray(android.media.audio.common.AudioDevice.CREATOR);
          data.enforceNoDataAvail();
          this.addDevicesRoleForCapturePreset(_arg0, _arg1, _arg2);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_removeDevicesRoleForCapturePreset:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          android.media.audio.common.AudioDevice[] _arg2;
          _arg2 = data.createTypedArray(android.media.audio.common.AudioDevice.CREATOR);
          data.enforceNoDataAvail();
          this.removeDevicesRoleForCapturePreset(_arg0, _arg1, _arg2);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_clearDevicesRoleForCapturePreset:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          this.clearDevicesRoleForCapturePreset(_arg0, _arg1);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getDevicesForRoleAndCapturePreset:
        {
          int _arg0;
          _arg0 = data.readInt();
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          android.media.audio.common.AudioDevice[] _result = this.getDevicesForRoleAndCapturePreset(_arg0, _arg1);
          reply.writeNoException();
          reply.writeTypedArray(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_registerSoundTriggerCaptureStateListener:
        {
          android.media.ICaptureStateListener _arg0;
          _arg0 = android.media.ICaptureStateListener.Stub.asInterface(data.readStrongBinder());
          data.enforceNoDataAvail();
          boolean _result = this.registerSoundTriggerCaptureStateListener(_arg0);
          reply.writeNoException();
          reply.writeBoolean(_result);
          break;
        }
        case TRANSACTION_getSpatializer:
        {
          android.media.INativeSpatializerCallback _arg0;
          _arg0 = android.media.INativeSpatializerCallback.Stub.asInterface(data.readStrongBinder());
          data.enforceNoDataAvail();
          android.media.GetSpatializerResponse _result = this.getSpatializer(_arg0);
          reply.writeNoException();
          reply.writeTypedObject(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_canBeSpatialized:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          android.media.audio.common.AudioConfig _arg1;
          _arg1 = data.readTypedObject(android.media.audio.common.AudioConfig.CREATOR);
          android.media.audio.common.AudioDevice[] _arg2;
          _arg2 = data.createTypedArray(android.media.audio.common.AudioDevice.CREATOR);
          data.enforceNoDataAvail();
          boolean _result = this.canBeSpatialized(_arg0, _arg1, _arg2);
          reply.writeNoException();
          reply.writeBoolean(_result);
          break;
        }
        case TRANSACTION_getDirectPlaybackSupport:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          int _arg1;
          _arg1 = data.readInt();
          android.media.audio.common.AudioConfig _arg2;
          _arg2 = data.readTypedObject(android.media.audio.common.AudioConfig.CREATOR);
          data.enforceNoDataAvail();
          int _result = this.getDirectPlaybackSupport(_arg0, _arg1, _arg2);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_getDirectProfilesForAttributes:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          int _arg1;
          _arg1 = data.readInt();
          data.enforceNoDataAvail();
          android.media.audio.common.AudioProfile[] _result = this.getDirectProfilesForAttributes(_arg0, _arg1);
          reply.writeNoException();
          reply.writeTypedArray(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_getSupportedMixerAttributes:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          android.media.AudioMixerAttributesInternal[] _result = this.getSupportedMixerAttributes(_arg0);
          reply.writeNoException();
          reply.writeTypedArray(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_setPreferredMixerAttributes:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          int _arg1;
          _arg1 = data.readInt();
          int _arg2;
          _arg2 = data.readInt();
          android.media.AudioMixerAttributesInternal _arg3;
          _arg3 = data.readTypedObject(android.media.AudioMixerAttributesInternal.CREATOR);
          data.enforceNoDataAvail();
          this.setPreferredMixerAttributes(_arg0, _arg1, _arg2, _arg3);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getPreferredMixerAttributes:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          int _arg1;
          _arg1 = data.readInt();
          int _arg2;
          _arg2 = data.readInt();
          data.enforceNoDataAvail();
          android.media.AudioMixerAttributesInternal _result = this.getPreferredMixerAttributes(_arg0, _arg1, _arg2);
          reply.writeNoException();
          reply.writeTypedObject(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_clearPreferredMixerAttributes:
        {
          android.media.audio.common.AudioAttributes _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          int _arg1;
          _arg1 = data.readInt();
          int _arg2;
          _arg2 = data.readInt();
          data.enforceNoDataAvail();
          this.clearPreferredMixerAttributes(_arg0, _arg1, _arg2);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getPermissionController:
        {
          com.android.media.permission.INativePermissionController _result = this.getPermissionController();
          reply.writeNoException();
          reply.writeStrongInterface(_result);
          break;
        }
        case TRANSACTION_getMmapPolicyInfos:
        {
          int _arg0;
          _arg0 = data.readInt();
          data.enforceNoDataAvail();
          android.media.audio.common.AudioMMapPolicyInfo[] _result = this.getMmapPolicyInfos(_arg0);
          reply.writeNoException();
          reply.writeTypedArray(_result, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_getMmapPolicyForDevice:
        {
          int _arg0;
          _arg0 = data.readInt();
          android.media.audio.common.AudioMMapPolicyInfo _arg1;
          _arg1 = data.readTypedObject(android.media.audio.common.AudioMMapPolicyInfo.CREATOR);
          data.enforceNoDataAvail();
          this.getMmapPolicyForDevice(_arg0, _arg1);
          reply.writeNoException();
          reply.writeTypedObject(_arg1, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
          break;
        }
        case TRANSACTION_setHardeningOverride:
        {
          byte _arg0;
          _arg0 = data.readByte();
          data.enforceNoDataAvail();
          this.setHardeningOverride(_arg0);
          reply.writeNoException();
          break;
        }
        case TRANSACTION_getFlushFromFrameSupport:
        {
          android.media.audio.common.AudioConfigBase _arg0;
          _arg0 = data.readTypedObject(android.media.audio.common.AudioConfigBase.CREATOR);
          android.media.audio.common.AudioAttributes _arg1;
          _arg1 = data.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
          int _arg2;
          _arg2 = data.readInt();
          int _arg3;
          _arg3 = data.readInt();
          data.enforceNoDataAvail();
          int _result = this.getFlushFromFrameSupport(_arg0, _arg1, _arg2, _arg3);
          reply.writeNoException();
          reply.writeInt(_result);
          break;
        }
        case TRANSACTION_useMmapForPcmOffload:
        {
          boolean _result = this.useMmapForPcmOffload();
          reply.writeNoException();
          reply.writeBoolean(_result);
          break;
        }
        default:
        {
          return super.onTransact(code, data, reply, flags);
        }
      }
      return true;
    }
    private static final class Proxy implements android.media.IAudioPolicyService
    {
      private android.os.IBinder mRemote;
      Proxy(android.os.IBinder remote)
      {
        mRemote = remote;
      }
      @Override public android.os.IBinder asBinder()
      {
        return mRemote;
      }
      public final java.lang.String getInterfaceDescriptor()
      {
        return DESCRIPTOR;
      }
      @Override public void onNewAudioModulesAvailable() throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          boolean _status = mRemote.transact(Stub.TRANSACTION_onNewAudioModulesAvailable, _data, null, android.os.IBinder.FLAG_ONEWAY);
        }
        finally {
          _data.recycle();
        }
      }
      @Override public void setDeviceConnectionState(int state, android.media.audio.common.AudioPort port, android.media.audio.common.AudioFormatDescription encodedFormat, boolean deviceSwitch) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(state);
          _data.writeTypedObject(port, 0);
          _data.writeTypedObject(encodedFormat, 0);
          _data.writeBoolean(deviceSwitch);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setDeviceConnectionState, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public int getDeviceConnectionState(android.media.audio.common.AudioDevice device) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(device, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getDeviceConnectionState, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void handleDeviceConfigChange(android.media.audio.common.AudioDevice device, java.lang.String deviceName, android.media.audio.common.AudioFormatDescription encodedFormat) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(device, 0);
          _data.writeString(deviceName);
          _data.writeTypedObject(encodedFormat, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_handleDeviceConfigChange, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setPhoneState(int state, int uid) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(state);
          _data.writeInt(uid);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setPhoneState, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setForceUse(int usage, int config) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(usage);
          _data.writeInt(config);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setForceUse, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public int getForceUse(int usage) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(usage);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getForceUse, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /** audio_io_handle_t */
      @Override public int getOutput(int stream) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(stream);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getOutput, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public android.media.GetOutputForAttrResponse getOutputForAttr(android.media.audio.common.AudioAttributes attr, int session, android.content.AttributionSourceState attributionSource, android.media.audio.common.AudioConfig config, int flags, int[] selectedDeviceIds) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.GetOutputForAttrResponse _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(attr, 0);
          _data.writeInt(session);
          _data.writeTypedObject(attributionSource, 0);
          _data.writeTypedObject(config, 0);
          _data.writeInt(flags);
          _data.writeIntArray(selectedDeviceIds);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getOutputForAttr, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readTypedObject(android.media.GetOutputForAttrResponse.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public android.media.StartOutputResponse startOutput(int portId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.StartOutputResponse _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(portId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_startOutput, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readTypedObject(android.media.StartOutputResponse.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void stopOutput(int portId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(portId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_stopOutput, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void releaseOutput(int portId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(portId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_releaseOutput, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void forceReleaseDirectOutput(int output) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(output);
          boolean _status = mRemote.transact(Stub.TRANSACTION_forceReleaseDirectOutput, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public android.media.GetInputForAttrResponse getInputForAttr(android.media.audio.common.AudioAttributes attr, int input, int riid, int session, android.content.AttributionSourceState attributionSource, android.media.audio.common.AudioConfigBase config, int flags, int selectedDeviceId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.GetInputForAttrResponse _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(attr, 0);
          _data.writeInt(input);
          _data.writeInt(riid);
          _data.writeInt(session);
          _data.writeTypedObject(attributionSource, 0);
          _data.writeTypedObject(config, 0);
          _data.writeInt(flags);
          _data.writeInt(selectedDeviceId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getInputForAttr, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readTypedObject(android.media.GetInputForAttrResponse.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void startInput(int portId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(portId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_startInput, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void stopInput(int portId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(portId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_stopInput, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void releaseInput(int portId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(portId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_releaseInput, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setDeviceAbsoluteVolumeEnabled(android.media.audio.common.AudioDevice device, boolean enabled, int streamToDriveAbs) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(device, 0);
          _data.writeBoolean(enabled);
          _data.writeInt(streamToDriveAbs);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setDeviceAbsoluteVolumeEnabled, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void initStreamVolume(int stream, int indexMin, int indexMax) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(stream);
          _data.writeInt(indexMin);
          _data.writeInt(indexMax);
          boolean _status = mRemote.transact(Stub.TRANSACTION_initStreamVolume, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setStreamVolumeIndex(int stream, android.media.audio.common.AudioDeviceDescription device, int index, boolean muted) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(stream);
          _data.writeTypedObject(device, 0);
          _data.writeInt(index);
          _data.writeBoolean(muted);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setStreamVolumeIndex, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public int getStreamVolumeIndex(int stream, android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(stream);
          _data.writeTypedObject(device, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getStreamVolumeIndex, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void setVolumeIndexForAttributes(android.media.audio.common.AudioAttributes attr, android.media.audio.common.AudioDeviceDescription device, int index, boolean muted) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(attr, 0);
          _data.writeTypedObject(device, 0);
          _data.writeInt(index);
          _data.writeBoolean(muted);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setVolumeIndexForAttributes, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public int getVolumeIndexForAttributes(android.media.audio.common.AudioAttributes attr, android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(attr, 0);
          _data.writeTypedObject(device, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getVolumeIndexForAttributes, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public int getMaxVolumeIndexForAttributes(android.media.audio.common.AudioAttributes attr) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(attr, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getMaxVolumeIndexForAttributes, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public int getMinVolumeIndexForAttributes(android.media.audio.common.AudioAttributes attr) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(attr, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getMinVolumeIndexForAttributes, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public int getMaxVolumeIndexForGroup(int groupId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(groupId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getMaxVolumeIndexForGroup, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public int getMinVolumeIndexForGroup(int groupId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(groupId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getMinVolumeIndexForGroup, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void setMaxVolumeIndexForGroup(int groupId, int maxIndex) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(groupId);
          _data.writeInt(maxIndex);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setMaxVolumeIndexForGroup, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setMinVolumeIndexForGroup(int groupId, int minIndex) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(groupId);
          _data.writeInt(minIndex);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setMinVolumeIndexForGroup, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      /**
       * Set the volume for the given group id, device and index. UID is given as the attenuation
       * depends on the device. Routing rules may be registered for a given UID / User ID. Thus,
       * AudioPolicy will re-check the device for which the attenuation shall be taken.
       * TODO (b/434866735) merge per attribute/per stream API into this API
       */
      @Override public void setVolumeIndexForGroup(int groupId, int uid, android.media.audio.common.AudioDeviceDescription device, int index, boolean muted) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(groupId);
          _data.writeInt(uid);
          _data.writeTypedObject(device, 0);
          _data.writeInt(index);
          _data.writeBoolean(muted);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setVolumeIndexForGroup, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      /**
       * TODO (b/434866735) merge per attribute/per stream API into this API and add the Min / Max
       * getter API.
       */
      @Override public int getVolumeIndexForGroup(int groupId, android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(groupId);
          _data.writeTypedObject(device, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getVolumeIndexForGroup, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /** product_strategy_t */
      @Override public int getStrategyForStream(int stream, int uid) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(stream);
          _data.writeInt(uid);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getStrategyForStream, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /**
       * Requests the devices that would be used for routing (if forVolume is false) or for volume
       * operations for the given attributes and UID (as routing rules may be registered on
       * UID / User ID)
       */
      @Override public android.media.audio.common.AudioDevice[] getDevicesForAttributes(android.media.audio.common.AudioAttributes attr, int uid, boolean forVolume) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.audio.common.AudioDevice[] _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(attr, 0);
          _data.writeInt(uid);
          _data.writeBoolean(forVolume);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getDevicesForAttributes, _data, _reply, 0);
          _reply.readException();
          _result = _reply.createTypedArray(android.media.audio.common.AudioDevice.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /** audio_io_handle_t */
      @Override public int getOutputForEffect(android.media.EffectDescriptor desc) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(desc, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getOutputForEffect, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void registerEffect(android.media.EffectDescriptor desc, int io, int strategy, int session, int id) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(desc, 0);
          _data.writeInt(io);
          _data.writeInt(strategy);
          _data.writeInt(session);
          _data.writeInt(id);
          boolean _status = mRemote.transact(Stub.TRANSACTION_registerEffect, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void unregisterEffect(int id) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(id);
          boolean _status = mRemote.transact(Stub.TRANSACTION_unregisterEffect, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setEffectEnabled(int id, boolean enabled) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(id);
          _data.writeBoolean(enabled);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setEffectEnabled, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void moveEffectsToIo(int[] ids, int io) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeIntArray(ids);
          _data.writeInt(io);
          boolean _status = mRemote.transact(Stub.TRANSACTION_moveEffectsToIo, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public boolean isStreamActive(int stream, int inPastMs) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        boolean _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(stream);
          _data.writeInt(inPastMs);
          boolean _status = mRemote.transact(Stub.TRANSACTION_isStreamActive, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readBoolean();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public boolean isStreamActiveRemotely(int stream, int inPastMs) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        boolean _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(stream);
          _data.writeInt(inPastMs);
          boolean _status = mRemote.transact(Stub.TRANSACTION_isStreamActiveRemotely, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readBoolean();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public boolean isSourceActive(int source) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        boolean _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(source);
          boolean _status = mRemote.transact(Stub.TRANSACTION_isSourceActive, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readBoolean();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /**
       * On input, count represents the maximum length of the returned array.
       * On output, count is the total number of elements, which may be larger than the array size.
       * Passing '0' on input and inspecting the value on output is a common way of determining the
       * number of elements without actually retrieving them.
       */
      @Override public android.media.EffectDescriptor[] queryDefaultPreProcessing(int audioSession, android.media.audio.common.Int count) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.EffectDescriptor[] _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(audioSession);
          _data.writeTypedObject(count, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_queryDefaultPreProcessing, _data, _reply, 0);
          _reply.readException();
          _result = _reply.createTypedArray(android.media.EffectDescriptor.CREATOR);
          if ((0!=_reply.readInt())) {
            count.readFromParcel(_reply);
          }
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /** audio_unique_id_t */
      @Override public int addSourceDefaultEffect(android.media.audio.common.AudioUuid type, java.lang.String opPackageName, android.media.audio.common.AudioUuid uuid, int priority, int source) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(type, 0);
          _data.writeString(opPackageName);
          _data.writeTypedObject(uuid, 0);
          _data.writeInt(priority);
          _data.writeInt(source);
          boolean _status = mRemote.transact(Stub.TRANSACTION_addSourceDefaultEffect, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /** audio_unique_id_t */
      @Override public int addStreamDefaultEffect(android.media.audio.common.AudioUuid type, java.lang.String opPackageName, android.media.audio.common.AudioUuid uuid, int priority, int usage) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(type, 0);
          _data.writeString(opPackageName);
          _data.writeTypedObject(uuid, 0);
          _data.writeInt(priority);
          _data.writeInt(usage);
          boolean _status = mRemote.transact(Stub.TRANSACTION_addStreamDefaultEffect, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void removeSourceDefaultEffect(int id) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(id);
          boolean _status = mRemote.transact(Stub.TRANSACTION_removeSourceDefaultEffect, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void removeStreamDefaultEffect(int id) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(id);
          boolean _status = mRemote.transact(Stub.TRANSACTION_removeStreamDefaultEffect, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setSupportedSystemUsages(int[] systemUsages) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeIntArray(systemUsages);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setSupportedSystemUsages, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setAllowedCapturePolicy(int uid, int capturePolicy) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(uid);
          _data.writeInt(capturePolicy);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setAllowedCapturePolicy, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      /**
       * Check if offload is possible for given format, stream type, sample rate,
       * bit rate, duration, video and streaming or offload property is enabled.
       */
      @Override public int getOffloadSupport(android.media.audio.common.AudioOffloadInfo info) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(info, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getOffloadSupport, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /** Check if direct playback is possible for given format, sample rate, channel mask and flags. */
      @Override public boolean isDirectOutputSupported(android.media.audio.common.AudioConfigBase config, android.media.audio.common.AudioAttributes attributes) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        boolean _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(config, 0);
          _data.writeTypedObject(attributes, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_isDirectOutputSupported, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readBoolean();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /**
       * List currently attached audio ports and their attributes. Returns the generation.
       * The generation is incremented each time when anything changes in the ports
       * configuration.
       * 
       * On input, count represents the maximum length of the returned array.
       * On output, count is the total number of elements, which may be larger than the array size.
       * Passing '0' on input and inspecting the value on output is a common way of determining the
       * number of elements without actually retrieving them.
       */
      @Override public int listAudioPorts(int role, int type, android.media.audio.common.Int count, android.media.AudioPortFw[] ports) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(role);
          _data.writeInt(type);
          _data.writeTypedObject(count, 0);
          _data.writeInt(ports.length);
          boolean _status = mRemote.transact(Stub.TRANSACTION_listAudioPorts, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
          if ((0!=_reply.readInt())) {
            count.readFromParcel(_reply);
          }
          _reply.readTypedArray(ports, android.media.AudioPortFw.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /**
       * List all device ports declared in the configuration (including currently detached ones)
       * 'role' can be 'NONE' to get both input and output devices,
       * 'SINK' for output devices, and 'SOURCE' for input devices.
       */
      @Override public android.media.AudioPortFw[] listDeclaredDevicePorts(int role) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.AudioPortFw[] _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(role);
          boolean _status = mRemote.transact(Stub.TRANSACTION_listDeclaredDevicePorts, _data, _reply, 0);
          _reply.readException();
          _result = _reply.createTypedArray(android.media.AudioPortFw.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /** Get attributes for the audio port with the given id (AudioPort.hal.id field). */
      @Override public android.media.AudioPortFw getAudioPort(int portId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.AudioPortFw _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(portId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getAudioPort, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readTypedObject(android.media.AudioPortFw.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /**
       * Create an audio patch between several source and sink ports.
       * The handle argument is used when updating an existing patch.
       */
      /** audio_patch_handle_t */
      @Override public int createAudioPatch(android.media.AudioPatchFw patch, int handle) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(patch, 0);
          _data.writeInt(handle);
          boolean _status = mRemote.transact(Stub.TRANSACTION_createAudioPatch, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /** Release an audio patch. */
      @Override public void releaseAudioPatch(int handle) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(handle);
          boolean _status = mRemote.transact(Stub.TRANSACTION_releaseAudioPatch, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      /**
       * List existing audio patches. Returns the generation.
       * 
       * On input, count represents the maximum length of the returned array.
       * On output, count is the total number of elements, which may be larger than the array size.
       * Passing '0' on input and inspecting the value on output is a common way of determining the
       * number of elements without actually retrieving them.
       */
      @Override public int listAudioPatches(android.media.audio.common.Int count, android.media.AudioPatchFw[] patches) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(count, 0);
          _data.writeInt(patches.length);
          boolean _status = mRemote.transact(Stub.TRANSACTION_listAudioPatches, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
          if ((0!=_reply.readInt())) {
            count.readFromParcel(_reply);
          }
          _reply.readTypedArray(patches, android.media.AudioPatchFw.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /** Set audio port configuration. */
      @Override public void setAudioPortConfig(android.media.AudioPortConfigFw config) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(config, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setAudioPortConfig, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void registerClient(android.media.IAudioPolicyServiceClient client) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeStrongInterface(client);
          boolean _status = mRemote.transact(Stub.TRANSACTION_registerClient, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setAudioPortCallbacksEnabled(boolean enabled) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeBoolean(enabled);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setAudioPortCallbacksEnabled, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setAudioVolumeGroupCallbacksEnabled(boolean enabled) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeBoolean(enabled);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setAudioVolumeGroupCallbacksEnabled, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public android.media.SoundTriggerSession acquireSoundTriggerSession() throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.SoundTriggerSession _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          boolean _status = mRemote.transact(Stub.TRANSACTION_acquireSoundTriggerSession, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readTypedObject(android.media.SoundTriggerSession.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void releaseSoundTriggerSession(int session) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(session);
          boolean _status = mRemote.transact(Stub.TRANSACTION_releaseSoundTriggerSession, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public int getPhoneState() throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getPhoneState, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void registerPolicyMixes(android.media.AudioMix[] mixes, boolean registration) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedArray(mixes, 0);
          _data.writeBoolean(registration);
          boolean _status = mRemote.transact(Stub.TRANSACTION_registerPolicyMixes, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public java.util.List<android.media.AudioMix> getRegisteredPolicyMixes() throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        java.util.List<android.media.AudioMix> _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getRegisteredPolicyMixes, _data, _reply, 0);
          _reply.readException();
          _result = _reply.createTypedArrayList(android.media.AudioMix.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void updatePolicyMixes(android.media.AudioMixUpdate[] updates) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedArray(updates, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_updatePolicyMixes, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setUidDeviceAffinities(int uid, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(uid);
          _data.writeTypedArray(devices, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setUidDeviceAffinities, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void removeUidDeviceAffinities(int uid) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(uid);
          boolean _status = mRemote.transact(Stub.TRANSACTION_removeUidDeviceAffinities, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setUserIdDeviceAffinities(int userId, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(userId);
          _data.writeTypedArray(devices, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setUserIdDeviceAffinities, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void removeUserIdDeviceAffinities(int userId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(userId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_removeUserIdDeviceAffinities, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      /** audio_port_handle_t */
      @Override public int startAudioSource(android.media.AudioPortConfigFw source, android.media.audio.common.AudioAttributes attributes) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(source, 0);
          _data.writeTypedObject(attributes, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_startAudioSource, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void stopAudioSource(int portId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(portId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_stopAudioSource, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setMasterMono(boolean mono) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeBoolean(mono);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setMasterMono, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public boolean getMasterMono() throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        boolean _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getMasterMono, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readBoolean();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public float getStreamVolumeDB(int stream, int index, android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        float _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(stream);
          _data.writeInt(index);
          _data.writeTypedObject(device, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getStreamVolumeDB, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readFloat();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /**
       * Populates supported surround formats and their enabled state in formats and formatsEnabled.
       * 
       * On input, count represents the maximum length of the returned array.
       * On output, count is the total number of elements, which may be larger than the array size.
       * Passing '0' on input and inspecting the value on output is a common way of determining the
       * number of elements without actually retrieving them.
       */
      @Override public void getSurroundFormats(android.media.audio.common.Int count, android.media.audio.common.AudioFormatDescription[] formats, boolean[] formatsEnabled) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(count, 0);
          _data.writeInt(formats.length);
          _data.writeInt(formatsEnabled.length);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getSurroundFormats, _data, _reply, 0);
          _reply.readException();
          if ((0!=_reply.readInt())) {
            count.readFromParcel(_reply);
          }
          _reply.readTypedArray(formats, android.media.audio.common.AudioFormatDescription.CREATOR);
          _reply.readBooleanArray(formatsEnabled);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      /**
       * Populates the surround formats reported by the HDMI devices in formats.
       * 
       * On input, count represents the maximum length of the returned array.
       * On output, count is the total number of elements, which may be larger than the array size.
       * Passing '0' on input and inspecting the value on output is a common way of determining the
       * number of elements without actually retrieving them.
       */
      @Override public void getReportedSurroundFormats(android.media.audio.common.Int count, android.media.audio.common.AudioFormatDescription[] formats) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(count, 0);
          _data.writeInt(formats.length);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getReportedSurroundFormats, _data, _reply, 0);
          _reply.readException();
          if ((0!=_reply.readInt())) {
            count.readFromParcel(_reply);
          }
          _reply.readTypedArray(formats, android.media.audio.common.AudioFormatDescription.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public android.media.audio.common.AudioFormatDescription[] getHwOffloadFormatsSupportedForBluetoothMedia(android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.audio.common.AudioFormatDescription[] _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(device, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getHwOffloadFormatsSupportedForBluetoothMedia, _data, _reply, 0);
          _reply.readException();
          _result = _reply.createTypedArray(android.media.audio.common.AudioFormatDescription.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void setSurroundFormatEnabled(android.media.audio.common.AudioFormatDescription audioFormat, boolean enabled) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(audioFormat, 0);
          _data.writeBoolean(enabled);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setSurroundFormatEnabled, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setAssistantServicesUids(int[] uids) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeIntArray(uids);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setAssistantServicesUids, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setActiveAssistantServicesUids(int[] activeUids) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeIntArray(activeUids);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setActiveAssistantServicesUids, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setA11yServicesUids(int[] uids) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeIntArray(uids);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setA11yServicesUids, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void setCurrentImeUid(int uid) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(uid);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setCurrentImeUid, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public boolean isHapticPlaybackSupported() throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        boolean _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          boolean _status = mRemote.transact(Stub.TRANSACTION_isHapticPlaybackSupported, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readBoolean();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public boolean isUltrasoundSupported() throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        boolean _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          boolean _status = mRemote.transact(Stub.TRANSACTION_isUltrasoundSupported, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readBoolean();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /**
       * Queries if there is hardware support for requesting audio capture content from
       * the DSP hotword pipeline.
       * 
       * @param lookbackAudio true if additionally querying for the ability to capture audio
       *                      from the pipeline prior to capture stream open.
       */
      @Override public boolean isHotwordStreamSupported(boolean lookbackAudio) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        boolean _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeBoolean(lookbackAudio);
          boolean _status = mRemote.transact(Stub.TRANSACTION_isHotwordStreamSupported, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readBoolean();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public android.media.audio.common.AudioAttributes getAttributesForStreamType(int stream) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.audio.common.AudioAttributes _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(stream);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getAttributesForStreamType, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readTypedObject(android.media.audio.common.AudioAttributes.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public int getStreamTypeForAttributes(android.media.audio.common.AudioAttributes attributes) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(attributes, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getStreamTypeForAttributes, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public android.media.AudioProductStrategy[] listAudioProductStrategies() throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.AudioProductStrategy[] _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          boolean _status = mRemote.transact(Stub.TRANSACTION_listAudioProductStrategies, _data, _reply, 0);
          _reply.readException();
          _result = _reply.createTypedArray(android.media.AudioProductStrategy.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void setProductStrategiesZoneIdForUserId(int userId, int zoneId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(userId);
          _data.writeInt(zoneId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setProductStrategiesZoneIdForUserId, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void resetProductStrategiesZoneIdForUserId(int userId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(userId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_resetProductStrategiesZoneIdForUserId, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      /** product_strategy_t */
      @Override public int getProductStrategyFromAudioAttributes(android.media.audio.common.AudioAttributes aa, boolean fallbackOnDefault) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(aa, 0);
          _data.writeBoolean(fallbackOnDefault);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getProductStrategyFromAudioAttributes, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public android.media.AudioVolumeGroup[] listAudioVolumeGroups() throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.AudioVolumeGroup[] _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          boolean _status = mRemote.transact(Stub.TRANSACTION_listAudioVolumeGroups, _data, _reply, 0);
          _reply.readException();
          _result = _reply.createTypedArray(android.media.AudioVolumeGroup.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /** volume_group_t */
      @Override public int getVolumeGroupFromAudioAttributes(android.media.audio.common.AudioAttributes aa, boolean fallbackOnDefault) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(aa, 0);
          _data.writeBoolean(fallbackOnDefault);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getVolumeGroupFromAudioAttributes, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void setRttEnabled(boolean enabled) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeBoolean(enabled);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setRttEnabled, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public boolean isCallScreenModeSupported() throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        boolean _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          boolean _status = mRemote.transact(Stub.TRANSACTION_isCallScreenModeSupported, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readBoolean();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void setDevicesRoleForStrategy(int strategy, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(strategy);
          _data.writeInt(role);
          _data.writeTypedArray(devices, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setDevicesRoleForStrategy, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void removeDevicesRoleForStrategy(int strategy, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(strategy);
          _data.writeInt(role);
          _data.writeTypedArray(devices, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_removeDevicesRoleForStrategy, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void clearDevicesRoleForStrategy(int strategy, int role) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(strategy);
          _data.writeInt(role);
          boolean _status = mRemote.transact(Stub.TRANSACTION_clearDevicesRoleForStrategy, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public android.media.audio.common.AudioDevice[] getDevicesForRoleAndStrategy(int strategy, int role) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.audio.common.AudioDevice[] _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(strategy);
          _data.writeInt(role);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getDevicesForRoleAndStrategy, _data, _reply, 0);
          _reply.readException();
          _result = _reply.createTypedArray(android.media.audio.common.AudioDevice.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public void setDevicesRoleForCapturePreset(int audioSource, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(audioSource);
          _data.writeInt(role);
          _data.writeTypedArray(devices, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setDevicesRoleForCapturePreset, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void addDevicesRoleForCapturePreset(int audioSource, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(audioSource);
          _data.writeInt(role);
          _data.writeTypedArray(devices, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_addDevicesRoleForCapturePreset, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void removeDevicesRoleForCapturePreset(int audioSource, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(audioSource);
          _data.writeInt(role);
          _data.writeTypedArray(devices, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_removeDevicesRoleForCapturePreset, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public void clearDevicesRoleForCapturePreset(int audioSource, int role) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(audioSource);
          _data.writeInt(role);
          boolean _status = mRemote.transact(Stub.TRANSACTION_clearDevicesRoleForCapturePreset, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      @Override public android.media.audio.common.AudioDevice[] getDevicesForRoleAndCapturePreset(int audioSource, int role) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.audio.common.AudioDevice[] _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(audioSource);
          _data.writeInt(role);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getDevicesForRoleAndCapturePreset, _data, _reply, 0);
          _reply.readException();
          _result = _reply.createTypedArray(android.media.audio.common.AudioDevice.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      @Override public boolean registerSoundTriggerCaptureStateListener(android.media.ICaptureStateListener listener) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        boolean _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeStrongInterface(listener);
          boolean _status = mRemote.transact(Stub.TRANSACTION_registerSoundTriggerCaptureStateListener, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readBoolean();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /**
       * If a spatializer stage effect is present on the platform, this will return an
       * ISpatializer interface (see GetSpatializerResponse,aidl) to control this
       * feature.
       * If no spatializer stage is present, a null interface is returned.
       * The INativeSpatializerCallback passed must not be null.
       * Only one ISpatializer interface can exist at a given time. The native audio policy
       * service will reject the request if an interface was already acquired and previous owner
       * did not die or call ISpatializer.release().
       */
      @Override public android.media.GetSpatializerResponse getSpatializer(android.media.INativeSpatializerCallback callback) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.GetSpatializerResponse _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeStrongInterface(callback);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getSpatializer, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readTypedObject(android.media.GetSpatializerResponse.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /**
       * Queries if some kind of spatialization will be performed if the audio playback context
       * described by the provided arguments is present.
       * The context is made of:
       * - The audio attributes describing the playback use case.
       * - The audio configuration describing the audio format, channels, sampling rate...
       * - The devices describing the sink audio device selected for playback.
       * All arguments are optional and only the specified arguments are used to match against
       * supported criteria. For instance, supplying no argument will tell if spatialization is
       * supported or not in general.
       */
      @Override public boolean canBeSpatialized(android.media.audio.common.AudioAttributes attr, android.media.audio.common.AudioConfig config, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        boolean _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(attr, 0);
          _data.writeTypedObject(config, 0);
          _data.writeTypedArray(devices, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_canBeSpatialized, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readBoolean();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /**
       * Query how the direct playback is currently supported on the device routed for the given
       * attributes and UID (as routing rules may be registered on UID / User ID)
       */
      @Override public int getDirectPlaybackSupport(android.media.audio.common.AudioAttributes attr, int uid, android.media.audio.common.AudioConfig config) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(attr, 0);
          _data.writeInt(uid);
          _data.writeTypedObject(config, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getDirectPlaybackSupport, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /**
       * Query audio profiles available for direct playback on the current output device(s)
       * for the specified audio attributes and UID (as routing rules may be registered on
       * UID / User ID).
       */
      @Override public android.media.audio.common.AudioProfile[] getDirectProfilesForAttributes(android.media.audio.common.AudioAttributes attr, int uid) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.audio.common.AudioProfile[] _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(attr, 0);
          _data.writeInt(uid);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getDirectProfilesForAttributes, _data, _reply, 0);
          _reply.readException();
          _result = _reply.createTypedArray(android.media.audio.common.AudioProfile.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /**
       * Return a list of AudioMixerAttributes that can be used to set preferred mixer attributes
       * for the given device.
       */
      @Override public android.media.AudioMixerAttributesInternal[] getSupportedMixerAttributes(int portId) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.AudioMixerAttributesInternal[] _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(portId);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getSupportedMixerAttributes, _data, _reply, 0);
          _reply.readException();
          _result = _reply.createTypedArray(android.media.AudioMixerAttributesInternal.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /**
       * Set preferred mixer attributes for a given device on a given audio attributes.
       * When conflicting requests are received, the last request will be honored.
       * The preferred mixer attributes can only be set when 1) the usage is media, 2) the
       * given device is currently available, 3) the given device is usb device, 4) the given mixer
       * attributes is supported by the given device.
       * 
       * @param attr the audio attributes whose mixer attributes should be set.
       * @param portId the port id of the device to be routed.
       * @param uid the uid of the request client. The uid will be used to recognize the ownership for
       *            the preferred mixer attributes. All the playback with same audio attributes from
       *            the same uid will be attached to the mixer with the preferred attributes if the
       *            playback is routed to the given device.
       * @param mixerAttr the preferred mixer attributes.
       */
      @Override public void setPreferredMixerAttributes(android.media.audio.common.AudioAttributes attr, int portId, int uid, android.media.AudioMixerAttributesInternal mixerAttr) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(attr, 0);
          _data.writeInt(portId);
          _data.writeInt(uid);
          _data.writeTypedObject(mixerAttr, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setPreferredMixerAttributes, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      /**
       * Get preferred mixer attributes for a given device on a given audio attributes.
       * Null will be returned if there is no preferred mixer attributes set or it has
       * been cleared.
       * 
       * @param attr the audio attributes whose mixer attributes should be set.
       * @param portId the port id of the device to be routed.
       */
      @Override public android.media.AudioMixerAttributesInternal getPreferredMixerAttributes(android.media.audio.common.AudioAttributes attr, int portId, int uid) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.AudioMixerAttributesInternal _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(attr, 0);
          _data.writeInt(portId);
          _data.writeInt(uid);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getPreferredMixerAttributes, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readTypedObject(android.media.AudioMixerAttributesInternal.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /**
       * Clear preferred mixer attributes for a given device on a given audio attributes that
       * is previously set via setPreferredMixerAttributes.
       * 
       * @param attr the audio attributes whose mixer attributes should be set.
       * @param portId the port id of the device to be routed.
       * @param uid the uid of the request client. The uid is used to identify the ownership for the
       *            preferred mixer attributes. The preferred mixer attributes will only be cleared
       *            if the uid is the same as the owner of current preferred mixer attributes.
       */
      @Override public void clearPreferredMixerAttributes(android.media.audio.common.AudioAttributes attr, int portId, int uid) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(attr, 0);
          _data.writeInt(portId);
          _data.writeInt(uid);
          boolean _status = mRemote.transact(Stub.TRANSACTION_clearPreferredMixerAttributes, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      /**
       * Get the native permission controller for audioserver, to push package and permission info
       * required to control audio access.
       */
      @Override public com.android.media.permission.INativePermissionController getPermissionController() throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        com.android.media.permission.INativePermissionController _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getPermissionController, _data, _reply, 0);
          _reply.readException();
          _result = com.android.media.permission.INativePermissionController.Stub.asInterface(_reply.readStrongBinder());
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /** Query mmap policy information. */
      @Override public android.media.audio.common.AudioMMapPolicyInfo[] getMmapPolicyInfos(int policyType) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        android.media.audio.common.AudioMMapPolicyInfo[] _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(policyType);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getMmapPolicyInfos, _data, _reply, 0);
          _reply.readException();
          _result = _reply.createTypedArray(android.media.audio.common.AudioMMapPolicyInfo.CREATOR);
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /** Get all devices that support AAudio MMAP. */
      @Override public void getMmapPolicyForDevice(int policyType, android.media.audio.common.AudioMMapPolicyInfo policyInfo) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(policyType);
          _data.writeTypedObject(policyInfo, 0);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getMmapPolicyForDevice, _data, _reply, 0);
          _reply.readException();
          if ((0!=_reply.readInt())) {
            policyInfo.readFromParcel(_reply);
          }
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      /** Enable hardening independent of flag or exemption state */
      @Override public void setHardeningOverride(byte hardeningOverride) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeByte(hardeningOverride);
          boolean _status = mRemote.transact(Stub.TRANSACTION_setHardeningOverride, _data, _reply, 0);
          _reply.readException();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
      }
      /**
       * Returns how flushFromFrame is supported when the playback is created with given
       * audio config and audio attributes.
       */
      @Override public int getFlushFromFrameSupport(android.media.audio.common.AudioConfigBase config, android.media.audio.common.AudioAttributes attributes, int uid, int flags) throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        int _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeTypedObject(config, 0);
          _data.writeTypedObject(attributes, 0);
          _data.writeInt(uid);
          _data.writeInt(flags);
          boolean _status = mRemote.transact(Stub.TRANSACTION_getFlushFromFrameSupport, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readInt();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
      /** Returns if mmap path is preferred for pcm offload playback. */
      @Override public boolean useMmapForPcmOffload() throws android.os.RemoteException
      {
        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
        android.os.Parcel _reply = android.os.Parcel.obtain();
        boolean _result;
        try {
          _data.writeInterfaceToken(DESCRIPTOR);
          boolean _status = mRemote.transact(Stub.TRANSACTION_useMmapForPcmOffload, _data, _reply, 0);
          _reply.readException();
          _result = _reply.readBoolean();
        }
        finally {
          _reply.recycle();
          _data.recycle();
        }
        return _result;
      }
    }
    static final int TRANSACTION_onNewAudioModulesAvailable = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
    static final int TRANSACTION_setDeviceConnectionState = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);
    static final int TRANSACTION_getDeviceConnectionState = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2);
    static final int TRANSACTION_handleDeviceConfigChange = (android.os.IBinder.FIRST_CALL_TRANSACTION + 3);
    static final int TRANSACTION_setPhoneState = (android.os.IBinder.FIRST_CALL_TRANSACTION + 4);
    static final int TRANSACTION_setForceUse = (android.os.IBinder.FIRST_CALL_TRANSACTION + 5);
    static final int TRANSACTION_getForceUse = (android.os.IBinder.FIRST_CALL_TRANSACTION + 6);
    static final int TRANSACTION_getOutput = (android.os.IBinder.FIRST_CALL_TRANSACTION + 7);
    static final int TRANSACTION_getOutputForAttr = (android.os.IBinder.FIRST_CALL_TRANSACTION + 8);
    static final int TRANSACTION_startOutput = (android.os.IBinder.FIRST_CALL_TRANSACTION + 9);
    static final int TRANSACTION_stopOutput = (android.os.IBinder.FIRST_CALL_TRANSACTION + 10);
    static final int TRANSACTION_releaseOutput = (android.os.IBinder.FIRST_CALL_TRANSACTION + 11);
    static final int TRANSACTION_forceReleaseDirectOutput = (android.os.IBinder.FIRST_CALL_TRANSACTION + 12);
    static final int TRANSACTION_getInputForAttr = (android.os.IBinder.FIRST_CALL_TRANSACTION + 13);
    static final int TRANSACTION_startInput = (android.os.IBinder.FIRST_CALL_TRANSACTION + 14);
    static final int TRANSACTION_stopInput = (android.os.IBinder.FIRST_CALL_TRANSACTION + 15);
    static final int TRANSACTION_releaseInput = (android.os.IBinder.FIRST_CALL_TRANSACTION + 16);
    static final int TRANSACTION_setDeviceAbsoluteVolumeEnabled = (android.os.IBinder.FIRST_CALL_TRANSACTION + 17);
    static final int TRANSACTION_initStreamVolume = (android.os.IBinder.FIRST_CALL_TRANSACTION + 18);
    static final int TRANSACTION_setStreamVolumeIndex = (android.os.IBinder.FIRST_CALL_TRANSACTION + 19);
    static final int TRANSACTION_getStreamVolumeIndex = (android.os.IBinder.FIRST_CALL_TRANSACTION + 20);
    static final int TRANSACTION_setVolumeIndexForAttributes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 21);
    static final int TRANSACTION_getVolumeIndexForAttributes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 22);
    static final int TRANSACTION_getMaxVolumeIndexForAttributes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 23);
    static final int TRANSACTION_getMinVolumeIndexForAttributes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 24);
    static final int TRANSACTION_getMaxVolumeIndexForGroup = (android.os.IBinder.FIRST_CALL_TRANSACTION + 25);
    static final int TRANSACTION_getMinVolumeIndexForGroup = (android.os.IBinder.FIRST_CALL_TRANSACTION + 26);
    static final int TRANSACTION_setMaxVolumeIndexForGroup = (android.os.IBinder.FIRST_CALL_TRANSACTION + 27);
    static final int TRANSACTION_setMinVolumeIndexForGroup = (android.os.IBinder.FIRST_CALL_TRANSACTION + 28);
    static final int TRANSACTION_setVolumeIndexForGroup = (android.os.IBinder.FIRST_CALL_TRANSACTION + 29);
    static final int TRANSACTION_getVolumeIndexForGroup = (android.os.IBinder.FIRST_CALL_TRANSACTION + 30);
    static final int TRANSACTION_getStrategyForStream = (android.os.IBinder.FIRST_CALL_TRANSACTION + 31);
    static final int TRANSACTION_getDevicesForAttributes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 32);
    static final int TRANSACTION_getOutputForEffect = (android.os.IBinder.FIRST_CALL_TRANSACTION + 33);
    static final int TRANSACTION_registerEffect = (android.os.IBinder.FIRST_CALL_TRANSACTION + 34);
    static final int TRANSACTION_unregisterEffect = (android.os.IBinder.FIRST_CALL_TRANSACTION + 35);
    static final int TRANSACTION_setEffectEnabled = (android.os.IBinder.FIRST_CALL_TRANSACTION + 36);
    static final int TRANSACTION_moveEffectsToIo = (android.os.IBinder.FIRST_CALL_TRANSACTION + 37);
    static final int TRANSACTION_isStreamActive = (android.os.IBinder.FIRST_CALL_TRANSACTION + 38);
    static final int TRANSACTION_isStreamActiveRemotely = (android.os.IBinder.FIRST_CALL_TRANSACTION + 39);
    static final int TRANSACTION_isSourceActive = (android.os.IBinder.FIRST_CALL_TRANSACTION + 40);
    static final int TRANSACTION_queryDefaultPreProcessing = (android.os.IBinder.FIRST_CALL_TRANSACTION + 41);
    static final int TRANSACTION_addSourceDefaultEffect = (android.os.IBinder.FIRST_CALL_TRANSACTION + 42);
    static final int TRANSACTION_addStreamDefaultEffect = (android.os.IBinder.FIRST_CALL_TRANSACTION + 43);
    static final int TRANSACTION_removeSourceDefaultEffect = (android.os.IBinder.FIRST_CALL_TRANSACTION + 44);
    static final int TRANSACTION_removeStreamDefaultEffect = (android.os.IBinder.FIRST_CALL_TRANSACTION + 45);
    static final int TRANSACTION_setSupportedSystemUsages = (android.os.IBinder.FIRST_CALL_TRANSACTION + 46);
    static final int TRANSACTION_setAllowedCapturePolicy = (android.os.IBinder.FIRST_CALL_TRANSACTION + 47);
    static final int TRANSACTION_getOffloadSupport = (android.os.IBinder.FIRST_CALL_TRANSACTION + 48);
    static final int TRANSACTION_isDirectOutputSupported = (android.os.IBinder.FIRST_CALL_TRANSACTION + 49);
    static final int TRANSACTION_listAudioPorts = (android.os.IBinder.FIRST_CALL_TRANSACTION + 50);
    static final int TRANSACTION_listDeclaredDevicePorts = (android.os.IBinder.FIRST_CALL_TRANSACTION + 51);
    static final int TRANSACTION_getAudioPort = (android.os.IBinder.FIRST_CALL_TRANSACTION + 52);
    static final int TRANSACTION_createAudioPatch = (android.os.IBinder.FIRST_CALL_TRANSACTION + 53);
    static final int TRANSACTION_releaseAudioPatch = (android.os.IBinder.FIRST_CALL_TRANSACTION + 54);
    static final int TRANSACTION_listAudioPatches = (android.os.IBinder.FIRST_CALL_TRANSACTION + 55);
    static final int TRANSACTION_setAudioPortConfig = (android.os.IBinder.FIRST_CALL_TRANSACTION + 56);
    static final int TRANSACTION_registerClient = (android.os.IBinder.FIRST_CALL_TRANSACTION + 57);
    static final int TRANSACTION_setAudioPortCallbacksEnabled = (android.os.IBinder.FIRST_CALL_TRANSACTION + 58);
    static final int TRANSACTION_setAudioVolumeGroupCallbacksEnabled = (android.os.IBinder.FIRST_CALL_TRANSACTION + 59);
    static final int TRANSACTION_acquireSoundTriggerSession = (android.os.IBinder.FIRST_CALL_TRANSACTION + 60);
    static final int TRANSACTION_releaseSoundTriggerSession = (android.os.IBinder.FIRST_CALL_TRANSACTION + 61);
    static final int TRANSACTION_getPhoneState = (android.os.IBinder.FIRST_CALL_TRANSACTION + 62);
    static final int TRANSACTION_registerPolicyMixes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 63);
    static final int TRANSACTION_getRegisteredPolicyMixes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 64);
    static final int TRANSACTION_updatePolicyMixes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 65);
    static final int TRANSACTION_setUidDeviceAffinities = (android.os.IBinder.FIRST_CALL_TRANSACTION + 66);
    static final int TRANSACTION_removeUidDeviceAffinities = (android.os.IBinder.FIRST_CALL_TRANSACTION + 67);
    static final int TRANSACTION_setUserIdDeviceAffinities = (android.os.IBinder.FIRST_CALL_TRANSACTION + 68);
    static final int TRANSACTION_removeUserIdDeviceAffinities = (android.os.IBinder.FIRST_CALL_TRANSACTION + 69);
    static final int TRANSACTION_startAudioSource = (android.os.IBinder.FIRST_CALL_TRANSACTION + 70);
    static final int TRANSACTION_stopAudioSource = (android.os.IBinder.FIRST_CALL_TRANSACTION + 71);
    static final int TRANSACTION_setMasterMono = (android.os.IBinder.FIRST_CALL_TRANSACTION + 72);
    static final int TRANSACTION_getMasterMono = (android.os.IBinder.FIRST_CALL_TRANSACTION + 73);
    static final int TRANSACTION_getStreamVolumeDB = (android.os.IBinder.FIRST_CALL_TRANSACTION + 74);
    static final int TRANSACTION_getSurroundFormats = (android.os.IBinder.FIRST_CALL_TRANSACTION + 75);
    static final int TRANSACTION_getReportedSurroundFormats = (android.os.IBinder.FIRST_CALL_TRANSACTION + 76);
    static final int TRANSACTION_getHwOffloadFormatsSupportedForBluetoothMedia = (android.os.IBinder.FIRST_CALL_TRANSACTION + 77);
    static final int TRANSACTION_setSurroundFormatEnabled = (android.os.IBinder.FIRST_CALL_TRANSACTION + 78);
    static final int TRANSACTION_setAssistantServicesUids = (android.os.IBinder.FIRST_CALL_TRANSACTION + 79);
    static final int TRANSACTION_setActiveAssistantServicesUids = (android.os.IBinder.FIRST_CALL_TRANSACTION + 80);
    static final int TRANSACTION_setA11yServicesUids = (android.os.IBinder.FIRST_CALL_TRANSACTION + 81);
    static final int TRANSACTION_setCurrentImeUid = (android.os.IBinder.FIRST_CALL_TRANSACTION + 82);
    static final int TRANSACTION_isHapticPlaybackSupported = (android.os.IBinder.FIRST_CALL_TRANSACTION + 83);
    static final int TRANSACTION_isUltrasoundSupported = (android.os.IBinder.FIRST_CALL_TRANSACTION + 84);
    static final int TRANSACTION_isHotwordStreamSupported = (android.os.IBinder.FIRST_CALL_TRANSACTION + 85);
    static final int TRANSACTION_getAttributesForStreamType = (android.os.IBinder.FIRST_CALL_TRANSACTION + 86);
    static final int TRANSACTION_getStreamTypeForAttributes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 87);
    static final int TRANSACTION_listAudioProductStrategies = (android.os.IBinder.FIRST_CALL_TRANSACTION + 88);
    static final int TRANSACTION_setProductStrategiesZoneIdForUserId = (android.os.IBinder.FIRST_CALL_TRANSACTION + 89);
    static final int TRANSACTION_resetProductStrategiesZoneIdForUserId = (android.os.IBinder.FIRST_CALL_TRANSACTION + 90);
    static final int TRANSACTION_getProductStrategyFromAudioAttributes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 91);
    static final int TRANSACTION_listAudioVolumeGroups = (android.os.IBinder.FIRST_CALL_TRANSACTION + 92);
    static final int TRANSACTION_getVolumeGroupFromAudioAttributes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 93);
    static final int TRANSACTION_setRttEnabled = (android.os.IBinder.FIRST_CALL_TRANSACTION + 94);
    static final int TRANSACTION_isCallScreenModeSupported = (android.os.IBinder.FIRST_CALL_TRANSACTION + 95);
    static final int TRANSACTION_setDevicesRoleForStrategy = (android.os.IBinder.FIRST_CALL_TRANSACTION + 96);
    static final int TRANSACTION_removeDevicesRoleForStrategy = (android.os.IBinder.FIRST_CALL_TRANSACTION + 97);
    static final int TRANSACTION_clearDevicesRoleForStrategy = (android.os.IBinder.FIRST_CALL_TRANSACTION + 98);
    static final int TRANSACTION_getDevicesForRoleAndStrategy = (android.os.IBinder.FIRST_CALL_TRANSACTION + 99);
    static final int TRANSACTION_setDevicesRoleForCapturePreset = (android.os.IBinder.FIRST_CALL_TRANSACTION + 100);
    static final int TRANSACTION_addDevicesRoleForCapturePreset = (android.os.IBinder.FIRST_CALL_TRANSACTION + 101);
    static final int TRANSACTION_removeDevicesRoleForCapturePreset = (android.os.IBinder.FIRST_CALL_TRANSACTION + 102);
    static final int TRANSACTION_clearDevicesRoleForCapturePreset = (android.os.IBinder.FIRST_CALL_TRANSACTION + 103);
    static final int TRANSACTION_getDevicesForRoleAndCapturePreset = (android.os.IBinder.FIRST_CALL_TRANSACTION + 104);
    static final int TRANSACTION_registerSoundTriggerCaptureStateListener = (android.os.IBinder.FIRST_CALL_TRANSACTION + 105);
    static final int TRANSACTION_getSpatializer = (android.os.IBinder.FIRST_CALL_TRANSACTION + 106);
    static final int TRANSACTION_canBeSpatialized = (android.os.IBinder.FIRST_CALL_TRANSACTION + 107);
    static final int TRANSACTION_getDirectPlaybackSupport = (android.os.IBinder.FIRST_CALL_TRANSACTION + 108);
    static final int TRANSACTION_getDirectProfilesForAttributes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 109);
    static final int TRANSACTION_getSupportedMixerAttributes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 110);
    static final int TRANSACTION_setPreferredMixerAttributes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 111);
    static final int TRANSACTION_getPreferredMixerAttributes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 112);
    static final int TRANSACTION_clearPreferredMixerAttributes = (android.os.IBinder.FIRST_CALL_TRANSACTION + 113);
    static final int TRANSACTION_getPermissionController = (android.os.IBinder.FIRST_CALL_TRANSACTION + 114);
    static final int TRANSACTION_getMmapPolicyInfos = (android.os.IBinder.FIRST_CALL_TRANSACTION + 115);
    static final int TRANSACTION_getMmapPolicyForDevice = (android.os.IBinder.FIRST_CALL_TRANSACTION + 116);
    static final int TRANSACTION_setHardeningOverride = (android.os.IBinder.FIRST_CALL_TRANSACTION + 117);
    static final int TRANSACTION_getFlushFromFrameSupport = (android.os.IBinder.FIRST_CALL_TRANSACTION + 118);
    static final int TRANSACTION_useMmapForPcmOffload = (android.os.IBinder.FIRST_CALL_TRANSACTION + 119);
  }
  /** @hide */
  public static final java.lang.String DESCRIPTOR = "android.media.IAudioPolicyService";
  public void onNewAudioModulesAvailable() throws android.os.RemoteException;
  public void setDeviceConnectionState(int state, android.media.audio.common.AudioPort port, android.media.audio.common.AudioFormatDescription encodedFormat, boolean deviceSwitch) throws android.os.RemoteException;
  public int getDeviceConnectionState(android.media.audio.common.AudioDevice device) throws android.os.RemoteException;
  public void handleDeviceConfigChange(android.media.audio.common.AudioDevice device, java.lang.String deviceName, android.media.audio.common.AudioFormatDescription encodedFormat) throws android.os.RemoteException;
  public void setPhoneState(int state, int uid) throws android.os.RemoteException;
  public void setForceUse(int usage, int config) throws android.os.RemoteException;
  public int getForceUse(int usage) throws android.os.RemoteException;
  /** audio_io_handle_t */
  public int getOutput(int stream) throws android.os.RemoteException;
  public android.media.GetOutputForAttrResponse getOutputForAttr(android.media.audio.common.AudioAttributes attr, int session, android.content.AttributionSourceState attributionSource, android.media.audio.common.AudioConfig config, int flags, int[] selectedDeviceIds) throws android.os.RemoteException;
  public android.media.StartOutputResponse startOutput(int portId) throws android.os.RemoteException;
  public void stopOutput(int portId) throws android.os.RemoteException;
  public void releaseOutput(int portId) throws android.os.RemoteException;
  public void forceReleaseDirectOutput(int output) throws android.os.RemoteException;
  public android.media.GetInputForAttrResponse getInputForAttr(android.media.audio.common.AudioAttributes attr, int input, int riid, int session, android.content.AttributionSourceState attributionSource, android.media.audio.common.AudioConfigBase config, int flags, int selectedDeviceId) throws android.os.RemoteException;
  public void startInput(int portId) throws android.os.RemoteException;
  public void stopInput(int portId) throws android.os.RemoteException;
  public void releaseInput(int portId) throws android.os.RemoteException;
  public void setDeviceAbsoluteVolumeEnabled(android.media.audio.common.AudioDevice device, boolean enabled, int streamToDriveAbs) throws android.os.RemoteException;
  public void initStreamVolume(int stream, int indexMin, int indexMax) throws android.os.RemoteException;
  public void setStreamVolumeIndex(int stream, android.media.audio.common.AudioDeviceDescription device, int index, boolean muted) throws android.os.RemoteException;
  public int getStreamVolumeIndex(int stream, android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException;
  public void setVolumeIndexForAttributes(android.media.audio.common.AudioAttributes attr, android.media.audio.common.AudioDeviceDescription device, int index, boolean muted) throws android.os.RemoteException;
  public int getVolumeIndexForAttributes(android.media.audio.common.AudioAttributes attr, android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException;
  public int getMaxVolumeIndexForAttributes(android.media.audio.common.AudioAttributes attr) throws android.os.RemoteException;
  public int getMinVolumeIndexForAttributes(android.media.audio.common.AudioAttributes attr) throws android.os.RemoteException;
  public int getMaxVolumeIndexForGroup(int groupId) throws android.os.RemoteException;
  public int getMinVolumeIndexForGroup(int groupId) throws android.os.RemoteException;
  public void setMaxVolumeIndexForGroup(int groupId, int maxIndex) throws android.os.RemoteException;
  public void setMinVolumeIndexForGroup(int groupId, int minIndex) throws android.os.RemoteException;
  /**
   * Set the volume for the given group id, device and index. UID is given as the attenuation
   * depends on the device. Routing rules may be registered for a given UID / User ID. Thus,
   * AudioPolicy will re-check the device for which the attenuation shall be taken.
   * TODO (b/434866735) merge per attribute/per stream API into this API
   */
  public void setVolumeIndexForGroup(int groupId, int uid, android.media.audio.common.AudioDeviceDescription device, int index, boolean muted) throws android.os.RemoteException;
  /**
   * TODO (b/434866735) merge per attribute/per stream API into this API and add the Min / Max
   * getter API.
   */
  public int getVolumeIndexForGroup(int groupId, android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException;
  /** product_strategy_t */
  public int getStrategyForStream(int stream, int uid) throws android.os.RemoteException;
  /**
   * Requests the devices that would be used for routing (if forVolume is false) or for volume
   * operations for the given attributes and UID (as routing rules may be registered on
   * UID / User ID)
   */
  public android.media.audio.common.AudioDevice[] getDevicesForAttributes(android.media.audio.common.AudioAttributes attr, int uid, boolean forVolume) throws android.os.RemoteException;
  /** audio_io_handle_t */
  public int getOutputForEffect(android.media.EffectDescriptor desc) throws android.os.RemoteException;
  public void registerEffect(android.media.EffectDescriptor desc, int io, int strategy, int session, int id) throws android.os.RemoteException;
  public void unregisterEffect(int id) throws android.os.RemoteException;
  public void setEffectEnabled(int id, boolean enabled) throws android.os.RemoteException;
  public void moveEffectsToIo(int[] ids, int io) throws android.os.RemoteException;
  public boolean isStreamActive(int stream, int inPastMs) throws android.os.RemoteException;
  public boolean isStreamActiveRemotely(int stream, int inPastMs) throws android.os.RemoteException;
  public boolean isSourceActive(int source) throws android.os.RemoteException;
  /**
   * On input, count represents the maximum length of the returned array.
   * On output, count is the total number of elements, which may be larger than the array size.
   * Passing '0' on input and inspecting the value on output is a common way of determining the
   * number of elements without actually retrieving them.
   */
  public android.media.EffectDescriptor[] queryDefaultPreProcessing(int audioSession, android.media.audio.common.Int count) throws android.os.RemoteException;
  /** audio_unique_id_t */
  public int addSourceDefaultEffect(android.media.audio.common.AudioUuid type, java.lang.String opPackageName, android.media.audio.common.AudioUuid uuid, int priority, int source) throws android.os.RemoteException;
  /** audio_unique_id_t */
  public int addStreamDefaultEffect(android.media.audio.common.AudioUuid type, java.lang.String opPackageName, android.media.audio.common.AudioUuid uuid, int priority, int usage) throws android.os.RemoteException;
  public void removeSourceDefaultEffect(int id) throws android.os.RemoteException;
  public void removeStreamDefaultEffect(int id) throws android.os.RemoteException;
  public void setSupportedSystemUsages(int[] systemUsages) throws android.os.RemoteException;
  public void setAllowedCapturePolicy(int uid, int capturePolicy) throws android.os.RemoteException;
  /**
   * Check if offload is possible for given format, stream type, sample rate,
   * bit rate, duration, video and streaming or offload property is enabled.
   */
  public int getOffloadSupport(android.media.audio.common.AudioOffloadInfo info) throws android.os.RemoteException;
  /** Check if direct playback is possible for given format, sample rate, channel mask and flags. */
  public boolean isDirectOutputSupported(android.media.audio.common.AudioConfigBase config, android.media.audio.common.AudioAttributes attributes) throws android.os.RemoteException;
  /**
   * List currently attached audio ports and their attributes. Returns the generation.
   * The generation is incremented each time when anything changes in the ports
   * configuration.
   * 
   * On input, count represents the maximum length of the returned array.
   * On output, count is the total number of elements, which may be larger than the array size.
   * Passing '0' on input and inspecting the value on output is a common way of determining the
   * number of elements without actually retrieving them.
   */
  public int listAudioPorts(int role, int type, android.media.audio.common.Int count, android.media.AudioPortFw[] ports) throws android.os.RemoteException;
  /**
   * List all device ports declared in the configuration (including currently detached ones)
   * 'role' can be 'NONE' to get both input and output devices,
   * 'SINK' for output devices, and 'SOURCE' for input devices.
   */
  public android.media.AudioPortFw[] listDeclaredDevicePorts(int role) throws android.os.RemoteException;
  /** Get attributes for the audio port with the given id (AudioPort.hal.id field). */
  public android.media.AudioPortFw getAudioPort(int portId) throws android.os.RemoteException;
  /**
   * Create an audio patch between several source and sink ports.
   * The handle argument is used when updating an existing patch.
   */
  /** audio_patch_handle_t */
  public int createAudioPatch(android.media.AudioPatchFw patch, int handle) throws android.os.RemoteException;
  /** Release an audio patch. */
  public void releaseAudioPatch(int handle) throws android.os.RemoteException;
  /**
   * List existing audio patches. Returns the generation.
   * 
   * On input, count represents the maximum length of the returned array.
   * On output, count is the total number of elements, which may be larger than the array size.
   * Passing '0' on input and inspecting the value on output is a common way of determining the
   * number of elements without actually retrieving them.
   */
  public int listAudioPatches(android.media.audio.common.Int count, android.media.AudioPatchFw[] patches) throws android.os.RemoteException;
  /** Set audio port configuration. */
  public void setAudioPortConfig(android.media.AudioPortConfigFw config) throws android.os.RemoteException;
  public void registerClient(android.media.IAudioPolicyServiceClient client) throws android.os.RemoteException;
  public void setAudioPortCallbacksEnabled(boolean enabled) throws android.os.RemoteException;
  public void setAudioVolumeGroupCallbacksEnabled(boolean enabled) throws android.os.RemoteException;
  public android.media.SoundTriggerSession acquireSoundTriggerSession() throws android.os.RemoteException;
  public void releaseSoundTriggerSession(int session) throws android.os.RemoteException;
  public int getPhoneState() throws android.os.RemoteException;
  public void registerPolicyMixes(android.media.AudioMix[] mixes, boolean registration) throws android.os.RemoteException;
  public java.util.List<android.media.AudioMix> getRegisteredPolicyMixes() throws android.os.RemoteException;
  public void updatePolicyMixes(android.media.AudioMixUpdate[] updates) throws android.os.RemoteException;
  public void setUidDeviceAffinities(int uid, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException;
  public void removeUidDeviceAffinities(int uid) throws android.os.RemoteException;
  public void setUserIdDeviceAffinities(int userId, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException;
  public void removeUserIdDeviceAffinities(int userId) throws android.os.RemoteException;
  /** audio_port_handle_t */
  public int startAudioSource(android.media.AudioPortConfigFw source, android.media.audio.common.AudioAttributes attributes) throws android.os.RemoteException;
  public void stopAudioSource(int portId) throws android.os.RemoteException;
  public void setMasterMono(boolean mono) throws android.os.RemoteException;
  public boolean getMasterMono() throws android.os.RemoteException;
  public float getStreamVolumeDB(int stream, int index, android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException;
  /**
   * Populates supported surround formats and their enabled state in formats and formatsEnabled.
   * 
   * On input, count represents the maximum length of the returned array.
   * On output, count is the total number of elements, which may be larger than the array size.
   * Passing '0' on input and inspecting the value on output is a common way of determining the
   * number of elements without actually retrieving them.
   */
  public void getSurroundFormats(android.media.audio.common.Int count, android.media.audio.common.AudioFormatDescription[] formats, boolean[] formatsEnabled) throws android.os.RemoteException;
  /**
   * Populates the surround formats reported by the HDMI devices in formats.
   * 
   * On input, count represents the maximum length of the returned array.
   * On output, count is the total number of elements, which may be larger than the array size.
   * Passing '0' on input and inspecting the value on output is a common way of determining the
   * number of elements without actually retrieving them.
   */
  public void getReportedSurroundFormats(android.media.audio.common.Int count, android.media.audio.common.AudioFormatDescription[] formats) throws android.os.RemoteException;
  public android.media.audio.common.AudioFormatDescription[] getHwOffloadFormatsSupportedForBluetoothMedia(android.media.audio.common.AudioDeviceDescription device) throws android.os.RemoteException;
  public void setSurroundFormatEnabled(android.media.audio.common.AudioFormatDescription audioFormat, boolean enabled) throws android.os.RemoteException;
  public void setAssistantServicesUids(int[] uids) throws android.os.RemoteException;
  public void setActiveAssistantServicesUids(int[] activeUids) throws android.os.RemoteException;
  public void setA11yServicesUids(int[] uids) throws android.os.RemoteException;
  public void setCurrentImeUid(int uid) throws android.os.RemoteException;
  public boolean isHapticPlaybackSupported() throws android.os.RemoteException;
  public boolean isUltrasoundSupported() throws android.os.RemoteException;
  /**
   * Queries if there is hardware support for requesting audio capture content from
   * the DSP hotword pipeline.
   * 
   * @param lookbackAudio true if additionally querying for the ability to capture audio
   *                      from the pipeline prior to capture stream open.
   */
  public boolean isHotwordStreamSupported(boolean lookbackAudio) throws android.os.RemoteException;
  public android.media.audio.common.AudioAttributes getAttributesForStreamType(int stream) throws android.os.RemoteException;
  public int getStreamTypeForAttributes(android.media.audio.common.AudioAttributes attributes) throws android.os.RemoteException;
  public android.media.AudioProductStrategy[] listAudioProductStrategies() throws android.os.RemoteException;
  public void setProductStrategiesZoneIdForUserId(int userId, int zoneId) throws android.os.RemoteException;
  public void resetProductStrategiesZoneIdForUserId(int userId) throws android.os.RemoteException;
  /** product_strategy_t */
  public int getProductStrategyFromAudioAttributes(android.media.audio.common.AudioAttributes aa, boolean fallbackOnDefault) throws android.os.RemoteException;
  public android.media.AudioVolumeGroup[] listAudioVolumeGroups() throws android.os.RemoteException;
  /** volume_group_t */
  public int getVolumeGroupFromAudioAttributes(android.media.audio.common.AudioAttributes aa, boolean fallbackOnDefault) throws android.os.RemoteException;
  public void setRttEnabled(boolean enabled) throws android.os.RemoteException;
  public boolean isCallScreenModeSupported() throws android.os.RemoteException;
  public void setDevicesRoleForStrategy(int strategy, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException;
  public void removeDevicesRoleForStrategy(int strategy, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException;
  public void clearDevicesRoleForStrategy(int strategy, int role) throws android.os.RemoteException;
  public android.media.audio.common.AudioDevice[] getDevicesForRoleAndStrategy(int strategy, int role) throws android.os.RemoteException;
  public void setDevicesRoleForCapturePreset(int audioSource, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException;
  public void addDevicesRoleForCapturePreset(int audioSource, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException;
  public void removeDevicesRoleForCapturePreset(int audioSource, int role, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException;
  public void clearDevicesRoleForCapturePreset(int audioSource, int role) throws android.os.RemoteException;
  public android.media.audio.common.AudioDevice[] getDevicesForRoleAndCapturePreset(int audioSource, int role) throws android.os.RemoteException;
  public boolean registerSoundTriggerCaptureStateListener(android.media.ICaptureStateListener listener) throws android.os.RemoteException;
  /**
   * If a spatializer stage effect is present on the platform, this will return an
   * ISpatializer interface (see GetSpatializerResponse,aidl) to control this
   * feature.
   * If no spatializer stage is present, a null interface is returned.
   * The INativeSpatializerCallback passed must not be null.
   * Only one ISpatializer interface can exist at a given time. The native audio policy
   * service will reject the request if an interface was already acquired and previous owner
   * did not die or call ISpatializer.release().
   */
  public android.media.GetSpatializerResponse getSpatializer(android.media.INativeSpatializerCallback callback) throws android.os.RemoteException;
  /**
   * Queries if some kind of spatialization will be performed if the audio playback context
   * described by the provided arguments is present.
   * The context is made of:
   * - The audio attributes describing the playback use case.
   * - The audio configuration describing the audio format, channels, sampling rate...
   * - The devices describing the sink audio device selected for playback.
   * All arguments are optional and only the specified arguments are used to match against
   * supported criteria. For instance, supplying no argument will tell if spatialization is
   * supported or not in general.
   */
  public boolean canBeSpatialized(android.media.audio.common.AudioAttributes attr, android.media.audio.common.AudioConfig config, android.media.audio.common.AudioDevice[] devices) throws android.os.RemoteException;
  /**
   * Query how the direct playback is currently supported on the device routed for the given
   * attributes and UID (as routing rules may be registered on UID / User ID)
   */
  public int getDirectPlaybackSupport(android.media.audio.common.AudioAttributes attr, int uid, android.media.audio.common.AudioConfig config) throws android.os.RemoteException;
  /**
   * Query audio profiles available for direct playback on the current output device(s)
   * for the specified audio attributes and UID (as routing rules may be registered on
   * UID / User ID).
   */
  public android.media.audio.common.AudioProfile[] getDirectProfilesForAttributes(android.media.audio.common.AudioAttributes attr, int uid) throws android.os.RemoteException;
  /**
   * Return a list of AudioMixerAttributes that can be used to set preferred mixer attributes
   * for the given device.
   */
  public android.media.AudioMixerAttributesInternal[] getSupportedMixerAttributes(int portId) throws android.os.RemoteException;
  /**
   * Set preferred mixer attributes for a given device on a given audio attributes.
   * When conflicting requests are received, the last request will be honored.
   * The preferred mixer attributes can only be set when 1) the usage is media, 2) the
   * given device is currently available, 3) the given device is usb device, 4) the given mixer
   * attributes is supported by the given device.
   * 
   * @param attr the audio attributes whose mixer attributes should be set.
   * @param portId the port id of the device to be routed.
   * @param uid the uid of the request client. The uid will be used to recognize the ownership for
   *            the preferred mixer attributes. All the playback with same audio attributes from
   *            the same uid will be attached to the mixer with the preferred attributes if the
   *            playback is routed to the given device.
   * @param mixerAttr the preferred mixer attributes.
   */
  public void setPreferredMixerAttributes(android.media.audio.common.AudioAttributes attr, int portId, int uid, android.media.AudioMixerAttributesInternal mixerAttr) throws android.os.RemoteException;
  /**
   * Get preferred mixer attributes for a given device on a given audio attributes.
   * Null will be returned if there is no preferred mixer attributes set or it has
   * been cleared.
   * 
   * @param attr the audio attributes whose mixer attributes should be set.
   * @param portId the port id of the device to be routed.
   */
  public android.media.AudioMixerAttributesInternal getPreferredMixerAttributes(android.media.audio.common.AudioAttributes attr, int portId, int uid) throws android.os.RemoteException;
  /**
   * Clear preferred mixer attributes for a given device on a given audio attributes that
   * is previously set via setPreferredMixerAttributes.
   * 
   * @param attr the audio attributes whose mixer attributes should be set.
   * @param portId the port id of the device to be routed.
   * @param uid the uid of the request client. The uid is used to identify the ownership for the
   *            preferred mixer attributes. The preferred mixer attributes will only be cleared
   *            if the uid is the same as the owner of current preferred mixer attributes.
   */
  public void clearPreferredMixerAttributes(android.media.audio.common.AudioAttributes attr, int portId, int uid) throws android.os.RemoteException;
  /**
   * Get the native permission controller for audioserver, to push package and permission info
   * required to control audio access.
   */
  public com.android.media.permission.INativePermissionController getPermissionController() throws android.os.RemoteException;
  /** Query mmap policy information. */
  public android.media.audio.common.AudioMMapPolicyInfo[] getMmapPolicyInfos(int policyType) throws android.os.RemoteException;
  /** Get all devices that support AAudio MMAP. */
  public void getMmapPolicyForDevice(int policyType, android.media.audio.common.AudioMMapPolicyInfo policyInfo) throws android.os.RemoteException;
  /** Enable hardening independent of flag or exemption state */
  public void setHardeningOverride(byte hardeningOverride) throws android.os.RemoteException;
  /**
   * Returns how flushFromFrame is supported when the playback is created with given
   * audio config and audio attributes.
   */
  public int getFlushFromFrameSupport(android.media.audio.common.AudioConfigBase config, android.media.audio.common.AudioAttributes attributes, int uid, int flags) throws android.os.RemoteException;
  /** Returns if mmap path is preferred for pcm offload playback. */
  public boolean useMmapForPcmOffload() throws android.os.RemoteException;
  // When adding a new method, please review and update
  // AudioPolicyService.cpp AudioPolicyService::onTransact()
  // AudioPolicyService.cpp IAUDIOPOLICYSERVICE_BINDER_METHOD_MACRO_LIST
  public static @interface HardeningOverride {
    public static final byte DEFAULT = 0;
    public static final byte DISABLE = 1;
    public static final byte ENABLE = 2;
  }
}
