import typing

import android.app
import android.content
import android.content.res
import android.database
import android.graphics
import android.graphics.drawable
import android.hardware
import android.icu.util
import android.media.audiofx
import android.media.metrics
import android.media.projection
import android.media.session
import android.net
import android.os
import android.util
import android.view
import java
import java.chaquopy
import java.io
import java.lang
import java.net
import java.nio
import java.util
import java.util.concurrent
import java.util.function
import org.xmlpull.v1

class ApplicationMediaCapabilities(android.os.Parcelable):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[ApplicationMediaCapabilities]] = ...
    @staticmethod
    def createFromXml(xmlParser: org.xmlpull.v1.XmlPullParser, /) -> ApplicationMediaCapabilities: ...
    def describeContents(self) -> int: ...
    def getSupportedHdrTypes(self) -> java.util.List[java.lang.String]: ...
    def getSupportedVideoMimeTypes(self) -> java.util.List[java.lang.String]: ...
    def getUnsupportedHdrTypes(self) -> java.util.List[java.lang.String]: ...
    def getUnsupportedVideoMimeTypes(self) -> java.util.List[java.lang.String]: ...
    def isFormatSpecified(self, format: str | java.lang.String, /) -> bool: ...
    def isHdrTypeSupported(self, hdrType: str | java.lang.String, /) -> bool: ...
    def isVideoMimeTypeSupported(self, videoMime: str | java.lang.String, /) -> bool: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class Builder(java.lang.Object):
        def __init__(self) -> None: ...
        def addSupportedHdrType(self, hdrType: str | java.lang.String, /) -> ApplicationMediaCapabilities.Builder: ...
        def addSupportedVideoMimeType(self, codecMime: str | java.lang.String, /) -> ApplicationMediaCapabilities.Builder: ...
        def addUnsupportedHdrType(self, hdrType: str | java.lang.String, /) -> ApplicationMediaCapabilities.Builder: ...
        def addUnsupportedVideoMimeType(self, codecMime: str | java.lang.String, /) -> ApplicationMediaCapabilities.Builder: ...
        def build(self) -> ApplicationMediaCapabilities: ...

class AsyncPlayer(java.lang.Object):
    def __init__(self, tag: str | java.lang.String, /) -> None: ...
    @typing.overload
    def play(self, context: android.content.Context, uri: android.net.Uri, looping: bool | java.jboolean | java.lang.Boolean, stream: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def play(self, context: android.content.Context, uri: android.net.Uri, looping: bool | java.jboolean | java.lang.Boolean, attributes: AudioAttributes, /) -> None: ...
    def stop(self) -> None: ...

class AudioAttributes(android.os.Parcelable):
    ALLOW_CAPTURE_BY_ALL: typing.ClassVar[int] = ...
    ALLOW_CAPTURE_BY_NONE: typing.ClassVar[int] = ...
    ALLOW_CAPTURE_BY_SYSTEM: typing.ClassVar[int] = ...
    CONTENT_TYPE_MOVIE: typing.ClassVar[int] = ...
    CONTENT_TYPE_MUSIC: typing.ClassVar[int] = ...
    CONTENT_TYPE_SONIFICATION: typing.ClassVar[int] = ...
    CONTENT_TYPE_SPEECH: typing.ClassVar[int] = ...
    CONTENT_TYPE_UNKNOWN: typing.ClassVar[int] = ...
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[AudioAttributes]] = ...
    FLAG_AUDIBILITY_ENFORCED: typing.ClassVar[int] = ...
    FLAG_HW_AV_SYNC: typing.ClassVar[int] = ...
    FLAG_LOW_LATENCY: typing.ClassVar[int] = ...
    SPATIALIZATION_BEHAVIOR_AUTO: typing.ClassVar[int] = ...
    SPATIALIZATION_BEHAVIOR_NEVER: typing.ClassVar[int] = ...
    USAGE_ALARM: typing.ClassVar[int] = ...
    USAGE_ASSISTANCE_ACCESSIBILITY: typing.ClassVar[int] = ...
    USAGE_ASSISTANCE_NAVIGATION_GUIDANCE: typing.ClassVar[int] = ...
    USAGE_ASSISTANCE_SONIFICATION: typing.ClassVar[int] = ...
    USAGE_ASSISTANT: typing.ClassVar[int] = ...
    USAGE_GAME: typing.ClassVar[int] = ...
    USAGE_MEDIA: typing.ClassVar[int] = ...
    USAGE_NOTIFICATION: typing.ClassVar[int] = ...
    USAGE_NOTIFICATION_COMMUNICATION_DELAYED: typing.ClassVar[int] = ...
    USAGE_NOTIFICATION_COMMUNICATION_INSTANT: typing.ClassVar[int] = ...
    USAGE_NOTIFICATION_COMMUNICATION_REQUEST: typing.ClassVar[int] = ...
    USAGE_NOTIFICATION_EVENT: typing.ClassVar[int] = ...
    USAGE_NOTIFICATION_RINGTONE: typing.ClassVar[int] = ...
    USAGE_UNKNOWN: typing.ClassVar[int] = ...
    USAGE_VOICE_COMMUNICATION: typing.ClassVar[int] = ...
    USAGE_VOICE_COMMUNICATION_SIGNALLING: typing.ClassVar[int] = ...
    def areHapticChannelsMuted(self) -> bool: ...
    def describeContents(self) -> int: ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getAllowedCapturePolicy(self) -> int: ...
    def getContentType(self) -> int: ...
    def getFlags(self) -> int: ...
    def getSpatializationBehavior(self) -> int: ...
    def getUsage(self) -> int: ...
    def getVolumeControlStream(self) -> int: ...
    def hashCode(self) -> int: ...
    def isContentSpatialized(self) -> bool: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class Builder(java.lang.Object):
        @typing.overload
        def __init__(self) -> None: ...
        @typing.overload
        def __init__(self, aa: AudioAttributes, /) -> None: ...
        def build(self) -> AudioAttributes: ...
        def setAllowedCapturePolicy(self, capturePolicy: int | java.jint | java.lang.Integer, /) -> AudioAttributes.Builder: ...
        def setContentType(self, contentType: int | java.jint | java.lang.Integer, /) -> AudioAttributes.Builder: ...
        def setFlags(self, flags: int | java.jint | java.lang.Integer, /) -> AudioAttributes.Builder: ...
        def setHapticChannelsMuted(self, muted: bool | java.jboolean | java.lang.Boolean, /) -> AudioAttributes.Builder: ...
        def setIsContentSpatialized(self, isSpatialized: bool | java.jboolean | java.lang.Boolean, /) -> AudioAttributes.Builder: ...
        def setLegacyStreamType(self, streamType: int | java.jint | java.lang.Integer, /) -> AudioAttributes.Builder: ...
        def setSpatializationBehavior(self, sb: int | java.jint | java.lang.Integer, /) -> AudioAttributes.Builder: ...
        def setUsage(self, usage: int | java.jint | java.lang.Integer, /) -> AudioAttributes.Builder: ...

class AudioDescriptor(android.os.Parcelable):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[AudioDescriptor]] = ...
    STANDARD_EDID: typing.ClassVar[int] = ...
    STANDARD_NONE: typing.ClassVar[int] = ...
    STANDARD_SADB: typing.ClassVar[int] = ...
    STANDARD_VSADB: typing.ClassVar[int] = ...
    def describeContents(self) -> int: ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getDescriptor(self) -> java.chaquopy.JavaArrayJByte: ...
    def getEncapsulationType(self) -> int: ...
    def getStandard(self) -> int: ...
    def hashCode(self) -> int: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

class AudioDeviceCallback(java.lang.Object):
    def __init__(self) -> None: ...
    def onAudioDevicesAdded(self, addedDevices: java.chaquopy.JavaArray[AudioDeviceInfo], /) -> None: ...
    def onAudioDevicesRemoved(self, removedDevices: java.chaquopy.JavaArray[AudioDeviceInfo], /) -> None: ...

class AudioDeviceInfo(java.lang.Object):
    TYPE_AUX_LINE: typing.ClassVar[int] = ...
    TYPE_BLE_BROADCAST: typing.ClassVar[int] = ...
    TYPE_BLE_HEADSET: typing.ClassVar[int] = ...
    TYPE_BLE_SPEAKER: typing.ClassVar[int] = ...
    TYPE_BLUETOOTH_A2DP: typing.ClassVar[int] = ...
    TYPE_BLUETOOTH_SCO: typing.ClassVar[int] = ...
    TYPE_BUILTIN_EARPIECE: typing.ClassVar[int] = ...
    TYPE_BUILTIN_MIC: typing.ClassVar[int] = ...
    TYPE_BUILTIN_SPEAKER: typing.ClassVar[int] = ...
    TYPE_BUILTIN_SPEAKER_SAFE: typing.ClassVar[int] = ...
    TYPE_BUS: typing.ClassVar[int] = ...
    TYPE_DOCK: typing.ClassVar[int] = ...
    TYPE_DOCK_ANALOG: typing.ClassVar[int] = ...
    TYPE_FM: typing.ClassVar[int] = ...
    TYPE_FM_TUNER: typing.ClassVar[int] = ...
    TYPE_HDMI: typing.ClassVar[int] = ...
    TYPE_HDMI_ARC: typing.ClassVar[int] = ...
    TYPE_HDMI_EARC: typing.ClassVar[int] = ...
    TYPE_HEARING_AID: typing.ClassVar[int] = ...
    TYPE_IP: typing.ClassVar[int] = ...
    TYPE_LINE_ANALOG: typing.ClassVar[int] = ...
    TYPE_LINE_DIGITAL: typing.ClassVar[int] = ...
    TYPE_MULTICHANNEL_GROUP: typing.ClassVar[int] = ...
    TYPE_REMOTE_SUBMIX: typing.ClassVar[int] = ...
    TYPE_TELEPHONY: typing.ClassVar[int] = ...
    TYPE_TV_TUNER: typing.ClassVar[int] = ...
    TYPE_UNKNOWN: typing.ClassVar[int] = ...
    TYPE_USB_ACCESSORY: typing.ClassVar[int] = ...
    TYPE_USB_DEVICE: typing.ClassVar[int] = ...
    TYPE_USB_HEADSET: typing.ClassVar[int] = ...
    TYPE_WIRED_HEADPHONES: typing.ClassVar[int] = ...
    TYPE_WIRED_HEADSET: typing.ClassVar[int] = ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getAddress(self) -> str: ...
    def getAudioDescriptors(self) -> java.util.List[AudioDescriptor]: ...
    def getAudioProfiles(self) -> java.util.List[AudioProfile]: ...
    def getChannelCounts(self) -> java.chaquopy.JavaArrayJInt: ...
    def getChannelIndexMasks(self) -> java.chaquopy.JavaArrayJInt: ...
    def getChannelMasks(self) -> java.chaquopy.JavaArrayJInt: ...
    def getEncapsulationMetadataTypes(self) -> java.chaquopy.JavaArrayJInt: ...
    def getEncapsulationModes(self) -> java.chaquopy.JavaArrayJInt: ...
    def getEncodings(self) -> java.chaquopy.JavaArrayJInt: ...
    def getId(self) -> int: ...
    def getProductName(self) -> java.lang.CharSequence: ...
    def getSampleRates(self) -> java.chaquopy.JavaArrayJInt: ...
    def getSpeakerLayoutChannelMask(self) -> int: ...
    def getType(self) -> int: ...
    def hashCode(self) -> int: ...
    def isSink(self) -> bool: ...
    def isSource(self) -> bool: ...

class AudioFocusRequest(java.lang.Object):
    def acceptsDelayedFocusGain(self) -> bool: ...
    def getAudioAttributes(self) -> AudioAttributes: ...
    def getFocusGain(self) -> int: ...
    def willPauseWhenDucked(self) -> bool: ...

    class Builder(java.lang.Object):
        @typing.overload
        def __init__(self, focusGain: int | java.jint | java.lang.Integer, /) -> None: ...
        @typing.overload
        def __init__(self, requestToCopy: AudioFocusRequest, /) -> None: ...
        def build(self) -> AudioFocusRequest: ...
        def setAcceptsDelayedFocusGain(self, acceptsDelayedFocusGain: bool | java.jboolean | java.lang.Boolean, /) -> AudioFocusRequest.Builder: ...
        def setAudioAttributes(self, attributes: AudioAttributes, /) -> AudioFocusRequest.Builder: ...
        def setFocusGain(self, focusGain: int | java.jint | java.lang.Integer, /) -> AudioFocusRequest.Builder: ...
        def setForceDucking(self, forceDucking: bool | java.jboolean | java.lang.Boolean, /) -> AudioFocusRequest.Builder: ...
        @typing.overload
        def setOnAudioFocusChangeListener(self, listener: AudioManager.OnAudioFocusChangeListener, /) -> AudioFocusRequest.Builder: ...
        @typing.overload
        def setOnAudioFocusChangeListener(self, listener: AudioManager.OnAudioFocusChangeListener, handler: android.os.Handler, /) -> AudioFocusRequest.Builder: ...
        def setWillPauseWhenDucked(self, pauseOnDuck: bool | java.jboolean | java.lang.Boolean, /) -> AudioFocusRequest.Builder: ...

class AudioFormat(android.os.Parcelable):
    CHANNEL_CONFIGURATION_DEFAULT: typing.ClassVar[int] = ...
    CHANNEL_CONFIGURATION_INVALID: typing.ClassVar[int] = ...
    CHANNEL_CONFIGURATION_MONO: typing.ClassVar[int] = ...
    CHANNEL_CONFIGURATION_STEREO: typing.ClassVar[int] = ...
    CHANNEL_INVALID: typing.ClassVar[int] = ...
    CHANNEL_IN_BACK: typing.ClassVar[int] = ...
    CHANNEL_IN_BACK_PROCESSED: typing.ClassVar[int] = ...
    CHANNEL_IN_DEFAULT: typing.ClassVar[int] = ...
    CHANNEL_IN_FRONT: typing.ClassVar[int] = ...
    CHANNEL_IN_FRONT_PROCESSED: typing.ClassVar[int] = ...
    CHANNEL_IN_LEFT: typing.ClassVar[int] = ...
    CHANNEL_IN_LEFT_PROCESSED: typing.ClassVar[int] = ...
    CHANNEL_IN_MONO: typing.ClassVar[int] = ...
    CHANNEL_IN_PRESSURE: typing.ClassVar[int] = ...
    CHANNEL_IN_RIGHT: typing.ClassVar[int] = ...
    CHANNEL_IN_RIGHT_PROCESSED: typing.ClassVar[int] = ...
    CHANNEL_IN_STEREO: typing.ClassVar[int] = ...
    CHANNEL_IN_VOICE_DNLINK: typing.ClassVar[int] = ...
    CHANNEL_IN_VOICE_UPLINK: typing.ClassVar[int] = ...
    CHANNEL_IN_X_AXIS: typing.ClassVar[int] = ...
    CHANNEL_IN_Y_AXIS: typing.ClassVar[int] = ...
    CHANNEL_IN_Z_AXIS: typing.ClassVar[int] = ...
    CHANNEL_OUT_5POINT1: typing.ClassVar[int] = ...
    CHANNEL_OUT_5POINT1POINT2: typing.ClassVar[int] = ...
    CHANNEL_OUT_5POINT1POINT4: typing.ClassVar[int] = ...
    CHANNEL_OUT_6POINT1: typing.ClassVar[int] = ...
    CHANNEL_OUT_7POINT1: typing.ClassVar[int] = ...
    CHANNEL_OUT_7POINT1POINT2: typing.ClassVar[int] = ...
    CHANNEL_OUT_7POINT1POINT4: typing.ClassVar[int] = ...
    CHANNEL_OUT_7POINT1_SURROUND: typing.ClassVar[int] = ...
    CHANNEL_OUT_9POINT1POINT4: typing.ClassVar[int] = ...
    CHANNEL_OUT_9POINT1POINT6: typing.ClassVar[int] = ...
    CHANNEL_OUT_BACK_CENTER: typing.ClassVar[int] = ...
    CHANNEL_OUT_BACK_LEFT: typing.ClassVar[int] = ...
    CHANNEL_OUT_BACK_RIGHT: typing.ClassVar[int] = ...
    CHANNEL_OUT_BOTTOM_FRONT_CENTER: typing.ClassVar[int] = ...
    CHANNEL_OUT_BOTTOM_FRONT_LEFT: typing.ClassVar[int] = ...
    CHANNEL_OUT_BOTTOM_FRONT_RIGHT: typing.ClassVar[int] = ...
    CHANNEL_OUT_DEFAULT: typing.ClassVar[int] = ...
    CHANNEL_OUT_FRONT_CENTER: typing.ClassVar[int] = ...
    CHANNEL_OUT_FRONT_LEFT: typing.ClassVar[int] = ...
    CHANNEL_OUT_FRONT_LEFT_OF_CENTER: typing.ClassVar[int] = ...
    CHANNEL_OUT_FRONT_RIGHT: typing.ClassVar[int] = ...
    CHANNEL_OUT_FRONT_RIGHT_OF_CENTER: typing.ClassVar[int] = ...
    CHANNEL_OUT_FRONT_WIDE_LEFT: typing.ClassVar[int] = ...
    CHANNEL_OUT_FRONT_WIDE_RIGHT: typing.ClassVar[int] = ...
    CHANNEL_OUT_LOW_FREQUENCY: typing.ClassVar[int] = ...
    CHANNEL_OUT_LOW_FREQUENCY_2: typing.ClassVar[int] = ...
    CHANNEL_OUT_MONO: typing.ClassVar[int] = ...
    CHANNEL_OUT_QUAD: typing.ClassVar[int] = ...
    CHANNEL_OUT_SIDE_LEFT: typing.ClassVar[int] = ...
    CHANNEL_OUT_SIDE_RIGHT: typing.ClassVar[int] = ...
    CHANNEL_OUT_STEREO: typing.ClassVar[int] = ...
    CHANNEL_OUT_SURROUND: typing.ClassVar[int] = ...
    CHANNEL_OUT_TOP_BACK_CENTER: typing.ClassVar[int] = ...
    CHANNEL_OUT_TOP_BACK_LEFT: typing.ClassVar[int] = ...
    CHANNEL_OUT_TOP_BACK_RIGHT: typing.ClassVar[int] = ...
    CHANNEL_OUT_TOP_CENTER: typing.ClassVar[int] = ...
    CHANNEL_OUT_TOP_FRONT_CENTER: typing.ClassVar[int] = ...
    CHANNEL_OUT_TOP_FRONT_LEFT: typing.ClassVar[int] = ...
    CHANNEL_OUT_TOP_FRONT_RIGHT: typing.ClassVar[int] = ...
    CHANNEL_OUT_TOP_SIDE_LEFT: typing.ClassVar[int] = ...
    CHANNEL_OUT_TOP_SIDE_RIGHT: typing.ClassVar[int] = ...
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[AudioFormat]] = ...
    ENCODING_AAC_ELD: typing.ClassVar[int] = ...
    ENCODING_AAC_HE_V1: typing.ClassVar[int] = ...
    ENCODING_AAC_HE_V2: typing.ClassVar[int] = ...
    ENCODING_AAC_LC: typing.ClassVar[int] = ...
    ENCODING_AAC_XHE: typing.ClassVar[int] = ...
    ENCODING_AC3: typing.ClassVar[int] = ...
    ENCODING_AC4: typing.ClassVar[int] = ...
    ENCODING_DEFAULT: typing.ClassVar[int] = ...
    ENCODING_DOLBY_MAT: typing.ClassVar[int] = ...
    ENCODING_DOLBY_TRUEHD: typing.ClassVar[int] = ...
    ENCODING_DRA: typing.ClassVar[int] = ...
    ENCODING_DSD: typing.ClassVar[int] = ...
    ENCODING_DTS: typing.ClassVar[int] = ...
    ENCODING_DTS_HD: typing.ClassVar[int] = ...
    ENCODING_DTS_HD_MA: typing.ClassVar[int] = ...
    ENCODING_DTS_UHD: typing.ClassVar[int] = ...
    ENCODING_DTS_UHD_P1: typing.ClassVar[int] = ...
    ENCODING_DTS_UHD_P2: typing.ClassVar[int] = ...
    ENCODING_E_AC3: typing.ClassVar[int] = ...
    ENCODING_E_AC3_JOC: typing.ClassVar[int] = ...
    ENCODING_IAMF_BASE_ENHANCED_PROFILE_AAC: typing.ClassVar[int] = ...
    ENCODING_IAMF_BASE_ENHANCED_PROFILE_FLAC: typing.ClassVar[int] = ...
    ENCODING_IAMF_BASE_ENHANCED_PROFILE_OPUS: typing.ClassVar[int] = ...
    ENCODING_IAMF_BASE_ENHANCED_PROFILE_PCM: typing.ClassVar[int] = ...
    ENCODING_IAMF_BASE_PROFILE_AAC: typing.ClassVar[int] = ...
    ENCODING_IAMF_BASE_PROFILE_FLAC: typing.ClassVar[int] = ...
    ENCODING_IAMF_BASE_PROFILE_OPUS: typing.ClassVar[int] = ...
    ENCODING_IAMF_BASE_PROFILE_PCM: typing.ClassVar[int] = ...
    ENCODING_IAMF_SIMPLE_PROFILE_AAC: typing.ClassVar[int] = ...
    ENCODING_IAMF_SIMPLE_PROFILE_FLAC: typing.ClassVar[int] = ...
    ENCODING_IAMF_SIMPLE_PROFILE_OPUS: typing.ClassVar[int] = ...
    ENCODING_IAMF_SIMPLE_PROFILE_PCM: typing.ClassVar[int] = ...
    ENCODING_IEC61937: typing.ClassVar[int] = ...
    ENCODING_INVALID: typing.ClassVar[int] = ...
    ENCODING_MP3: typing.ClassVar[int] = ...
    ENCODING_MPEGH_BL_L3: typing.ClassVar[int] = ...
    ENCODING_MPEGH_BL_L4: typing.ClassVar[int] = ...
    ENCODING_MPEGH_LC_L3: typing.ClassVar[int] = ...
    ENCODING_MPEGH_LC_L4: typing.ClassVar[int] = ...
    ENCODING_OPUS: typing.ClassVar[int] = ...
    ENCODING_PCM_16BIT: typing.ClassVar[int] = ...
    ENCODING_PCM_24BIT_PACKED: typing.ClassVar[int] = ...
    ENCODING_PCM_32BIT: typing.ClassVar[int] = ...
    ENCODING_PCM_8BIT: typing.ClassVar[int] = ...
    ENCODING_PCM_FLOAT: typing.ClassVar[int] = ...
    SAMPLE_RATE_UNSPECIFIED: typing.ClassVar[int] = ...
    def describeContents(self) -> int: ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getChannelCount(self) -> int: ...
    def getChannelIndexMask(self) -> int: ...
    def getChannelMask(self) -> int: ...
    def getEncoding(self) -> int: ...
    def getFrameSizeInBytes(self) -> int: ...
    def getSampleRate(self) -> int: ...
    def hashCode(self) -> int: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class Builder(java.lang.Object):
        @typing.overload
        def __init__(self) -> None: ...
        @typing.overload
        def __init__(self, af: AudioFormat, /) -> None: ...
        def build(self) -> AudioFormat: ...
        def setChannelIndexMask(self, channelIndexMask: int | java.jint | java.lang.Integer, /) -> AudioFormat.Builder: ...
        def setChannelMask(self, channelMask: int | java.jint | java.lang.Integer, /) -> AudioFormat.Builder: ...
        def setEncoding(self, encoding: int | java.jint | java.lang.Integer, /) -> AudioFormat.Builder: ...
        def setSampleRate(self, sampleRate: int | java.jint | java.lang.Integer, /) -> AudioFormat.Builder: ...

class AudioManager(java.lang.Object):
    ACTION_AUDIO_BECOMING_NOISY: typing.ClassVar[str] = ...
    ACTION_HDMI_AUDIO_PLUG: typing.ClassVar[str] = ...
    ACTION_HEADSET_PLUG: typing.ClassVar[str] = ...
    ACTION_MICROPHONE_MUTE_CHANGED: typing.ClassVar[str] = ...
    ACTION_SCO_AUDIO_STATE_CHANGED: typing.ClassVar[str] = ...
    ACTION_SCO_AUDIO_STATE_UPDATED: typing.ClassVar[str] = ...
    ACTION_SPEAKERPHONE_STATE_CHANGED: typing.ClassVar[str] = ...
    ADJUST_LOWER: typing.ClassVar[int] = ...
    ADJUST_MUTE: typing.ClassVar[int] = ...
    ADJUST_RAISE: typing.ClassVar[int] = ...
    ADJUST_SAME: typing.ClassVar[int] = ...
    ADJUST_TOGGLE_MUTE: typing.ClassVar[int] = ...
    ADJUST_UNMUTE: typing.ClassVar[int] = ...
    AUDIOFOCUS_GAIN: typing.ClassVar[int] = ...
    AUDIOFOCUS_GAIN_TRANSIENT: typing.ClassVar[int] = ...
    AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE: typing.ClassVar[int] = ...
    AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK: typing.ClassVar[int] = ...
    AUDIOFOCUS_LOSS: typing.ClassVar[int] = ...
    AUDIOFOCUS_LOSS_TRANSIENT: typing.ClassVar[int] = ...
    AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: typing.ClassVar[int] = ...
    AUDIOFOCUS_NONE: typing.ClassVar[int] = ...
    AUDIOFOCUS_REQUEST_DELAYED: typing.ClassVar[int] = ...
    AUDIOFOCUS_REQUEST_FAILED: typing.ClassVar[int] = ...
    AUDIOFOCUS_REQUEST_GRANTED: typing.ClassVar[int] = ...
    AUDIO_SESSION_ID_GENERATE: typing.ClassVar[int] = ...
    DIRECT_PLAYBACK_BITSTREAM_SUPPORTED: typing.ClassVar[int] = ...
    DIRECT_PLAYBACK_NOT_SUPPORTED: typing.ClassVar[int] = ...
    DIRECT_PLAYBACK_OFFLOAD_GAPLESS_SUPPORTED: typing.ClassVar[int] = ...
    DIRECT_PLAYBACK_OFFLOAD_SUPPORTED: typing.ClassVar[int] = ...
    ENCODED_SURROUND_OUTPUT_ALWAYS: typing.ClassVar[int] = ...
    ENCODED_SURROUND_OUTPUT_AUTO: typing.ClassVar[int] = ...
    ENCODED_SURROUND_OUTPUT_MANUAL: typing.ClassVar[int] = ...
    ENCODED_SURROUND_OUTPUT_NEVER: typing.ClassVar[int] = ...
    ENCODED_SURROUND_OUTPUT_UNKNOWN: typing.ClassVar[int] = ...
    ERROR: typing.ClassVar[int] = ...
    ERROR_DEAD_OBJECT: typing.ClassVar[int] = ...
    EXTRA_AUDIO_PLUG_STATE: typing.ClassVar[str] = ...
    EXTRA_ENCODINGS: typing.ClassVar[str] = ...
    EXTRA_MAX_CHANNEL_COUNT: typing.ClassVar[str] = ...
    EXTRA_RINGER_MODE: typing.ClassVar[str] = ...
    EXTRA_SCO_AUDIO_PREVIOUS_STATE: typing.ClassVar[str] = ...
    EXTRA_SCO_AUDIO_STATE: typing.ClassVar[str] = ...
    EXTRA_VIBRATE_SETTING: typing.ClassVar[str] = ...
    EXTRA_VIBRATE_TYPE: typing.ClassVar[str] = ...
    FLAG_ALLOW_RINGER_MODES: typing.ClassVar[int] = ...
    FLAG_PLAY_SOUND: typing.ClassVar[int] = ...
    FLAG_REMOVE_SOUND_AND_VIBRATE: typing.ClassVar[int] = ...
    FLAG_SHOW_UI: typing.ClassVar[int] = ...
    FLAG_VIBRATE: typing.ClassVar[int] = ...
    FX_BACK: typing.ClassVar[int] = ...
    FX_FOCUS_NAVIGATION_DOWN: typing.ClassVar[int] = ...
    FX_FOCUS_NAVIGATION_LEFT: typing.ClassVar[int] = ...
    FX_FOCUS_NAVIGATION_RIGHT: typing.ClassVar[int] = ...
    FX_FOCUS_NAVIGATION_UP: typing.ClassVar[int] = ...
    FX_KEYPRESS_DELETE: typing.ClassVar[int] = ...
    FX_KEYPRESS_INVALID: typing.ClassVar[int] = ...
    FX_KEYPRESS_RETURN: typing.ClassVar[int] = ...
    FX_KEYPRESS_SPACEBAR: typing.ClassVar[int] = ...
    FX_KEYPRESS_STANDARD: typing.ClassVar[int] = ...
    FX_KEY_CLICK: typing.ClassVar[int] = ...
    GET_DEVICES_ALL: typing.ClassVar[int] = ...
    GET_DEVICES_INPUTS: typing.ClassVar[int] = ...
    GET_DEVICES_OUTPUTS: typing.ClassVar[int] = ...
    MODE_CALL_REDIRECT: typing.ClassVar[int] = ...
    MODE_CALL_SCREENING: typing.ClassVar[int] = ...
    MODE_COMMUNICATION_REDIRECT: typing.ClassVar[int] = ...
    MODE_CURRENT: typing.ClassVar[int] = ...
    MODE_INVALID: typing.ClassVar[int] = ...
    MODE_IN_CALL: typing.ClassVar[int] = ...
    MODE_IN_COMMUNICATION: typing.ClassVar[int] = ...
    MODE_NORMAL: typing.ClassVar[int] = ...
    MODE_RINGTONE: typing.ClassVar[int] = ...
    NUM_STREAMS: typing.ClassVar[int] = ...
    PLAYBACK_OFFLOAD_GAPLESS_SUPPORTED: typing.ClassVar[int] = ...
    PLAYBACK_OFFLOAD_NOT_SUPPORTED: typing.ClassVar[int] = ...
    PLAYBACK_OFFLOAD_SUPPORTED: typing.ClassVar[int] = ...
    PROPERTY_OUTPUT_FRAMES_PER_BUFFER: typing.ClassVar[str] = ...
    PROPERTY_OUTPUT_SAMPLE_RATE: typing.ClassVar[str] = ...
    PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED: typing.ClassVar[str] = ...
    PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND: typing.ClassVar[str] = ...
    PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND: typing.ClassVar[str] = ...
    RINGER_MODE_CHANGED_ACTION: typing.ClassVar[str] = ...
    RINGER_MODE_NORMAL: typing.ClassVar[int] = ...
    RINGER_MODE_SILENT: typing.ClassVar[int] = ...
    RINGER_MODE_VIBRATE: typing.ClassVar[int] = ...
    ROUTE_ALL: typing.ClassVar[int] = ...
    ROUTE_BLUETOOTH: typing.ClassVar[int] = ...
    ROUTE_BLUETOOTH_A2DP: typing.ClassVar[int] = ...
    ROUTE_BLUETOOTH_SCO: typing.ClassVar[int] = ...
    ROUTE_EARPIECE: typing.ClassVar[int] = ...
    ROUTE_HEADSET: typing.ClassVar[int] = ...
    ROUTE_SPEAKER: typing.ClassVar[int] = ...
    SCO_AUDIO_STATE_CONNECTED: typing.ClassVar[int] = ...
    SCO_AUDIO_STATE_CONNECTING: typing.ClassVar[int] = ...
    SCO_AUDIO_STATE_DISCONNECTED: typing.ClassVar[int] = ...
    SCO_AUDIO_STATE_ERROR: typing.ClassVar[int] = ...
    STREAM_ACCESSIBILITY: typing.ClassVar[int] = ...
    STREAM_ALARM: typing.ClassVar[int] = ...
    STREAM_DTMF: typing.ClassVar[int] = ...
    STREAM_MUSIC: typing.ClassVar[int] = ...
    STREAM_NOTIFICATION: typing.ClassVar[int] = ...
    STREAM_RING: typing.ClassVar[int] = ...
    STREAM_SYSTEM: typing.ClassVar[int] = ...
    STREAM_VOICE_CALL: typing.ClassVar[int] = ...
    USE_DEFAULT_STREAM_TYPE: typing.ClassVar[int] = ...
    VIBRATE_SETTING_CHANGED_ACTION: typing.ClassVar[str] = ...
    VIBRATE_SETTING_OFF: typing.ClassVar[int] = ...
    VIBRATE_SETTING_ON: typing.ClassVar[int] = ...
    VIBRATE_SETTING_ONLY_SILENT: typing.ClassVar[int] = ...
    VIBRATE_TYPE_NOTIFICATION: typing.ClassVar[int] = ...
    VIBRATE_TYPE_RINGER: typing.ClassVar[int] = ...
    def abandonAudioFocus(self, l: AudioManager.OnAudioFocusChangeListener, /) -> int: ...
    def abandonAudioFocusRequest(self, focusRequest: AudioFocusRequest, /) -> int: ...
    def addOnCommunicationDeviceChangedListener(self, executor: java.util.concurrent.Executor, listener: AudioManager.OnCommunicationDeviceChangedListener, /) -> None: ...
    def addOnModeChangedListener(self, executor: java.util.concurrent.Executor, listener: AudioManager.OnModeChangedListener, /) -> None: ...
    def addOnPreferredMixerAttributesChangedListener(self, executor: java.util.concurrent.Executor, listener: AudioManager.OnPreferredMixerAttributesChangedListener, /) -> None: ...
    def adjustStreamVolume(self, streamType: int | java.jint | java.lang.Integer, direction: int | java.jint | java.lang.Integer, flags: int | java.jint | java.lang.Integer, /) -> None: ...
    def adjustSuggestedStreamVolume(self, direction: int | java.jint | java.lang.Integer, suggestedStreamType: int | java.jint | java.lang.Integer, flags: int | java.jint | java.lang.Integer, /) -> None: ...
    def adjustVolume(self, direction: int | java.jint | java.lang.Integer, flags: int | java.jint | java.lang.Integer, /) -> None: ...
    def adjustVolumeGroupVolume(self, groupId: int | java.jint | java.lang.Integer, direction: int | java.jint | java.lang.Integer, flags: int | java.jint | java.lang.Integer, /) -> None: ...
    def clearCommunicationDevice(self) -> None: ...
    def clearPreferredMixerAttributes(self, attributes: AudioAttributes, device: AudioDeviceInfo, /) -> bool: ...
    def dispatchMediaKeyEvent(self, keyEvent: android.view.KeyEvent, /) -> None: ...
    def generateAudioSessionId(self) -> int: ...
    def getActivePlaybackConfigurations(self) -> java.util.List[AudioPlaybackConfiguration]: ...
    def getActiveRecordingConfigurations(self) -> java.util.List[AudioRecordingConfiguration]: ...
    def getAllowedCapturePolicy(self) -> int: ...
    def getAudioDevicesForAttributes(self, attributes: AudioAttributes, /) -> java.util.List[AudioDeviceInfo]: ...
    def getAudioHwSyncForSession(self, sessionId: int | java.jint | java.lang.Integer, /) -> int: ...
    def getAvailableCommunicationDevices(self) -> java.util.List[AudioDeviceInfo]: ...
    def getCommunicationDevice(self) -> AudioDeviceInfo | None: ...
    def getDevices(self, flags: int | java.jint | java.lang.Integer, /) -> java.chaquopy.JavaArray[AudioDeviceInfo]: ...
    @staticmethod
    def getDirectPlaybackSupport(format: AudioFormat, attributes: AudioAttributes, /) -> int: ...
    def getDirectProfilesForAttributes(self, attributes: AudioAttributes, /) -> java.util.List[AudioProfile]: ...
    def getEncodedSurroundMode(self) -> int: ...
    def getMicrophones(self) -> java.util.List[MicrophoneInfo]: ...
    def getMode(self) -> int: ...
    def getParameters(self, keys: str | java.lang.String, /) -> str: ...
    @staticmethod
    def getPlaybackOffloadSupport(format: AudioFormat, attributes: AudioAttributes, /) -> int: ...
    def getPreferredMixerAttributes(self, attributes: AudioAttributes, device: AudioDeviceInfo, /) -> AudioMixerAttributes | None: ...
    def getProperty(self, key: str | java.lang.String, /) -> str | None: ...
    def getRingerMode(self) -> int: ...
    def getRouting(self, mode: int | java.jint | java.lang.Integer, /) -> int: ...
    def getSpatializer(self) -> Spatializer: ...
    def getStreamMaxVolume(self, streamType: int | java.jint | java.lang.Integer, /) -> int: ...
    def getStreamMinVolume(self, streamType: int | java.jint | java.lang.Integer, /) -> int: ...
    def getStreamVolume(self, streamType: int | java.jint | java.lang.Integer, /) -> int: ...
    def getStreamVolumeDb(self, streamType: int | java.jint | java.lang.Integer, index: int | java.jint | java.lang.Integer, deviceType: int | java.jint | java.lang.Integer, /) -> float: ...
    def getSupportedDeviceTypes(self, direction: int | java.jint | java.lang.Integer, /) -> java.util.Set[java.lang.Integer]: ...
    def getSupportedMixerAttributes(self, device: AudioDeviceInfo, /) -> java.util.List[AudioMixerAttributes]: ...
    def getVibrateSetting(self, vibrateType: int | java.jint | java.lang.Integer, /) -> int: ...
    def getVolumeGroupIdForAttributes(self, attributes: AudioAttributes, /) -> int: ...
    def isBluetoothA2dpOn(self) -> bool: ...
    def isBluetoothScoAvailableOffCall(self) -> bool: ...
    def isBluetoothScoOn(self) -> bool: ...
    def isCallScreeningModeSupported(self) -> bool: ...
    @staticmethod
    def isHapticPlaybackSupported() -> bool: ...
    def isMicrophoneMute(self) -> bool: ...
    def isMusicActive(self) -> bool: ...
    @staticmethod
    def isOffloadedPlaybackSupported(format: AudioFormat, attributes: AudioAttributes, /) -> bool: ...
    def isRampingRingerEnabled(self) -> bool: ...
    def isSpeakerphoneOn(self) -> bool: ...
    def isStreamMute(self, streamType: int | java.jint | java.lang.Integer, /) -> bool: ...
    def isSurroundFormatEnabled(self, audioFormat: int | java.jint | java.lang.Integer, /) -> bool: ...
    def isVolumeFixed(self) -> bool: ...
    def isVolumeGroupMuted(self, groupId: int | java.jint | java.lang.Integer, /) -> bool: ...
    def isWiredHeadsetOn(self) -> bool: ...
    def loadSoundEffects(self) -> None: ...
    @typing.overload
    def playSoundEffect(self, effectType: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def playSoundEffect(self, effectType: int | java.jint | java.lang.Integer, volume: float | java.jfloat | java.lang.Float, /) -> None: ...
    def registerAudioDeviceCallback(self, callback: AudioDeviceCallback, handler: android.os.Handler, /) -> None: ...
    def registerAudioPlaybackCallback(self, cb: AudioManager.AudioPlaybackCallback, handler: android.os.Handler, /) -> None: ...
    def registerAudioRecordingCallback(self, cb: AudioManager.AudioRecordingCallback, handler: android.os.Handler, /) -> None: ...
    @typing.overload
    def registerMediaButtonEventReceiver(self, eventReceiver: android.app.PendingIntent, /) -> None: ...
    @typing.overload
    def registerMediaButtonEventReceiver(self, eventReceiver: android.content.ComponentName, /) -> None: ...
    def registerRemoteControlClient(self, rcClient: RemoteControlClient, /) -> None: ...
    def registerRemoteController(self, rctlr: RemoteController, /) -> bool: ...
    def removeOnCommunicationDeviceChangedListener(self, listener: AudioManager.OnCommunicationDeviceChangedListener, /) -> None: ...
    def removeOnModeChangedListener(self, listener: AudioManager.OnModeChangedListener, /) -> None: ...
    def removeOnPreferredMixerAttributesChangedListener(self, listener: AudioManager.OnPreferredMixerAttributesChangedListener, /) -> None: ...
    @typing.overload
    def requestAudioFocus(self, focusRequest: AudioFocusRequest, /) -> int: ...
    @typing.overload
    def requestAudioFocus(self, l: AudioManager.OnAudioFocusChangeListener, streamType: int | java.jint | java.lang.Integer, durationHint: int | java.jint | java.lang.Integer, /) -> int: ...
    def setAllowedCapturePolicy(self, capturePolicy: int | java.jint | java.lang.Integer, /) -> None: ...
    def setBluetoothA2dpOn(self, on: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setBluetoothScoOn(self, on: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setCommunicationDevice(self, device: AudioDeviceInfo, /) -> bool: ...
    def setEncodedSurroundMode(self, mode: int | java.jint | java.lang.Integer, /) -> bool: ...
    def setMicrophoneMute(self, on: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setMode(self, mode: int | java.jint | java.lang.Integer, /) -> None: ...
    def setParameters(self, keyValuePairs: str | java.lang.String, /) -> None: ...
    def setPreferredMixerAttributes(self, attributes: AudioAttributes, device: AudioDeviceInfo, mixerAttributes: AudioMixerAttributes, /) -> bool: ...
    def setRingerMode(self, ringerMode: int | java.jint | java.lang.Integer, /) -> None: ...
    def setRouting(self, mode: int | java.jint | java.lang.Integer, routes: int | java.jint | java.lang.Integer, mask: int | java.jint | java.lang.Integer, /) -> None: ...
    def setSpeakerphoneOn(self, on: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setStreamMute(self, streamType: int | java.jint | java.lang.Integer, state: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setStreamSolo(self, streamType: int | java.jint | java.lang.Integer, state: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setStreamVolume(self, streamType: int | java.jint | java.lang.Integer, index: int | java.jint | java.lang.Integer, flags: int | java.jint | java.lang.Integer, /) -> None: ...
    def setSurroundFormatEnabled(self, audioFormat: int | java.jint | java.lang.Integer, enabled: bool | java.jboolean | java.lang.Boolean, /) -> bool: ...
    def setVibrateSetting(self, vibrateType: int | java.jint | java.lang.Integer, vibrateSetting: int | java.jint | java.lang.Integer, /) -> None: ...
    def setWiredHeadsetOn(self, on: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def shouldVibrate(self, vibrateType: int | java.jint | java.lang.Integer, /) -> bool: ...
    def startBluetoothSco(self) -> None: ...
    def stopBluetoothSco(self) -> None: ...
    def unloadSoundEffects(self) -> None: ...
    def unregisterAudioDeviceCallback(self, callback: AudioDeviceCallback, /) -> None: ...
    def unregisterAudioPlaybackCallback(self, cb: AudioManager.AudioPlaybackCallback, /) -> None: ...
    def unregisterAudioRecordingCallback(self, cb: AudioManager.AudioRecordingCallback, /) -> None: ...
    @typing.overload
    def unregisterMediaButtonEventReceiver(self, eventReceiver: android.app.PendingIntent, /) -> None: ...
    @typing.overload
    def unregisterMediaButtonEventReceiver(self, eventReceiver: android.content.ComponentName, /) -> None: ...
    def unregisterRemoteControlClient(self, rcClient: RemoteControlClient, /) -> None: ...
    def unregisterRemoteController(self, rctlr: RemoteController, /) -> None: ...

    class OnPreferredMixerAttributesChangedListener(java.lang.Object):
        def onPreferredMixerAttributesChanged(self, arg1: AudioAttributes, arg2: AudioDeviceInfo, arg3: AudioMixerAttributes, /) -> None: ...

    class OnModeChangedListener(java.lang.Object):
        def onModeChanged(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...

    class OnCommunicationDeviceChangedListener(java.lang.Object):
        def onCommunicationDeviceChanged(self, arg1: AudioDeviceInfo, /) -> None: ...

    class OnAudioFocusChangeListener(java.lang.Object):
        def onAudioFocusChange(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...

    class AudioRecordingCallback(java.lang.Object):
        def __init__(self) -> None: ...
        def onRecordingConfigChanged(self, configs: java.util.List[AudioRecordingConfiguration], /) -> None: ...

    class AudioPlaybackCallback(java.lang.Object):
        def __init__(self) -> None: ...
        def onPlaybackConfigChanged(self, configs: java.util.List[AudioPlaybackConfiguration], /) -> None: ...


_AudioMetadata__Key__T = typing.TypeVar('_AudioMetadata__Key__T')  # <T>
class AudioMetadata(java.lang.Object):
    @staticmethod
    def createMap() -> AudioMetadataMap: ...
    class Key(java.lang.Object, typing.Generic[_AudioMetadata__Key__T]):
        def getName(self) -> str: ...
        def getValueClass(self) -> typing.Type[_AudioMetadata__Key__T]: ...

    class Format(java.lang.Object):
        KEY_ATMOS_PRESENT: typing.ClassVar[AudioMetadata.Key[java.lang.Boolean]] = ...
        KEY_AUDIO_ENCODING: typing.ClassVar[AudioMetadata.Key[java.lang.Integer]] = ...
        KEY_BIT_RATE: typing.ClassVar[AudioMetadata.Key[java.lang.Integer]] = ...
        KEY_BIT_WIDTH: typing.ClassVar[AudioMetadata.Key[java.lang.Integer]] = ...
        KEY_CHANNEL_MASK: typing.ClassVar[AudioMetadata.Key[java.lang.Integer]] = ...
        KEY_MIME: typing.ClassVar[AudioMetadata.Key[java.lang.String]] = ...
        KEY_PRESENTATION_CONTENT_CLASSIFIER: typing.ClassVar[AudioMetadata.Key[java.lang.Integer]] = ...
        KEY_PRESENTATION_ID: typing.ClassVar[AudioMetadata.Key[java.lang.Integer]] = ...
        KEY_PRESENTATION_LANGUAGE: typing.ClassVar[AudioMetadata.Key[java.lang.String]] = ...
        KEY_PROGRAM_ID: typing.ClassVar[AudioMetadata.Key[java.lang.Integer]] = ...
        KEY_SAMPLE_RATE: typing.ClassVar[AudioMetadata.Key[java.lang.Integer]] = ...

class AudioMetadataMap(AudioMetadataReadMap):
    _remove__T = typing.TypeVar('_remove__T')  # <T>
    def remove(self, arg1: AudioMetadata.Key[_remove__T], /) -> _remove__T: ...
    _set__T = typing.TypeVar('_set__T')  # <T>
    def set(self, arg1: AudioMetadata.Key[_set__T], arg2: _set__T, /) -> _set__T: ...

class AudioMetadataReadMap(java.lang.Object):
    def containsKey(self, arg1: AudioMetadata.Key[java.lang.Object], /) -> bool: ...
    def dup(self) -> AudioMetadataMap: ...
    _get__T = typing.TypeVar('_get__T')  # <T>
    def get(self, arg1: AudioMetadata.Key[_get__T], /) -> _get__T: ...
    def size(self) -> int: ...

class AudioMixerAttributes(android.os.Parcelable):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[AudioMixerAttributes]] = ...
    MIXER_BEHAVIOR_BIT_PERFECT: typing.ClassVar[int] = ...
    MIXER_BEHAVIOR_DEFAULT: typing.ClassVar[int] = ...
    def describeContents(self) -> int: ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getFormat(self) -> AudioFormat: ...
    def getMixerBehavior(self) -> int: ...
    def hashCode(self) -> int: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class Builder(java.lang.Object):
        def __init__(self, format: AudioFormat, /) -> None: ...
        def build(self) -> AudioMixerAttributes: ...
        def setMixerBehavior(self, mixerBehavior: int | java.jint | java.lang.Integer, /) -> AudioMixerAttributes.Builder: ...

class AudioPlaybackCaptureConfiguration(java.lang.Object):
    def getExcludeUids(self) -> java.chaquopy.JavaArrayJInt: ...
    def getExcludeUsages(self) -> java.chaquopy.JavaArrayJInt: ...
    def getMatchingUids(self) -> java.chaquopy.JavaArrayJInt: ...
    def getMatchingUsages(self) -> java.chaquopy.JavaArrayJInt: ...
    def getMediaProjection(self) -> android.media.projection.MediaProjection: ...

    class Builder(java.lang.Object):
        def __init__(self, projection: android.media.projection.MediaProjection, /) -> None: ...
        def addMatchingUid(self, uid: int | java.jint | java.lang.Integer, /) -> AudioPlaybackCaptureConfiguration.Builder: ...
        def addMatchingUsage(self, usage: int | java.jint | java.lang.Integer, /) -> AudioPlaybackCaptureConfiguration.Builder: ...
        def build(self) -> AudioPlaybackCaptureConfiguration: ...
        def excludeUid(self, uid: int | java.jint | java.lang.Integer, /) -> AudioPlaybackCaptureConfiguration.Builder: ...
        def excludeUsage(self, usage: int | java.jint | java.lang.Integer, /) -> AudioPlaybackCaptureConfiguration.Builder: ...

class AudioPlaybackConfiguration(android.os.Parcelable):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[AudioPlaybackConfiguration]] = ...
    def describeContents(self) -> int: ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getAudioAttributes(self) -> AudioAttributes: ...
    def getAudioDeviceInfo(self) -> AudioDeviceInfo | None: ...
    def hashCode(self) -> int: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

class AudioPresentation(android.os.Parcelable):
    CONTENT_COMMENTARY: typing.ClassVar[int] = ...
    CONTENT_DIALOG: typing.ClassVar[int] = ...
    CONTENT_EMERGENCY: typing.ClassVar[int] = ...
    CONTENT_HEARING_IMPAIRED: typing.ClassVar[int] = ...
    CONTENT_MAIN: typing.ClassVar[int] = ...
    CONTENT_MUSIC_AND_EFFECTS: typing.ClassVar[int] = ...
    CONTENT_UNKNOWN: typing.ClassVar[int] = ...
    CONTENT_VISUALLY_IMPAIRED: typing.ClassVar[int] = ...
    CONTENT_VOICEOVER: typing.ClassVar[int] = ...
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[AudioPresentation]] = ...
    MASTERED_FOR_3D: typing.ClassVar[int] = ...
    MASTERED_FOR_HEADPHONE: typing.ClassVar[int] = ...
    MASTERED_FOR_STEREO: typing.ClassVar[int] = ...
    MASTERED_FOR_SURROUND: typing.ClassVar[int] = ...
    MASTERING_NOT_INDICATED: typing.ClassVar[int] = ...
    PRESENTATION_ID_UNKNOWN: typing.ClassVar[int] = ...
    PROGRAM_ID_UNKNOWN: typing.ClassVar[int] = ...
    def describeContents(self) -> int: ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getLabels(self) -> java.util.Map[java.util.Locale, java.lang.String]: ...
    def getLocale(self) -> java.util.Locale: ...
    def getMasteringIndication(self) -> int: ...
    def getPresentationId(self) -> int: ...
    def getProgramId(self) -> int: ...
    def hasAudioDescription(self) -> bool: ...
    def hasDialogueEnhancement(self) -> bool: ...
    def hasSpokenSubtitles(self) -> bool: ...
    def hashCode(self) -> int: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class Builder(java.lang.Object):
        def __init__(self, presentationId: int | java.jint | java.lang.Integer, /) -> None: ...
        def build(self) -> AudioPresentation: ...
        def setHasAudioDescription(self, audioDescriptionAvailable: bool | java.jboolean | java.lang.Boolean, /) -> AudioPresentation.Builder: ...
        def setHasDialogueEnhancement(self, dialogueEnhancementAvailable: bool | java.jboolean | java.lang.Boolean, /) -> AudioPresentation.Builder: ...
        def setHasSpokenSubtitles(self, spokenSubtitlesAvailable: bool | java.jboolean | java.lang.Boolean, /) -> AudioPresentation.Builder: ...
        def setLabels(self, labels: java.util.Map[android.icu.util.ULocale, java.lang.CharSequence], /) -> AudioPresentation.Builder: ...
        def setLocale(self, language: android.icu.util.ULocale, /) -> AudioPresentation.Builder: ...
        def setMasteringIndication(self, masteringIndication: int | java.jint | java.lang.Integer, /) -> AudioPresentation.Builder: ...
        def setProgramId(self, programId: int | java.jint | java.lang.Integer, /) -> AudioPresentation.Builder: ...

class AudioProfile(android.os.Parcelable):
    AUDIO_ENCAPSULATION_TYPE_IEC61937: typing.ClassVar[int] = ...
    AUDIO_ENCAPSULATION_TYPE_NONE: typing.ClassVar[int] = ...
    AUDIO_ENCAPSULATION_TYPE_PCM: typing.ClassVar[int] = ...
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[AudioProfile]] = ...
    def describeContents(self) -> int: ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getChannelIndexMasks(self) -> java.chaquopy.JavaArrayJInt: ...
    def getChannelMasks(self) -> java.chaquopy.JavaArrayJInt: ...
    def getEncapsulationType(self) -> int: ...
    def getFormat(self) -> int: ...
    def getSampleRates(self) -> java.chaquopy.JavaArrayJInt: ...
    def hashCode(self) -> int: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

class AudioRecord(AudioRecordingMonitor, AudioRouting, MicrophoneDirection):
    ERROR: typing.ClassVar[int] = ...
    ERROR_BAD_VALUE: typing.ClassVar[int] = ...
    ERROR_DEAD_OBJECT: typing.ClassVar[int] = ...
    ERROR_INVALID_OPERATION: typing.ClassVar[int] = ...
    READ_BLOCKING: typing.ClassVar[int] = ...
    READ_NON_BLOCKING: typing.ClassVar[int] = ...
    RECORDSTATE_RECORDING: typing.ClassVar[int] = ...
    RECORDSTATE_STOPPED: typing.ClassVar[int] = ...
    STATE_INITIALIZED: typing.ClassVar[int] = ...
    STATE_UNINITIALIZED: typing.ClassVar[int] = ...
    SUCCESS: typing.ClassVar[int] = ...
    def __init__(self, audioSource: int | java.jint | java.lang.Integer, sampleRateInHz: int | java.jint | java.lang.Integer, channelConfig: int | java.jint | java.lang.Integer, audioFormat: int | java.jint | java.lang.Integer, bufferSizeInBytes: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def addOnRoutingChangedListener(self, listener: AudioRecord.OnRoutingChangedListener, handler: android.os.Handler, /) -> None: ...
    @typing.overload
    def addOnRoutingChangedListener(self, listener: AudioRouting.OnRoutingChangedListener, handler: android.os.Handler, /) -> None: ...
    def finalize(self) -> None: ...
    def getActiveMicrophones(self) -> java.util.List[MicrophoneInfo]: ...
    def getActiveRecordingConfiguration(self) -> AudioRecordingConfiguration | None: ...
    def getAudioFormat(self) -> int: ...
    def getAudioSessionId(self) -> int: ...
    def getAudioSource(self) -> int: ...
    def getBufferSizeInFrames(self) -> int: ...
    def getChannelConfiguration(self) -> int: ...
    def getChannelCount(self) -> int: ...
    def getFormat(self) -> AudioFormat: ...
    def getLogSessionId(self) -> android.media.metrics.LogSessionId: ...
    def getMetrics(self) -> android.os.PersistableBundle: ...
    @staticmethod
    def getMinBufferSize(sampleRateInHz: int | java.jint | java.lang.Integer, channelConfig: int | java.jint | java.lang.Integer, audioFormat: int | java.jint | java.lang.Integer, /) -> int: ...
    def getNotificationMarkerPosition(self) -> int: ...
    def getPositionNotificationPeriod(self) -> int: ...
    def getPreferredDevice(self) -> AudioDeviceInfo: ...
    def getRecordingState(self) -> int: ...
    def getRoutedDevice(self) -> AudioDeviceInfo: ...
    def getRoutedDevices(self) -> java.util.List[AudioDeviceInfo]: ...
    def getSampleRate(self) -> int: ...
    def getState(self) -> int: ...
    def getTimestamp(self, outTimestamp: AudioTimestamp, timebase: int | java.jint | java.lang.Integer, /) -> int: ...
    def isPrivacySensitive(self) -> bool: ...
    @typing.overload
    def read(self, audioBuffer: java.nio.ByteBuffer, sizeInBytes: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    def read(self, audioBuffer: java.nio.ByteBuffer, sizeInBytes: int | java.jint | java.lang.Integer, readMode: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    def read(self, audioData: java.chaquopy.JavaArrayJByte, offsetInBytes: int | java.jint | java.lang.Integer, sizeInBytes: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    def read(self, audioData: java.chaquopy.JavaArrayJShort, offsetInShorts: int | java.jint | java.lang.Integer, sizeInShorts: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    def read(self, audioData: java.chaquopy.JavaArrayJByte, offsetInBytes: int | java.jint | java.lang.Integer, sizeInBytes: int | java.jint | java.lang.Integer, readMode: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    def read(self, audioData: java.chaquopy.JavaArrayJFloat, offsetInFloats: int | java.jint | java.lang.Integer, sizeInFloats: int | java.jint | java.lang.Integer, readMode: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    def read(self, audioData: java.chaquopy.JavaArrayJShort, offsetInShorts: int | java.jint | java.lang.Integer, sizeInShorts: int | java.jint | java.lang.Integer, readMode: int | java.jint | java.lang.Integer, /) -> int: ...
    def registerAudioRecordingCallback(self, executor: java.util.concurrent.Executor, cb: AudioManager.AudioRecordingCallback, /) -> None: ...
    def release(self) -> None: ...
    @typing.overload
    def removeOnRoutingChangedListener(self, listener: AudioRecord.OnRoutingChangedListener, /) -> None: ...
    @typing.overload
    def removeOnRoutingChangedListener(self, listener: AudioRouting.OnRoutingChangedListener, /) -> None: ...
    def setLogSessionId(self, logSessionId: android.media.metrics.LogSessionId, /) -> None: ...
    def setNotificationMarkerPosition(self, markerInFrames: int | java.jint | java.lang.Integer, /) -> int: ...
    def setPositionNotificationPeriod(self, periodInFrames: int | java.jint | java.lang.Integer, /) -> int: ...
    def setPreferredDevice(self, deviceInfo: AudioDeviceInfo, /) -> bool: ...
    def setPreferredMicrophoneDirection(self, direction: int | java.jint | java.lang.Integer, /) -> bool: ...
    def setPreferredMicrophoneFieldDimension(self, zoom: float | java.jfloat | java.lang.Float, /) -> bool: ...
    @typing.overload
    def setRecordPositionUpdateListener(self, listener: AudioRecord.OnRecordPositionUpdateListener, /) -> None: ...
    @typing.overload
    def setRecordPositionUpdateListener(self, listener: AudioRecord.OnRecordPositionUpdateListener, handler: android.os.Handler, /) -> None: ...
    @typing.overload
    def startRecording(self) -> None: ...
    @typing.overload
    def startRecording(self, syncEvent: MediaSyncEvent, /) -> None: ...
    def stop(self) -> None: ...
    def unregisterAudioRecordingCallback(self, cb: AudioManager.AudioRecordingCallback, /) -> None: ...

    class OnRoutingChangedListener(AudioRouting.OnRoutingChangedListener):
        @typing.overload
        def onRoutingChanged(self, arg1: AudioRecord, /) -> None: ...
        @typing.overload
        def onRoutingChanged(self, router: AudioRouting, /) -> None: ...

    class OnRecordPositionUpdateListener(java.lang.Object):
        def onMarkerReached(self, arg1: AudioRecord, /) -> None: ...
        def onPeriodicNotification(self, arg1: AudioRecord, /) -> None: ...

    class MetricsConstants(java.lang.Object):
        CHANNELS: typing.ClassVar[str] = ...
        ENCODING: typing.ClassVar[str] = ...
        LATENCY: typing.ClassVar[str] = ...
        SAMPLERATE: typing.ClassVar[str] = ...
        SOURCE: typing.ClassVar[str] = ...

    class Builder(java.lang.Object):
        def __init__(self) -> None: ...
        def build(self) -> AudioRecord: ...
        def setAudioFormat(self, format: AudioFormat, /) -> AudioRecord.Builder: ...
        def setAudioPlaybackCaptureConfig(self, config: AudioPlaybackCaptureConfiguration, /) -> AudioRecord.Builder: ...
        def setAudioSource(self, source: int | java.jint | java.lang.Integer, /) -> AudioRecord.Builder: ...
        def setBufferSizeInBytes(self, bufferSizeInBytes: int | java.jint | java.lang.Integer, /) -> AudioRecord.Builder: ...
        def setContext(self, context: android.content.Context, /) -> AudioRecord.Builder: ...
        def setPrivacySensitive(self, privacySensitive: bool | java.jboolean | java.lang.Boolean, /) -> AudioRecord.Builder: ...

class AudioRecordingConfiguration(android.os.Parcelable):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[AudioRecordingConfiguration]] = ...
    def describeContents(self) -> int: ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getAudioDevice(self) -> AudioDeviceInfo | None: ...
    def getAudioSource(self) -> int: ...
    def getClientAudioSessionId(self) -> int: ...
    def getClientAudioSource(self) -> int: ...
    def getClientEffects(self) -> java.util.List[android.media.audiofx.AudioEffect.Descriptor]: ...
    def getClientFormat(self) -> AudioFormat: ...
    def getEffects(self) -> java.util.List[android.media.audiofx.AudioEffect.Descriptor]: ...
    def getFormat(self) -> AudioFormat: ...
    def hashCode(self) -> int: ...
    def isClientSilenced(self) -> bool: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

class AudioRecordingMonitor(java.lang.Object):
    def getActiveRecordingConfiguration(self) -> AudioRecordingConfiguration: ...
    def registerAudioRecordingCallback(self, arg1: java.util.concurrent.Executor, arg2: AudioManager.AudioRecordingCallback, /) -> None: ...
    def unregisterAudioRecordingCallback(self, arg1: AudioManager.AudioRecordingCallback, /) -> None: ...

class AudioRouting(java.lang.Object):
    def addOnRoutingChangedListener(self, arg1: AudioRouting.OnRoutingChangedListener, arg2: android.os.Handler, /) -> None: ...
    def getPreferredDevice(self) -> AudioDeviceInfo: ...
    def getRoutedDevice(self) -> AudioDeviceInfo: ...
    def getRoutedDevices(self) -> java.util.List[AudioDeviceInfo]: ...
    def removeOnRoutingChangedListener(self, arg1: AudioRouting.OnRoutingChangedListener, /) -> None: ...
    def setPreferredDevice(self, arg1: AudioDeviceInfo, /) -> bool: ...

    class OnRoutingChangedListener(java.lang.Object):
        def onRoutingChanged(self, arg1: AudioRouting, /) -> None: ...

class AudioTimestamp(android.os.Parcelable):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[AudioTimestamp]] = ...
    TIMEBASE_BOOTTIME: typing.ClassVar[int] = ...
    TIMEBASE_MONOTONIC: typing.ClassVar[int] = ...
    framePosition: int = ...
    nanoTime: int = ...
    def __init__(self) -> None: ...
    def describeContents(self) -> int: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

class AudioTrack(AudioRouting, VolumeAutomation):
    DUAL_MONO_MODE_LL: typing.ClassVar[int] = ...
    DUAL_MONO_MODE_LR: typing.ClassVar[int] = ...
    DUAL_MONO_MODE_OFF: typing.ClassVar[int] = ...
    DUAL_MONO_MODE_RR: typing.ClassVar[int] = ...
    ENCAPSULATION_METADATA_TYPE_DVB_AD_DESCRIPTOR: typing.ClassVar[int] = ...
    ENCAPSULATION_METADATA_TYPE_FRAMEWORK_TUNER: typing.ClassVar[int] = ...
    ENCAPSULATION_METADATA_TYPE_SUPPLEMENTARY_AUDIO_PLACEMENT: typing.ClassVar[int] = ...
    ENCAPSULATION_MODE_ELEMENTARY_STREAM: typing.ClassVar[int] = ...
    ENCAPSULATION_MODE_NONE: typing.ClassVar[int] = ...
    ERROR: typing.ClassVar[int] = ...
    ERROR_BAD_VALUE: typing.ClassVar[int] = ...
    ERROR_DEAD_OBJECT: typing.ClassVar[int] = ...
    ERROR_INVALID_OPERATION: typing.ClassVar[int] = ...
    MODE_STATIC: typing.ClassVar[int] = ...
    MODE_STREAM: typing.ClassVar[int] = ...
    PERFORMANCE_MODE_LOW_LATENCY: typing.ClassVar[int] = ...
    PERFORMANCE_MODE_NONE: typing.ClassVar[int] = ...
    PERFORMANCE_MODE_POWER_SAVING: typing.ClassVar[int] = ...
    PLAYSTATE_PAUSED: typing.ClassVar[int] = ...
    PLAYSTATE_PLAYING: typing.ClassVar[int] = ...
    PLAYSTATE_STOPPED: typing.ClassVar[int] = ...
    STATE_INITIALIZED: typing.ClassVar[int] = ...
    STATE_NO_STATIC_DATA: typing.ClassVar[int] = ...
    STATE_UNINITIALIZED: typing.ClassVar[int] = ...
    SUCCESS: typing.ClassVar[int] = ...
    SUPPLEMENTARY_AUDIO_PLACEMENT_LEFT: typing.ClassVar[int] = ...
    SUPPLEMENTARY_AUDIO_PLACEMENT_NORMAL: typing.ClassVar[int] = ...
    SUPPLEMENTARY_AUDIO_PLACEMENT_RIGHT: typing.ClassVar[int] = ...
    WRITE_BLOCKING: typing.ClassVar[int] = ...
    WRITE_NON_BLOCKING: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self, attributes: AudioAttributes, format: AudioFormat, bufferSizeInBytes: int | java.jint | java.lang.Integer, mode: int | java.jint | java.lang.Integer, sessionId: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, streamType: int | java.jint | java.lang.Integer, sampleRateInHz: int | java.jint | java.lang.Integer, channelConfig: int | java.jint | java.lang.Integer, audioFormat: int | java.jint | java.lang.Integer, bufferSizeInBytes: int | java.jint | java.lang.Integer, mode: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, streamType: int | java.jint | java.lang.Integer, sampleRateInHz: int | java.jint | java.lang.Integer, channelConfig: int | java.jint | java.lang.Integer, audioFormat: int | java.jint | java.lang.Integer, bufferSizeInBytes: int | java.jint | java.lang.Integer, mode: int | java.jint | java.lang.Integer, sessionId: int | java.jint | java.lang.Integer, /) -> None: ...
    def addOnCodecFormatChangedListener(self, executor: java.util.concurrent.Executor, listener: AudioTrack.OnCodecFormatChangedListener, /) -> None: ...
    @typing.overload
    def addOnRoutingChangedListener(self, listener: AudioRouting.OnRoutingChangedListener, handler: android.os.Handler, /) -> None: ...
    @typing.overload
    def addOnRoutingChangedListener(self, listener: AudioTrack.OnRoutingChangedListener, handler: android.os.Handler, /) -> None: ...
    def attachAuxEffect(self, effectId: int | java.jint | java.lang.Integer, /) -> int: ...
    def createVolumeShaper(self, configuration: VolumeShaper.Configuration, /) -> VolumeShaper: ...
    def finalize(self) -> None: ...
    def flush(self) -> None: ...
    def getAudioAttributes(self) -> AudioAttributes: ...
    def getAudioDescriptionMixLeveldB(self) -> float: ...
    def getAudioFormat(self) -> int: ...
    def getAudioSessionId(self) -> int: ...
    def getBufferCapacityInFrames(self) -> int: ...
    def getBufferSizeInFrames(self) -> int: ...
    def getChannelConfiguration(self) -> int: ...
    def getChannelCount(self) -> int: ...
    def getDualMonoMode(self) -> int: ...
    def getFormat(self) -> AudioFormat: ...
    def getLogSessionId(self) -> android.media.metrics.LogSessionId: ...
    @staticmethod
    def getMaxVolume() -> float: ...
    def getMetrics(self) -> android.os.PersistableBundle: ...
    @staticmethod
    def getMinBufferSize(sampleRateInHz: int | java.jint | java.lang.Integer, channelConfig: int | java.jint | java.lang.Integer, audioFormat: int | java.jint | java.lang.Integer, /) -> int: ...
    @staticmethod
    def getMinVolume() -> float: ...
    def getNativeFrameCount(self) -> int: ...
    @staticmethod
    def getNativeOutputSampleRate(streamType: int | java.jint | java.lang.Integer, /) -> int: ...
    def getNotificationMarkerPosition(self) -> int: ...
    def getOffloadDelay(self) -> int: ...
    def getOffloadPadding(self) -> int: ...
    def getPerformanceMode(self) -> int: ...
    def getPlayState(self) -> int: ...
    def getPlaybackHeadPosition(self) -> int: ...
    def getPlaybackParams(self) -> PlaybackParams: ...
    def getPlaybackRate(self) -> int: ...
    def getPositionNotificationPeriod(self) -> int: ...
    def getPreferredDevice(self) -> AudioDeviceInfo: ...
    def getRoutedDevice(self) -> AudioDeviceInfo: ...
    def getRoutedDevices(self) -> java.util.List[AudioDeviceInfo]: ...
    def getSampleRate(self) -> int: ...
    def getStartThresholdInFrames(self) -> int: ...
    def getState(self) -> int: ...
    def getStreamType(self) -> int: ...
    def getTimestamp(self, timestamp: AudioTimestamp, /) -> bool: ...
    def getUnderrunCount(self) -> int: ...
    @staticmethod
    def isDirectPlaybackSupported(format: AudioFormat, attributes: AudioAttributes, /) -> bool: ...
    def isOffloadedPlayback(self) -> bool: ...
    def pause(self) -> None: ...
    def play(self) -> None: ...
    def registerStreamEventCallback(self, executor: java.util.concurrent.Executor, eventCallback: AudioTrack.StreamEventCallback, /) -> None: ...
    def release(self) -> None: ...
    def reloadStaticData(self) -> int: ...
    def removeOnCodecFormatChangedListener(self, listener: AudioTrack.OnCodecFormatChangedListener, /) -> None: ...
    @typing.overload
    def removeOnRoutingChangedListener(self, listener: AudioRouting.OnRoutingChangedListener, /) -> None: ...
    @typing.overload
    def removeOnRoutingChangedListener(self, listener: AudioTrack.OnRoutingChangedListener, /) -> None: ...
    def setAudioDescriptionMixLeveldB(self, level: float | java.jfloat | java.lang.Float, /) -> bool: ...
    def setAuxEffectSendLevel(self, level: float | java.jfloat | java.lang.Float, /) -> int: ...
    def setBufferSizeInFrames(self, bufferSizeInFrames: int | java.jint | java.lang.Integer, /) -> int: ...
    def setDualMonoMode(self, dualMonoMode: int | java.jint | java.lang.Integer, /) -> bool: ...
    def setLogSessionId(self, logSessionId: android.media.metrics.LogSessionId, /) -> None: ...
    def setLoopPoints(self, startInFrames: int | java.jint | java.lang.Integer, endInFrames: int | java.jint | java.lang.Integer, loopCount: int | java.jint | java.lang.Integer, /) -> int: ...
    def setNotificationMarkerPosition(self, markerInFrames: int | java.jint | java.lang.Integer, /) -> int: ...
    def setOffloadDelayPadding(self, delayInFrames: int | java.jint | java.lang.Integer, paddingInFrames: int | java.jint | java.lang.Integer, /) -> None: ...
    def setOffloadEndOfStream(self) -> None: ...
    def setPlaybackHeadPosition(self, positionInFrames: int | java.jint | java.lang.Integer, /) -> int: ...
    def setPlaybackParams(self, params: PlaybackParams, /) -> None: ...
    @typing.overload
    def setPlaybackPositionUpdateListener(self, listener: AudioTrack.OnPlaybackPositionUpdateListener, /) -> None: ...
    @typing.overload
    def setPlaybackPositionUpdateListener(self, listener: AudioTrack.OnPlaybackPositionUpdateListener, handler: android.os.Handler, /) -> None: ...
    def setPlaybackRate(self, sampleRateInHz: int | java.jint | java.lang.Integer, /) -> int: ...
    def setPositionNotificationPeriod(self, periodInFrames: int | java.jint | java.lang.Integer, /) -> int: ...
    def setPreferredDevice(self, deviceInfo: AudioDeviceInfo, /) -> bool: ...
    def setPresentation(self, presentation: AudioPresentation, /) -> int: ...
    def setStartThresholdInFrames(self, startThresholdInFrames: int | java.jint | java.lang.Integer, /) -> int: ...
    def setState(self, state: int | java.jint | java.lang.Integer, /) -> None: ...
    def setStereoVolume(self, leftGain: float | java.jfloat | java.lang.Float, rightGain: float | java.jfloat | java.lang.Float, /) -> int: ...
    def setVolume(self, gain: float | java.jfloat | java.lang.Float, /) -> int: ...
    def stop(self) -> None: ...
    def unregisterStreamEventCallback(self, eventCallback: AudioTrack.StreamEventCallback, /) -> None: ...
    @typing.overload
    def write(self, audioData: java.nio.ByteBuffer, sizeInBytes: int | java.jint | java.lang.Integer, writeMode: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    def write(self, audioData: java.chaquopy.JavaArrayJByte, offsetInBytes: int | java.jint | java.lang.Integer, sizeInBytes: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    def write(self, audioData: java.chaquopy.JavaArrayJShort, offsetInShorts: int | java.jint | java.lang.Integer, sizeInShorts: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    def write(self, audioData: java.nio.ByteBuffer, sizeInBytes: int | java.jint | java.lang.Integer, writeMode: int | java.jint | java.lang.Integer, timestamp: int | java.jlong | java.lang.Long, /) -> int: ...
    @typing.overload
    def write(self, audioData: java.chaquopy.JavaArrayJByte, offsetInBytes: int | java.jint | java.lang.Integer, sizeInBytes: int | java.jint | java.lang.Integer, writeMode: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    def write(self, audioData: java.chaquopy.JavaArrayJFloat, offsetInFloats: int | java.jint | java.lang.Integer, sizeInFloats: int | java.jint | java.lang.Integer, writeMode: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    def write(self, audioData: java.chaquopy.JavaArrayJShort, offsetInShorts: int | java.jint | java.lang.Integer, sizeInShorts: int | java.jint | java.lang.Integer, writeMode: int | java.jint | java.lang.Integer, /) -> int: ...

    class StreamEventCallback(java.lang.Object):
        def __init__(self) -> None: ...
        def onDataRequest(self, track: AudioTrack, sizeInFrames: int | java.jint | java.lang.Integer, /) -> None: ...
        def onPresentationEnded(self, track: AudioTrack, /) -> None: ...
        def onTearDown(self, track: AudioTrack, /) -> None: ...

    class OnRoutingChangedListener(AudioRouting.OnRoutingChangedListener):
        @typing.overload
        def onRoutingChanged(self, router: AudioRouting, /) -> None: ...
        @typing.overload
        def onRoutingChanged(self, arg1: AudioTrack, /) -> None: ...

    class OnPlaybackPositionUpdateListener(java.lang.Object):
        def onMarkerReached(self, arg1: AudioTrack, /) -> None: ...
        def onPeriodicNotification(self, arg1: AudioTrack, /) -> None: ...

    class OnCodecFormatChangedListener(java.lang.Object):
        def onCodecFormatChanged(self, arg1: AudioTrack, arg2: AudioMetadataReadMap, /) -> None: ...

    class MetricsConstants(java.lang.Object):
        CHANNELMASK: typing.ClassVar[str] = ...
        CONTENTTYPE: typing.ClassVar[str] = ...
        SAMPLERATE: typing.ClassVar[str] = ...
        STREAMTYPE: typing.ClassVar[str] = ...
        USAGE: typing.ClassVar[str] = ...

    class Builder(java.lang.Object):
        def __init__(self) -> None: ...
        def build(self) -> AudioTrack: ...
        def setAudioAttributes(self, attributes: AudioAttributes, /) -> AudioTrack.Builder: ...
        def setAudioFormat(self, format: AudioFormat, /) -> AudioTrack.Builder: ...
        def setBufferSizeInBytes(self, bufferSizeInBytes: int | java.jint | java.lang.Integer, /) -> AudioTrack.Builder: ...
        def setContext(self, context: android.content.Context, /) -> AudioTrack.Builder: ...
        def setEncapsulationMode(self, encapsulationMode: int | java.jint | java.lang.Integer, /) -> AudioTrack.Builder: ...
        def setOffloadedPlayback(self, offload: bool | java.jboolean | java.lang.Boolean, /) -> AudioTrack.Builder: ...
        def setPerformanceMode(self, performanceMode: int | java.jint | java.lang.Integer, /) -> AudioTrack.Builder: ...
        def setSessionId(self, sessionId: int | java.jint | java.lang.Integer, /) -> AudioTrack.Builder: ...
        def setTransferMode(self, mode: int | java.jint | java.lang.Integer, /) -> AudioTrack.Builder: ...

class CamcorderProfile(java.lang.Object):
    QUALITY_1080P: typing.ClassVar[int] = ...
    QUALITY_2160P: typing.ClassVar[int] = ...
    QUALITY_2K: typing.ClassVar[int] = ...
    QUALITY_480P: typing.ClassVar[int] = ...
    QUALITY_4KDCI: typing.ClassVar[int] = ...
    QUALITY_720P: typing.ClassVar[int] = ...
    QUALITY_8KUHD: typing.ClassVar[int] = ...
    QUALITY_CIF: typing.ClassVar[int] = ...
    QUALITY_HIGH: typing.ClassVar[int] = ...
    QUALITY_HIGH_SPEED_1080P: typing.ClassVar[int] = ...
    QUALITY_HIGH_SPEED_2160P: typing.ClassVar[int] = ...
    QUALITY_HIGH_SPEED_480P: typing.ClassVar[int] = ...
    QUALITY_HIGH_SPEED_4KDCI: typing.ClassVar[int] = ...
    QUALITY_HIGH_SPEED_720P: typing.ClassVar[int] = ...
    QUALITY_HIGH_SPEED_CIF: typing.ClassVar[int] = ...
    QUALITY_HIGH_SPEED_HIGH: typing.ClassVar[int] = ...
    QUALITY_HIGH_SPEED_LOW: typing.ClassVar[int] = ...
    QUALITY_HIGH_SPEED_VGA: typing.ClassVar[int] = ...
    QUALITY_LOW: typing.ClassVar[int] = ...
    QUALITY_QCIF: typing.ClassVar[int] = ...
    QUALITY_QHD: typing.ClassVar[int] = ...
    QUALITY_QVGA: typing.ClassVar[int] = ...
    QUALITY_TIME_LAPSE_1080P: typing.ClassVar[int] = ...
    QUALITY_TIME_LAPSE_2160P: typing.ClassVar[int] = ...
    QUALITY_TIME_LAPSE_2K: typing.ClassVar[int] = ...
    QUALITY_TIME_LAPSE_480P: typing.ClassVar[int] = ...
    QUALITY_TIME_LAPSE_4KDCI: typing.ClassVar[int] = ...
    QUALITY_TIME_LAPSE_720P: typing.ClassVar[int] = ...
    QUALITY_TIME_LAPSE_8KUHD: typing.ClassVar[int] = ...
    QUALITY_TIME_LAPSE_CIF: typing.ClassVar[int] = ...
    QUALITY_TIME_LAPSE_HIGH: typing.ClassVar[int] = ...
    QUALITY_TIME_LAPSE_LOW: typing.ClassVar[int] = ...
    QUALITY_TIME_LAPSE_QCIF: typing.ClassVar[int] = ...
    QUALITY_TIME_LAPSE_QHD: typing.ClassVar[int] = ...
    QUALITY_TIME_LAPSE_QVGA: typing.ClassVar[int] = ...
    QUALITY_TIME_LAPSE_VGA: typing.ClassVar[int] = ...
    QUALITY_VGA: typing.ClassVar[int] = ...
    audioBitRate: int = ...
    audioChannels: int = ...
    audioCodec: int = ...
    audioSampleRate: int = ...
    duration: int = ...
    fileFormat: int = ...
    quality: int = ...
    videoBitRate: int = ...
    videoCodec: int = ...
    videoFrameHeight: int = ...
    videoFrameRate: int = ...
    videoFrameWidth: int = ...
    @typing.overload
    @staticmethod
    def get(quality: int | java.jint | java.lang.Integer, /) -> CamcorderProfile: ...
    @typing.overload
    @staticmethod
    def get(cameraId: int | java.jint | java.lang.Integer, quality: int | java.jint | java.lang.Integer, /) -> CamcorderProfile: ...
    @staticmethod
    def getAll(cameraId: str | java.lang.String, quality: int | java.jint | java.lang.Integer, /) -> EncoderProfiles | None: ...
    @typing.overload
    @staticmethod
    def hasProfile(quality: int | java.jint | java.lang.Integer, /) -> bool: ...
    @typing.overload
    @staticmethod
    def hasProfile(cameraId: int | java.jint | java.lang.Integer, quality: int | java.jint | java.lang.Integer, /) -> bool: ...

class CameraProfile(java.lang.Object):
    QUALITY_HIGH: typing.ClassVar[int] = ...
    QUALITY_LOW: typing.ClassVar[int] = ...
    QUALITY_MEDIUM: typing.ClassVar[int] = ...
    def __init__(self) -> None: ...
    @typing.overload
    @staticmethod
    def getJpegEncodingQualityParameter(quality: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    @staticmethod
    def getJpegEncodingQualityParameter(cameraId: int | java.jint | java.lang.Integer, quality: int | java.jint | java.lang.Integer, /) -> int: ...

class DeniedByServerException(MediaDrmException):
    def __init__(self, detailMessage: str | java.lang.String, /) -> None: ...

class DrmInitData(java.lang.Object):
    def get(self, arg1: java.util.UUID, /) -> DrmInitData.SchemeInitData | None: ...
    def getSchemeInitDataAt(self, index: int | java.jint | java.lang.Integer, /) -> DrmInitData.SchemeInitData: ...
    def getSchemeInitDataCount(self) -> int: ...

    class SchemeInitData(java.lang.Object):
        UUID_NIL: typing.ClassVar[java.util.UUID] = ...
        data: java.chaquopy.JavaArrayJByte = ...
        mimeType: str = ...
        uuid: java.util.UUID = ...
        def __init__(self, uuid: java.util.UUID, mimeType: str | java.lang.String, data: java.chaquopy.JavaArrayJByte, /) -> None: ...
        def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
        def hashCode(self) -> int: ...

class EncoderProfiles(java.lang.Object):
    def getAudioProfiles(self) -> java.util.List[EncoderProfiles.AudioProfile]: ...
    def getDefaultDurationSeconds(self) -> int: ...
    def getRecommendedFileFormat(self) -> int: ...
    def getVideoProfiles(self) -> java.util.List[EncoderProfiles.VideoProfile]: ...

    class VideoProfile(java.lang.Object):
        HDR_DOLBY_VISION: typing.ClassVar[int] = ...
        HDR_HDR10: typing.ClassVar[int] = ...
        HDR_HDR10PLUS: typing.ClassVar[int] = ...
        HDR_HLG: typing.ClassVar[int] = ...
        HDR_NONE: typing.ClassVar[int] = ...
        YUV_420: typing.ClassVar[int] = ...
        YUV_422: typing.ClassVar[int] = ...
        YUV_444: typing.ClassVar[int] = ...
        def getBitDepth(self) -> int: ...
        def getBitrate(self) -> int: ...
        def getChromaSubsampling(self) -> int: ...
        def getCodec(self) -> int: ...
        def getFrameRate(self) -> int: ...
        def getHdrFormat(self) -> int: ...
        def getHeight(self) -> int: ...
        def getMediaType(self) -> str: ...
        def getProfile(self) -> int: ...
        def getWidth(self) -> int: ...

    class AudioProfile(java.lang.Object):
        def getBitrate(self) -> int: ...
        def getChannels(self) -> int: ...
        def getCodec(self) -> int: ...
        def getMediaType(self) -> str: ...
        def getProfile(self) -> int: ...
        def getSampleRate(self) -> int: ...

class ExifInterface(java.lang.Object):
    ORIENTATION_FLIP_HORIZONTAL: typing.ClassVar[int] = ...
    ORIENTATION_FLIP_VERTICAL: typing.ClassVar[int] = ...
    ORIENTATION_NORMAL: typing.ClassVar[int] = ...
    ORIENTATION_ROTATE_180: typing.ClassVar[int] = ...
    ORIENTATION_ROTATE_270: typing.ClassVar[int] = ...
    ORIENTATION_ROTATE_90: typing.ClassVar[int] = ...
    ORIENTATION_TRANSPOSE: typing.ClassVar[int] = ...
    ORIENTATION_TRANSVERSE: typing.ClassVar[int] = ...
    ORIENTATION_UNDEFINED: typing.ClassVar[int] = ...
    STREAM_TYPE_EXIF_DATA_ONLY: typing.ClassVar[int] = ...
    STREAM_TYPE_FULL_IMAGE_DATA: typing.ClassVar[int] = ...
    TAG_APERTURE: typing.ClassVar[str] = ...
    TAG_APERTURE_VALUE: typing.ClassVar[str] = ...
    TAG_ARTIST: typing.ClassVar[str] = ...
    TAG_BITS_PER_SAMPLE: typing.ClassVar[str] = ...
    TAG_BRIGHTNESS_VALUE: typing.ClassVar[str] = ...
    TAG_CFA_PATTERN: typing.ClassVar[str] = ...
    TAG_COLOR_SPACE: typing.ClassVar[str] = ...
    TAG_COMPONENTS_CONFIGURATION: typing.ClassVar[str] = ...
    TAG_COMPRESSED_BITS_PER_PIXEL: typing.ClassVar[str] = ...
    TAG_COMPRESSION: typing.ClassVar[str] = ...
    TAG_CONTRAST: typing.ClassVar[str] = ...
    TAG_COPYRIGHT: typing.ClassVar[str] = ...
    TAG_CUSTOM_RENDERED: typing.ClassVar[str] = ...
    TAG_DATETIME: typing.ClassVar[str] = ...
    TAG_DATETIME_DIGITIZED: typing.ClassVar[str] = ...
    TAG_DATETIME_ORIGINAL: typing.ClassVar[str] = ...
    TAG_DEFAULT_CROP_SIZE: typing.ClassVar[str] = ...
    TAG_DEVICE_SETTING_DESCRIPTION: typing.ClassVar[str] = ...
    TAG_DIGITAL_ZOOM_RATIO: typing.ClassVar[str] = ...
    TAG_DNG_VERSION: typing.ClassVar[str] = ...
    TAG_EXIF_VERSION: typing.ClassVar[str] = ...
    TAG_EXPOSURE_BIAS_VALUE: typing.ClassVar[str] = ...
    TAG_EXPOSURE_INDEX: typing.ClassVar[str] = ...
    TAG_EXPOSURE_MODE: typing.ClassVar[str] = ...
    TAG_EXPOSURE_PROGRAM: typing.ClassVar[str] = ...
    TAG_EXPOSURE_TIME: typing.ClassVar[str] = ...
    TAG_FILE_SOURCE: typing.ClassVar[str] = ...
    TAG_FLASH: typing.ClassVar[str] = ...
    TAG_FLASHPIX_VERSION: typing.ClassVar[str] = ...
    TAG_FLASH_ENERGY: typing.ClassVar[str] = ...
    TAG_FOCAL_LENGTH: typing.ClassVar[str] = ...
    TAG_FOCAL_LENGTH_IN_35MM_FILM: typing.ClassVar[str] = ...
    TAG_FOCAL_PLANE_RESOLUTION_UNIT: typing.ClassVar[str] = ...
    TAG_FOCAL_PLANE_X_RESOLUTION: typing.ClassVar[str] = ...
    TAG_FOCAL_PLANE_Y_RESOLUTION: typing.ClassVar[str] = ...
    TAG_F_NUMBER: typing.ClassVar[str] = ...
    TAG_GAIN_CONTROL: typing.ClassVar[str] = ...
    TAG_GPS_ALTITUDE: typing.ClassVar[str] = ...
    TAG_GPS_ALTITUDE_REF: typing.ClassVar[str] = ...
    TAG_GPS_AREA_INFORMATION: typing.ClassVar[str] = ...
    TAG_GPS_DATESTAMP: typing.ClassVar[str] = ...
    TAG_GPS_DEST_BEARING: typing.ClassVar[str] = ...
    TAG_GPS_DEST_BEARING_REF: typing.ClassVar[str] = ...
    TAG_GPS_DEST_DISTANCE: typing.ClassVar[str] = ...
    TAG_GPS_DEST_DISTANCE_REF: typing.ClassVar[str] = ...
    TAG_GPS_DEST_LATITUDE: typing.ClassVar[str] = ...
    TAG_GPS_DEST_LATITUDE_REF: typing.ClassVar[str] = ...
    TAG_GPS_DEST_LONGITUDE: typing.ClassVar[str] = ...
    TAG_GPS_DEST_LONGITUDE_REF: typing.ClassVar[str] = ...
    TAG_GPS_DIFFERENTIAL: typing.ClassVar[str] = ...
    TAG_GPS_DOP: typing.ClassVar[str] = ...
    TAG_GPS_IMG_DIRECTION: typing.ClassVar[str] = ...
    TAG_GPS_IMG_DIRECTION_REF: typing.ClassVar[str] = ...
    TAG_GPS_LATITUDE: typing.ClassVar[str] = ...
    TAG_GPS_LATITUDE_REF: typing.ClassVar[str] = ...
    TAG_GPS_LONGITUDE: typing.ClassVar[str] = ...
    TAG_GPS_LONGITUDE_REF: typing.ClassVar[str] = ...
    TAG_GPS_MAP_DATUM: typing.ClassVar[str] = ...
    TAG_GPS_MEASURE_MODE: typing.ClassVar[str] = ...
    TAG_GPS_PROCESSING_METHOD: typing.ClassVar[str] = ...
    TAG_GPS_SATELLITES: typing.ClassVar[str] = ...
    TAG_GPS_SPEED: typing.ClassVar[str] = ...
    TAG_GPS_SPEED_REF: typing.ClassVar[str] = ...
    TAG_GPS_STATUS: typing.ClassVar[str] = ...
    TAG_GPS_TIMESTAMP: typing.ClassVar[str] = ...
    TAG_GPS_TRACK: typing.ClassVar[str] = ...
    TAG_GPS_TRACK_REF: typing.ClassVar[str] = ...
    TAG_GPS_VERSION_ID: typing.ClassVar[str] = ...
    TAG_IMAGE_DESCRIPTION: typing.ClassVar[str] = ...
    TAG_IMAGE_LENGTH: typing.ClassVar[str] = ...
    TAG_IMAGE_UNIQUE_ID: typing.ClassVar[str] = ...
    TAG_IMAGE_WIDTH: typing.ClassVar[str] = ...
    TAG_INTEROPERABILITY_INDEX: typing.ClassVar[str] = ...
    TAG_ISO: typing.ClassVar[str] = ...
    TAG_ISO_SPEED_RATINGS: typing.ClassVar[str] = ...
    TAG_JPEG_INTERCHANGE_FORMAT: typing.ClassVar[str] = ...
    TAG_JPEG_INTERCHANGE_FORMAT_LENGTH: typing.ClassVar[str] = ...
    TAG_LIGHT_SOURCE: typing.ClassVar[str] = ...
    TAG_MAKE: typing.ClassVar[str] = ...
    TAG_MAKER_NOTE: typing.ClassVar[str] = ...
    TAG_MAX_APERTURE_VALUE: typing.ClassVar[str] = ...
    TAG_METERING_MODE: typing.ClassVar[str] = ...
    TAG_MODEL: typing.ClassVar[str] = ...
    TAG_NEW_SUBFILE_TYPE: typing.ClassVar[str] = ...
    TAG_OECF: typing.ClassVar[str] = ...
    TAG_OFFSET_TIME: typing.ClassVar[str] = ...
    TAG_OFFSET_TIME_DIGITIZED: typing.ClassVar[str] = ...
    TAG_OFFSET_TIME_ORIGINAL: typing.ClassVar[str] = ...
    TAG_ORF_ASPECT_FRAME: typing.ClassVar[str] = ...
    TAG_ORF_PREVIEW_IMAGE_LENGTH: typing.ClassVar[str] = ...
    TAG_ORF_PREVIEW_IMAGE_START: typing.ClassVar[str] = ...
    TAG_ORF_THUMBNAIL_IMAGE: typing.ClassVar[str] = ...
    TAG_ORIENTATION: typing.ClassVar[str] = ...
    TAG_PHOTOMETRIC_INTERPRETATION: typing.ClassVar[str] = ...
    TAG_PIXEL_X_DIMENSION: typing.ClassVar[str] = ...
    TAG_PIXEL_Y_DIMENSION: typing.ClassVar[str] = ...
    TAG_PLANAR_CONFIGURATION: typing.ClassVar[str] = ...
    TAG_PRIMARY_CHROMATICITIES: typing.ClassVar[str] = ...
    TAG_REFERENCE_BLACK_WHITE: typing.ClassVar[str] = ...
    TAG_RELATED_SOUND_FILE: typing.ClassVar[str] = ...
    TAG_RESOLUTION_UNIT: typing.ClassVar[str] = ...
    TAG_ROWS_PER_STRIP: typing.ClassVar[str] = ...
    TAG_RW2_ISO: typing.ClassVar[str] = ...
    TAG_RW2_JPG_FROM_RAW: typing.ClassVar[str] = ...
    TAG_RW2_SENSOR_BOTTOM_BORDER: typing.ClassVar[str] = ...
    TAG_RW2_SENSOR_LEFT_BORDER: typing.ClassVar[str] = ...
    TAG_RW2_SENSOR_RIGHT_BORDER: typing.ClassVar[str] = ...
    TAG_RW2_SENSOR_TOP_BORDER: typing.ClassVar[str] = ...
    TAG_SAMPLES_PER_PIXEL: typing.ClassVar[str] = ...
    TAG_SATURATION: typing.ClassVar[str] = ...
    TAG_SCENE_CAPTURE_TYPE: typing.ClassVar[str] = ...
    TAG_SCENE_TYPE: typing.ClassVar[str] = ...
    TAG_SENSING_METHOD: typing.ClassVar[str] = ...
    TAG_SHARPNESS: typing.ClassVar[str] = ...
    TAG_SHUTTER_SPEED_VALUE: typing.ClassVar[str] = ...
    TAG_SOFTWARE: typing.ClassVar[str] = ...
    TAG_SPATIAL_FREQUENCY_RESPONSE: typing.ClassVar[str] = ...
    TAG_SPECTRAL_SENSITIVITY: typing.ClassVar[str] = ...
    TAG_STRIP_BYTE_COUNTS: typing.ClassVar[str] = ...
    TAG_STRIP_OFFSETS: typing.ClassVar[str] = ...
    TAG_SUBFILE_TYPE: typing.ClassVar[str] = ...
    TAG_SUBJECT_AREA: typing.ClassVar[str] = ...
    TAG_SUBJECT_DISTANCE: typing.ClassVar[str] = ...
    TAG_SUBJECT_DISTANCE_RANGE: typing.ClassVar[str] = ...
    TAG_SUBJECT_LOCATION: typing.ClassVar[str] = ...
    TAG_SUBSEC_TIME: typing.ClassVar[str] = ...
    TAG_SUBSEC_TIME_DIG: typing.ClassVar[str] = ...
    TAG_SUBSEC_TIME_DIGITIZED: typing.ClassVar[str] = ...
    TAG_SUBSEC_TIME_ORIG: typing.ClassVar[str] = ...
    TAG_SUBSEC_TIME_ORIGINAL: typing.ClassVar[str] = ...
    TAG_THUMBNAIL_IMAGE_LENGTH: typing.ClassVar[str] = ...
    TAG_THUMBNAIL_IMAGE_WIDTH: typing.ClassVar[str] = ...
    TAG_THUMBNAIL_ORIENTATION: typing.ClassVar[str] = ...
    TAG_TRANSFER_FUNCTION: typing.ClassVar[str] = ...
    TAG_USER_COMMENT: typing.ClassVar[str] = ...
    TAG_WHITE_BALANCE: typing.ClassVar[str] = ...
    TAG_WHITE_POINT: typing.ClassVar[str] = ...
    TAG_XMP: typing.ClassVar[str] = ...
    TAG_X_RESOLUTION: typing.ClassVar[str] = ...
    TAG_Y_CB_CR_COEFFICIENTS: typing.ClassVar[str] = ...
    TAG_Y_CB_CR_POSITIONING: typing.ClassVar[str] = ...
    TAG_Y_CB_CR_SUB_SAMPLING: typing.ClassVar[str] = ...
    TAG_Y_RESOLUTION: typing.ClassVar[str] = ...
    WHITEBALANCE_AUTO: typing.ClassVar[int] = ...
    WHITEBALANCE_MANUAL: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self, file: java.io.File, /) -> None: ...
    @typing.overload
    def __init__(self, fileDescriptor: java.io.FileDescriptor, /) -> None: ...
    @typing.overload
    def __init__(self, inputStream: java.io.InputStream, /) -> None: ...
    @typing.overload
    def __init__(self, filename: str | java.lang.String, /) -> None: ...
    @typing.overload
    def __init__(self, inputStream: java.io.InputStream, streamType: int | java.jint | java.lang.Integer, /) -> None: ...
    def getAltitude(self, defaultValue: float | java.jdouble | java.lang.Double, /) -> float: ...
    def getAttribute(self, tag: str | java.lang.String, /) -> str | None: ...
    def getAttributeBytes(self, tag: str | java.lang.String, /) -> java.chaquopy.JavaArrayJByte | None: ...
    def getAttributeDouble(self, tag: str | java.lang.String, defaultValue: float | java.jdouble | java.lang.Double, /) -> float: ...
    def getAttributeInt(self, tag: str | java.lang.String, defaultValue: int | java.jint | java.lang.Integer, /) -> int: ...
    def getAttributeRange(self, tag: str | java.lang.String, /) -> java.chaquopy.JavaArrayJLong | None: ...
    def getDateTime(self) -> int: ...
    def getDateTimeDigitized(self) -> int: ...
    def getDateTimeOriginal(self) -> int: ...
    def getGpsDateTime(self) -> int: ...
    def getLatLong(self, output: java.chaquopy.JavaArrayJFloat, /) -> bool: ...
    def getThumbnail(self) -> java.chaquopy.JavaArrayJByte: ...
    def getThumbnailBitmap(self) -> android.graphics.Bitmap: ...
    def getThumbnailBytes(self) -> java.chaquopy.JavaArrayJByte: ...
    def getThumbnailRange(self) -> java.chaquopy.JavaArrayJLong | None: ...
    def hasAttribute(self, tag: str | java.lang.String, /) -> bool: ...
    def hasThumbnail(self) -> bool: ...
    @staticmethod
    def isSupportedMimeType(mimeType: str | java.lang.String, /) -> bool: ...
    def isThumbnailCompressed(self) -> bool: ...
    def saveAttributes(self) -> None: ...
    def setAttribute(self, tag: str | java.lang.String, value: str | java.lang.String, /) -> None: ...

class FaceDetector(java.lang.Object):
    def __init__(self, width: int | java.jint | java.lang.Integer, height: int | java.jint | java.lang.Integer, maxFaces: int | java.jint | java.lang.Integer, /) -> None: ...
    def finalize(self) -> None: ...
    def findFaces(self, bitmap: android.graphics.Bitmap, faces: java.chaquopy.JavaArray[FaceDetector.Face], /) -> int: ...

    class Face(java.lang.Object):
        CONFIDENCE_THRESHOLD: typing.ClassVar[float] = ...
        EULER_X: typing.ClassVar[int] = ...
        EULER_Y: typing.ClassVar[int] = ...
        EULER_Z: typing.ClassVar[int] = ...
        def confidence(self) -> float: ...
        def eyesDistance(self) -> float: ...
        def getMidPoint(self, point: android.graphics.PointF, /) -> None: ...
        def pose(self, euler: int | java.jint | java.lang.Integer, /) -> float: ...

class Image(java.lang.AutoCloseable):
    def close(self) -> None: ...
    def getCropRect(self) -> android.graphics.Rect: ...
    def getDataSpace(self) -> int: ...
    def getFence(self) -> android.hardware.SyncFence: ...
    def getFormat(self) -> int: ...
    def getHardwareBuffer(self) -> android.hardware.HardwareBuffer | None: ...
    def getHeight(self) -> int: ...
    def getPlanes(self) -> java.chaquopy.JavaArray[Image.Plane]: ...
    def getTimestamp(self) -> int: ...
    def getWidth(self) -> int: ...
    def setCropRect(self, cropRect: android.graphics.Rect, /) -> None: ...
    def setDataSpace(self, dataSpace: int | java.jint | java.lang.Integer, /) -> None: ...
    def setFence(self, fence: android.hardware.SyncFence, /) -> None: ...
    def setTimestamp(self, timestamp: int | java.jlong | java.lang.Long, /) -> None: ...

    class Plane(java.lang.Object):
        def getBuffer(self) -> java.nio.ByteBuffer: ...
        def getPixelStride(self) -> int: ...
        def getRowStride(self) -> int: ...

class ImageReader(java.lang.AutoCloseable):
    def acquireLatestImage(self) -> Image: ...
    def acquireNextImage(self) -> Image: ...
    def close(self) -> None: ...
    def discardFreeBuffers(self) -> None: ...
    def finalize(self) -> None: ...
    def getDataSpace(self) -> int: ...
    def getHardwareBufferFormat(self) -> int: ...
    def getHeight(self) -> int: ...
    def getImageFormat(self) -> int: ...
    def getMaxImages(self) -> int: ...
    def getSurface(self) -> android.view.Surface: ...
    def getUsage(self) -> int: ...
    def getWidth(self) -> int: ...
    @typing.overload
    @staticmethod
    def newInstance(width: int | java.jint | java.lang.Integer, height: int | java.jint | java.lang.Integer, format: int | java.jint | java.lang.Integer, maxImages: int | java.jint | java.lang.Integer, /) -> ImageReader: ...
    @typing.overload
    @staticmethod
    def newInstance(width: int | java.jint | java.lang.Integer, height: int | java.jint | java.lang.Integer, format: int | java.jint | java.lang.Integer, maxImages: int | java.jint | java.lang.Integer, usage: int | java.jlong | java.lang.Long, /) -> ImageReader: ...
    def setOnImageAvailableListener(self, listener: ImageReader.OnImageAvailableListener, handler: android.os.Handler, /) -> None: ...

    class OnImageAvailableListener(java.lang.Object):
        def onImageAvailable(self, arg1: ImageReader, /) -> None: ...

    class Builder(java.lang.Object):
        def __init__(self, width: int | java.jint | java.lang.Integer, height: int | java.jint | java.lang.Integer, /) -> None: ...
        def build(self) -> ImageReader: ...
        def setDefaultDataSpace(self, dataSpace: int | java.jint | java.lang.Integer, /) -> ImageReader.Builder: ...
        def setDefaultHardwareBufferFormat(self, hardwareBufferFormat: int | java.jint | java.lang.Integer, /) -> ImageReader.Builder: ...
        def setImageFormat(self, imageFormat: int | java.jint | java.lang.Integer, /) -> ImageReader.Builder: ...
        def setMaxImages(self, maxImages: int | java.jint | java.lang.Integer, /) -> ImageReader.Builder: ...
        def setUsage(self, usage: int | java.jlong | java.lang.Long, /) -> ImageReader.Builder: ...

class ImageWriter(java.lang.AutoCloseable):
    def close(self) -> None: ...
    def dequeueInputImage(self) -> Image: ...
    def finalize(self) -> None: ...
    def getDataSpace(self) -> int: ...
    def getFormat(self) -> int: ...
    def getHardwareBufferFormat(self) -> int: ...
    def getHeight(self) -> int: ...
    def getMaxImages(self) -> int: ...
    def getUsage(self) -> int: ...
    def getWidth(self) -> int: ...
    @typing.overload
    @staticmethod
    def newInstance(surface: android.view.Surface, maxImages: int | java.jint | java.lang.Integer, /) -> ImageWriter: ...
    @typing.overload
    @staticmethod
    def newInstance(surface: android.view.Surface, maxImages: int | java.jint | java.lang.Integer, format: int | java.jint | java.lang.Integer, /) -> ImageWriter: ...
    def queueInputImage(self, image: Image, /) -> None: ...
    def setOnImageReleasedListener(self, listener: ImageWriter.OnImageReleasedListener, handler: android.os.Handler, /) -> None: ...

    class OnImageReleasedListener(java.lang.Object):
        def onImageReleased(self, arg1: ImageWriter, /) -> None: ...

    class Builder(java.lang.Object):
        def __init__(self, surface: android.view.Surface, /) -> None: ...
        def build(self) -> ImageWriter: ...
        def setDataSpace(self, dataSpace: int | java.jint | java.lang.Integer, /) -> ImageWriter.Builder: ...
        def setHardwareBufferFormat(self, hardwareBufferFormat: int | java.jint | java.lang.Integer, /) -> ImageWriter.Builder: ...
        def setImageFormat(self, imageFormat: int | java.jint | java.lang.Integer, /) -> ImageWriter.Builder: ...
        def setMaxImages(self, maxImages: int | java.jint | java.lang.Integer, /) -> ImageWriter.Builder: ...
        def setUsage(self, usage: int | java.jlong | java.lang.Long, /) -> ImageWriter.Builder: ...
        def setWidthAndHeight(self, width: int | java.jint | java.lang.Integer, height: int | java.jint | java.lang.Integer, /) -> ImageWriter.Builder: ...

class JetPlayer(java.lang.Object):
    def clearQueue(self) -> bool: ...
    def clone(self) -> java.lang.Object: ...
    def closeJetFile(self) -> bool: ...
    def finalize(self) -> None: ...
    @staticmethod
    def getJetPlayer() -> JetPlayer: ...
    @staticmethod
    def getMaxTracks() -> int: ...
    @typing.overload
    def loadJetFile(self, afd: android.content.res.AssetFileDescriptor, /) -> bool: ...
    @typing.overload
    def loadJetFile(self, path: str | java.lang.String, /) -> bool: ...
    def pause(self) -> bool: ...
    def play(self) -> bool: ...
    def queueJetSegment(self, segmentNum: int | java.jint | java.lang.Integer, libNum: int | java.jint | java.lang.Integer, repeatCount: int | java.jint | java.lang.Integer, transpose: int | java.jint | java.lang.Integer, muteFlags: int | java.jint | java.lang.Integer, userID: int | java.jbyte | java.lang.Byte, /) -> bool: ...
    def queueJetSegmentMuteArray(self, segmentNum: int | java.jint | java.lang.Integer, libNum: int | java.jint | java.lang.Integer, repeatCount: int | java.jint | java.lang.Integer, transpose: int | java.jint | java.lang.Integer, muteArray: java.chaquopy.JavaArrayJBoolean, userID: int | java.jbyte | java.lang.Byte, /) -> bool: ...
    def release(self) -> None: ...
    @typing.overload
    def setEventListener(self, listener: JetPlayer.OnJetEventListener, /) -> None: ...
    @typing.overload
    def setEventListener(self, listener: JetPlayer.OnJetEventListener, handler: android.os.Handler, /) -> None: ...
    def setMuteArray(self, muteArray: java.chaquopy.JavaArrayJBoolean, sync: bool | java.jboolean | java.lang.Boolean, /) -> bool: ...
    def setMuteFlag(self, trackId: int | java.jint | java.lang.Integer, muteFlag: bool | java.jboolean | java.lang.Boolean, sync: bool | java.jboolean | java.lang.Boolean, /) -> bool: ...
    def setMuteFlags(self, muteFlags: int | java.jint | java.lang.Integer, sync: bool | java.jboolean | java.lang.Boolean, /) -> bool: ...
    def triggerClip(self, clipId: int | java.jint | java.lang.Integer, /) -> bool: ...

    class OnJetEventListener(java.lang.Object):
        def onJetEvent(self, arg1: JetPlayer, arg2: int | java.jshort | java.lang.Short, arg3: int | java.jbyte | java.lang.Byte, arg4: int | java.jbyte | java.lang.Byte, arg5: int | java.jbyte | java.lang.Byte, arg6: int | java.jbyte | java.lang.Byte, /) -> None: ...
        def onJetNumQueuedSegmentUpdate(self, arg1: JetPlayer, arg2: int | java.jint | java.lang.Integer, /) -> None: ...
        def onJetPauseUpdate(self, arg1: JetPlayer, arg2: int | java.jint | java.lang.Integer, /) -> None: ...
        def onJetUserIdUpdate(self, arg1: JetPlayer, arg2: int | java.jint | java.lang.Integer, arg3: int | java.jint | java.lang.Integer, /) -> None: ...

class LoudnessCodecController(java.lang.AutoCloseable):
    def addMediaCodec(self, mediaCodec: MediaCodec, /) -> bool: ...
    def close(self) -> None: ...
    @typing.overload
    @staticmethod
    def create(sessionId: int | java.jint | java.lang.Integer, /) -> LoudnessCodecController: ...
    @typing.overload
    @staticmethod
    def create(sessionId: int | java.jint | java.lang.Integer, executor: java.util.concurrent.Executor, listener: LoudnessCodecController.OnLoudnessCodecUpdateListener, /) -> LoudnessCodecController: ...
    def getLoudnessCodecParams(self, mediaCodec: MediaCodec, /) -> android.os.Bundle: ...
    def removeMediaCodec(self, mediaCodec: MediaCodec, /) -> None: ...

    class OnLoudnessCodecUpdateListener(java.lang.Object):
        def onLoudnessCodecUpdate(self, mediaCodec: MediaCodec, codecValues: android.os.Bundle, /) -> android.os.Bundle: ...

class MediaActionSound(java.lang.Object):
    FOCUS_COMPLETE: typing.ClassVar[int] = ...
    SHUTTER_CLICK: typing.ClassVar[int] = ...
    START_VIDEO_RECORDING: typing.ClassVar[int] = ...
    STOP_VIDEO_RECORDING: typing.ClassVar[int] = ...
    def __init__(self) -> None: ...
    def load(self, soundName: int | java.jint | java.lang.Integer, /) -> None: ...
    @staticmethod
    def mustPlayShutterSound() -> bool: ...
    def play(self, soundName: int | java.jint | java.lang.Integer, /) -> None: ...
    def release(self) -> None: ...

class MediaCas(java.lang.AutoCloseable):
    PLUGIN_STATUS_PHYSICAL_MODULE_CHANGED: typing.ClassVar[int] = ...
    PLUGIN_STATUS_SESSION_NUMBER_CHANGED: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_AES128: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_AES_CBC: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_AES_ECB: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_AES_SCTE52: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_DVB_CISSA_V1: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_DVB_CSA1: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_DVB_CSA2: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_DVB_CSA3_ENHANCE: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_DVB_CSA3_MINIMAL: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_DVB_CSA3_STANDARD: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_DVB_IDSA: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_MULTI2: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_RESERVED: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_TDES_ECB: typing.ClassVar[int] = ...
    SCRAMBLING_MODE_TDES_SCTE52: typing.ClassVar[int] = ...
    SESSION_USAGE_LIVE: typing.ClassVar[int] = ...
    SESSION_USAGE_PLAYBACK: typing.ClassVar[int] = ...
    SESSION_USAGE_RECORD: typing.ClassVar[int] = ...
    SESSION_USAGE_TIMESHIFT: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self, casSystemId: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, context: android.content.Context, casSystemId: int | java.jint | java.lang.Integer, tvInputServiceSessionId: str | java.lang.String, priorityHint: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, context: android.content.Context, casSystemId: int | java.jint | java.lang.Integer, tvInputServiceSessionId: str | java.lang.String, priorityHint: int | java.jint | java.lang.Integer, handler: android.os.Handler, listener: MediaCas.EventListener, /) -> None: ...
    def close(self) -> None: ...
    @staticmethod
    def enumeratePlugins() -> java.chaquopy.JavaArray[MediaCas.PluginDescriptor]: ...
    def finalize(self) -> None: ...
    @staticmethod
    def isSystemIdSupported(CA_system_id: int | java.jint | java.lang.Integer, /) -> bool: ...
    @typing.overload
    def openSession(self) -> MediaCas.Session | None: ...
    @typing.overload
    def openSession(self, sessionUsage: int | java.jint | java.lang.Integer, scramblingMode: int | java.jint | java.lang.Integer, /) -> MediaCas.Session | None: ...
    @typing.overload
    def processEmm(self, data: java.chaquopy.JavaArrayJByte, /) -> None: ...
    @typing.overload
    def processEmm(self, data: java.chaquopy.JavaArrayJByte, offset: int | java.jint | java.lang.Integer, length: int | java.jint | java.lang.Integer, /) -> None: ...
    def provision(self, provisionString: str | java.lang.String, /) -> None: ...
    def refreshEntitlements(self, refreshType: int | java.jint | java.lang.Integer, refreshData: java.chaquopy.JavaArrayJByte, /) -> None: ...
    def sendEvent(self, event: int | java.jint | java.lang.Integer, arg: int | java.jint | java.lang.Integer, data: java.chaquopy.JavaArrayJByte, /) -> None: ...
    def setEventListener(self, listener: MediaCas.EventListener, handler: android.os.Handler, /) -> None: ...
    def setPrivateData(self, data: java.chaquopy.JavaArrayJByte, /) -> None: ...

    class Session(java.lang.AutoCloseable):
        def close(self) -> None: ...
        def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
        def getSessionId(self) -> java.chaquopy.JavaArrayJByte: ...
        @typing.overload
        def processEcm(self, data: java.chaquopy.JavaArrayJByte, /) -> None: ...
        @typing.overload
        def processEcm(self, data: java.chaquopy.JavaArrayJByte, offset: int | java.jint | java.lang.Integer, length: int | java.jint | java.lang.Integer, /) -> None: ...
        def sendSessionEvent(self, event: int | java.jint | java.lang.Integer, arg: int | java.jint | java.lang.Integer, data: java.chaquopy.JavaArrayJByte, /) -> None: ...
        def setPrivateData(self, data: java.chaquopy.JavaArrayJByte, /) -> None: ...

    class PluginDescriptor(java.lang.Object):
        def getName(self) -> str: ...
        def getSystemId(self) -> int: ...
        def toString(self) -> str: ...

    class EventListener(java.lang.Object):
        def onEvent(self, arg1: MediaCas, arg2: int | java.jint | java.lang.Integer, arg3: int | java.jint | java.lang.Integer, arg4: java.chaquopy.JavaArrayJByte, /) -> None: ...
        def onPluginStatusUpdate(self, mediaCas: MediaCas, status: int | java.jint | java.lang.Integer, arg: int | java.jint | java.lang.Integer, /) -> None: ...
        def onResourceLost(self, mediaCas: MediaCas, /) -> None: ...
        def onSessionEvent(self, mediaCas: MediaCas, session: MediaCas.Session, event: int | java.jint | java.lang.Integer, arg: int | java.jint | java.lang.Integer, data: java.chaquopy.JavaArrayJByte, /) -> None: ...

class MediaCasException(java.lang.Exception):

    class UnsupportedCasException(MediaCasException): ...

    class ResourceBusyException(MediaCasException): ...

    class NotProvisionedException(MediaCasException): ...

    class InsufficientResourceException(MediaCasException): ...

    class DeniedByServerException(MediaCasException): ...

class MediaCasStateException(java.lang.IllegalStateException):
    def getDiagnosticInfo(self) -> str: ...

class MediaCodec(java.lang.Object):
    BUFFER_FLAG_CODEC_CONFIG: typing.ClassVar[int] = ...
    BUFFER_FLAG_DECODE_ONLY: typing.ClassVar[int] = ...
    BUFFER_FLAG_END_OF_STREAM: typing.ClassVar[int] = ...
    BUFFER_FLAG_KEY_FRAME: typing.ClassVar[int] = ...
    BUFFER_FLAG_PARTIAL_FRAME: typing.ClassVar[int] = ...
    BUFFER_FLAG_SYNC_FRAME: typing.ClassVar[int] = ...
    CONFIGURE_FLAG_DETACHED_SURFACE: typing.ClassVar[int] = ...
    CONFIGURE_FLAG_ENCODE: typing.ClassVar[int] = ...
    CONFIGURE_FLAG_USE_BLOCK_MODEL: typing.ClassVar[int] = ...
    CONFIGURE_FLAG_USE_CRYPTO_ASYNC: typing.ClassVar[int] = ...
    CRYPTO_MODE_AES_CBC: typing.ClassVar[int] = ...
    CRYPTO_MODE_AES_CTR: typing.ClassVar[int] = ...
    CRYPTO_MODE_UNENCRYPTED: typing.ClassVar[int] = ...
    INFO_OUTPUT_BUFFERS_CHANGED: typing.ClassVar[int] = ...
    INFO_OUTPUT_FORMAT_CHANGED: typing.ClassVar[int] = ...
    INFO_TRY_AGAIN_LATER: typing.ClassVar[int] = ...
    PARAMETER_KEY_HDR10_PLUS_INFO: typing.ClassVar[str] = ...
    PARAMETER_KEY_LOW_LATENCY: typing.ClassVar[str] = ...
    PARAMETER_KEY_OFFSET_TIME: typing.ClassVar[str] = ...
    PARAMETER_KEY_QP_OFFSET_MAP: typing.ClassVar[str] = ...
    PARAMETER_KEY_QP_OFFSET_RECTS: typing.ClassVar[str] = ...
    PARAMETER_KEY_REQUEST_SYNC_FRAME: typing.ClassVar[str] = ...
    PARAMETER_KEY_SUSPEND: typing.ClassVar[str] = ...
    PARAMETER_KEY_SUSPEND_TIME: typing.ClassVar[str] = ...
    PARAMETER_KEY_TUNNEL_PEEK: typing.ClassVar[str] = ...
    PARAMETER_KEY_VIDEO_BITRATE: typing.ClassVar[str] = ...
    VIDEO_SCALING_MODE_SCALE_TO_FIT: typing.ClassVar[int] = ...
    VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING: typing.ClassVar[int] = ...
    @typing.overload
    def configure(self, format: MediaFormat, surface: android.view.Surface, flags: int | java.jint | java.lang.Integer, descrambler: MediaDescrambler, /) -> None: ...
    @typing.overload
    def configure(self, format: MediaFormat, surface: android.view.Surface, crypto: MediaCrypto, flags: int | java.jint | java.lang.Integer, /) -> None: ...
    @staticmethod
    def createByCodecName(name: str | java.lang.String, /) -> MediaCodec: ...
    @staticmethod
    def createDecoderByType(type: str | java.lang.String, /) -> MediaCodec: ...
    @staticmethod
    def createEncoderByType(type: str | java.lang.String, /) -> MediaCodec: ...
    def createInputSurface(self) -> android.view.Surface: ...
    @staticmethod
    def createPersistentInputSurface() -> android.view.Surface: ...
    def dequeueInputBuffer(self, timeoutUs: int | java.jlong | java.lang.Long, /) -> int: ...
    def dequeueOutputBuffer(self, info: MediaCodec.BufferInfo, timeoutUs: int | java.jlong | java.lang.Long, /) -> int: ...
    def detachOutputSurface(self) -> None: ...
    def finalize(self) -> None: ...
    def flush(self) -> None: ...
    def getCanonicalName(self) -> str: ...
    def getCodecInfo(self) -> MediaCodecInfo: ...
    def getInputBuffer(self, index: int | java.jint | java.lang.Integer, /) -> java.nio.ByteBuffer | None: ...
    def getInputBuffers(self) -> java.chaquopy.JavaArray[java.nio.ByteBuffer]: ...
    def getInputFormat(self) -> MediaFormat: ...
    def getInputImage(self, index: int | java.jint | java.lang.Integer, /) -> Image | None: ...
    def getMetrics(self) -> android.os.PersistableBundle: ...
    def getName(self) -> str: ...
    def getOutputBuffer(self, index: int | java.jint | java.lang.Integer, /) -> java.nio.ByteBuffer | None: ...
    def getOutputBuffers(self) -> java.chaquopy.JavaArray[java.nio.ByteBuffer]: ...
    @typing.overload
    def getOutputFormat(self) -> MediaFormat | None: ...
    @typing.overload
    def getOutputFormat(self, index: int | java.jint | java.lang.Integer, /) -> MediaFormat | None: ...
    def getOutputFrame(self, index: int | java.jint | java.lang.Integer, /) -> MediaCodec.OutputFrame: ...
    def getOutputImage(self, index: int | java.jint | java.lang.Integer, /) -> Image | None: ...
    def getParameterDescriptor(self, name: str | java.lang.String, /) -> MediaCodec.ParameterDescriptor | None: ...
    def getQueueRequest(self, index: int | java.jint | java.lang.Integer, /) -> MediaCodec.QueueRequest: ...
    def getSupportedVendorParameters(self) -> java.util.List[java.lang.String]: ...
    @staticmethod
    def mapHardwareBuffer(hardwareBuffer: android.hardware.HardwareBuffer, /) -> Image | None: ...
    def queueInputBuffer(self, index: int | java.jint | java.lang.Integer, offset: int | java.jint | java.lang.Integer, size: int | java.jint | java.lang.Integer, presentationTimeUs: int | java.jlong | java.lang.Long, flags: int | java.jint | java.lang.Integer, /) -> None: ...
    def queueInputBuffers(self, index: int | java.jint | java.lang.Integer, bufferInfos: java.util.ArrayDeque[MediaCodec.BufferInfo], /) -> None: ...
    def queueSecureInputBuffer(self, index: int | java.jint | java.lang.Integer, offset: int | java.jint | java.lang.Integer, info: MediaCodec.CryptoInfo, presentationTimeUs: int | java.jlong | java.lang.Long, flags: int | java.jint | java.lang.Integer, /) -> None: ...
    def queueSecureInputBuffers(self, index: int | java.jint | java.lang.Integer, bufferInfos: java.util.ArrayDeque[MediaCodec.BufferInfo], cryptoInfos: java.util.ArrayDeque[MediaCodec.CryptoInfo], /) -> None: ...
    def release(self) -> None: ...
    @typing.overload
    def releaseOutputBuffer(self, index: int | java.jint | java.lang.Integer, renderTimestampNs: int | java.jlong | java.lang.Long, /) -> None: ...
    @typing.overload
    def releaseOutputBuffer(self, index: int | java.jint | java.lang.Integer, render: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def reset(self) -> None: ...
    def setAudioPresentation(self, presentation: AudioPresentation, /) -> None: ...
    @typing.overload
    def setCallback(self, cb: MediaCodec.Callback, /) -> None: ...
    @typing.overload
    def setCallback(self, cb: MediaCodec.Callback, handler: android.os.Handler, /) -> None: ...
    def setInputSurface(self, surface: android.view.Surface, /) -> None: ...
    def setOnFirstTunnelFrameReadyListener(self, handler: android.os.Handler, listener: MediaCodec.OnFirstTunnelFrameReadyListener, /) -> None: ...
    def setOnFrameRenderedListener(self, listener: MediaCodec.OnFrameRenderedListener, handler: android.os.Handler, /) -> None: ...
    def setOutputSurface(self, surface: android.view.Surface, /) -> None: ...
    def setParameters(self, params: android.os.Bundle, /) -> None: ...
    def setVideoScalingMode(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
    def signalEndOfInputStream(self) -> None: ...
    def start(self) -> None: ...
    def stop(self) -> None: ...
    def subscribeToVendorParameters(self, names: java.util.List[java.lang.String], /) -> None: ...
    def unsubscribeFromVendorParameters(self, names: java.util.List[java.lang.String], /) -> None: ...

    class QueueRequest(java.lang.Object):
        def queue(self) -> None: ...
        def setByteBufferParameter(self, key: str | java.lang.String, value: java.nio.ByteBuffer, /) -> MediaCodec.QueueRequest: ...
        def setEncryptedLinearBlock(self, block: MediaCodec.LinearBlock, offset: int | java.jint | java.lang.Integer, size: int | java.jint | java.lang.Integer, cryptoInfo: MediaCodec.CryptoInfo, /) -> MediaCodec.QueueRequest: ...
        def setFlags(self, flags: int | java.jint | java.lang.Integer, /) -> MediaCodec.QueueRequest: ...
        def setFloatParameter(self, key: str | java.lang.String, value: float | java.jfloat | java.lang.Float, /) -> MediaCodec.QueueRequest: ...
        def setHardwareBuffer(self, buffer: android.hardware.HardwareBuffer, /) -> MediaCodec.QueueRequest: ...
        def setIntegerParameter(self, key: str | java.lang.String, value: int | java.jint | java.lang.Integer, /) -> MediaCodec.QueueRequest: ...
        def setLinearBlock(self, block: MediaCodec.LinearBlock, offset: int | java.jint | java.lang.Integer, size: int | java.jint | java.lang.Integer, /) -> MediaCodec.QueueRequest: ...
        def setLongParameter(self, key: str | java.lang.String, value: int | java.jlong | java.lang.Long, /) -> MediaCodec.QueueRequest: ...
        def setMultiFrameEncryptedLinearBlock(self, block: MediaCodec.LinearBlock, bufferInfos: java.util.ArrayDeque[MediaCodec.BufferInfo], cryptoInfos: java.util.ArrayDeque[MediaCodec.CryptoInfo], /) -> MediaCodec.QueueRequest: ...
        def setMultiFrameLinearBlock(self, block: MediaCodec.LinearBlock, infos: java.util.ArrayDeque[MediaCodec.BufferInfo], /) -> MediaCodec.QueueRequest: ...
        def setPresentationTimeUs(self, presentationTimeUs: int | java.jlong | java.lang.Long, /) -> MediaCodec.QueueRequest: ...
        def setStringParameter(self, key: str | java.lang.String, value: str | java.lang.String, /) -> MediaCodec.QueueRequest: ...

    class ParameterDescriptor(java.lang.Object):
        def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
        def getName(self) -> str: ...
        def getType(self) -> int: ...
        def hashCode(self) -> int: ...

    class OutputFrame(java.lang.Object):
        def getBufferInfos(self) -> java.util.ArrayDeque[MediaCodec.BufferInfo]: ...
        def getChangedKeys(self) -> java.util.Set[java.lang.String]: ...
        def getFlags(self) -> int: ...
        def getFormat(self) -> MediaFormat: ...
        def getHardwareBuffer(self) -> android.hardware.HardwareBuffer: ...
        def getLinearBlock(self) -> MediaCodec.LinearBlock: ...
        def getPresentationTimeUs(self) -> int: ...

    class OnFrameRenderedListener(java.lang.Object):
        def onFrameRendered(self, arg1: MediaCodec, arg2: int | java.jlong | java.lang.Long, arg3: int | java.jlong | java.lang.Long, /) -> None: ...

    class OnFirstTunnelFrameReadyListener(java.lang.Object):
        def onFirstTunnelFrameReady(self, arg1: MediaCodec, /) -> None: ...

    class MetricsConstants(java.lang.Object):
        CODEC: typing.ClassVar[str] = ...
        ENCODER: typing.ClassVar[str] = ...
        HEIGHT: typing.ClassVar[str] = ...
        MIME_TYPE: typing.ClassVar[str] = ...
        MODE: typing.ClassVar[str] = ...
        MODE_AUDIO: typing.ClassVar[str] = ...
        MODE_VIDEO: typing.ClassVar[str] = ...
        ROTATION: typing.ClassVar[str] = ...
        SECURE: typing.ClassVar[str] = ...
        WIDTH: typing.ClassVar[str] = ...

    class LinearBlock(java.lang.Object):
        def finalize(self) -> None: ...
        @staticmethod
        def isCodecCopyFreeCompatible(codecNames: java.chaquopy.JavaArray[java.lang.String], /) -> bool: ...
        def isMappable(self) -> bool: ...
        def map(self) -> java.nio.ByteBuffer: ...
        @staticmethod
        def obtain(capacity: int | java.jint | java.lang.Integer, codecNames: java.chaquopy.JavaArray[java.lang.String], /) -> MediaCodec.LinearBlock: ...
        def recycle(self) -> None: ...

    class InvalidBufferFlagsException(java.lang.RuntimeException): ...

    class IncompatibleWithBlockModelException(java.lang.RuntimeException): ...

    class CryptoInfo(java.lang.Object):
        iv: java.chaquopy.JavaArrayJByte = ...
        key: java.chaquopy.JavaArrayJByte = ...
        mode: int = ...
        numBytesOfClearData: java.chaquopy.JavaArrayJInt = ...
        numBytesOfEncryptedData: java.chaquopy.JavaArrayJInt = ...
        numSubSamples: int = ...
        def __init__(self) -> None: ...
        def getPattern(self) -> MediaCodec.CryptoInfo.Pattern: ...
        def set(self, newNumSubSamples: int | java.jint | java.lang.Integer, newNumBytesOfClearData: java.chaquopy.JavaArrayJInt, newNumBytesOfEncryptedData: java.chaquopy.JavaArrayJInt, newKey: java.chaquopy.JavaArrayJByte, newIV: java.chaquopy.JavaArrayJByte, newMode: int | java.jint | java.lang.Integer, /) -> None: ...
        def setPattern(self, newPattern: MediaCodec.CryptoInfo.Pattern, /) -> None: ...
        def toString(self) -> str: ...

        class Pattern(java.lang.Object):
            def __init__(self, blocksToEncrypt: int | java.jint | java.lang.Integer, blocksToSkip: int | java.jint | java.lang.Integer, /) -> None: ...
            def getEncryptBlocks(self) -> int: ...
            def getSkipBlocks(self) -> int: ...
            def set(self, blocksToEncrypt: int | java.jint | java.lang.Integer, blocksToSkip: int | java.jint | java.lang.Integer, /) -> None: ...

    class CryptoException(MediaDrmThrowable, java.lang.RuntimeException):
        ERROR_FRAME_TOO_LARGE: typing.ClassVar[int] = ...
        ERROR_INSUFFICIENT_OUTPUT_PROTECTION: typing.ClassVar[int] = ...
        ERROR_INSUFFICIENT_SECURITY: typing.ClassVar[int] = ...
        ERROR_KEY_EXPIRED: typing.ClassVar[int] = ...
        ERROR_LOST_STATE: typing.ClassVar[int] = ...
        ERROR_NO_KEY: typing.ClassVar[int] = ...
        ERROR_RESOURCE_BUSY: typing.ClassVar[int] = ...
        ERROR_SESSION_NOT_OPENED: typing.ClassVar[int] = ...
        ERROR_UNSUPPORTED_OPERATION: typing.ClassVar[int] = ...
        def __init__(self, errorCode: int | java.jint | java.lang.Integer, detailMessage: str | java.lang.String, /) -> None: ...
        def getCryptoInfo(self) -> MediaCodec.CryptoInfo: ...
        def getErrorCode(self) -> int: ...
        def getErrorContext(self) -> int: ...
        def getOemError(self) -> int: ...
        def getVendorError(self) -> int: ...

    class CodecException(java.lang.IllegalStateException):
        ERROR_INSUFFICIENT_RESOURCE: typing.ClassVar[int] = ...
        ERROR_RECLAIMED: typing.ClassVar[int] = ...
        def getDiagnosticInfo(self) -> str: ...
        def getErrorCode(self) -> int: ...
        def isRecoverable(self) -> bool: ...
        def isTransient(self) -> bool: ...

    class Callback(java.lang.Object):
        def __init__(self) -> None: ...
        def onCryptoError(self, codec: MediaCodec, e: MediaCodec.CryptoException, /) -> None: ...
        def onError(self, arg1: MediaCodec, arg2: MediaCodec.CodecException, /) -> None: ...
        def onInputBufferAvailable(self, arg1: MediaCodec, arg2: int | java.jint | java.lang.Integer, /) -> None: ...
        def onMetricsFlushed(self, codec: MediaCodec, metrics: android.os.PersistableBundle, /) -> None: ...
        def onOutputBufferAvailable(self, arg1: MediaCodec, arg2: int | java.jint | java.lang.Integer, arg3: MediaCodec.BufferInfo, /) -> None: ...
        def onOutputBuffersAvailable(self, codec: MediaCodec, index: int | java.jint | java.lang.Integer, infos: java.util.ArrayDeque[MediaCodec.BufferInfo], /) -> None: ...
        def onOutputFormatChanged(self, arg1: MediaCodec, arg2: MediaFormat, /) -> None: ...

    class BufferInfo(java.lang.Object):
        flags: int = ...
        offset: int = ...
        presentationTimeUs: int = ...
        size: int = ...
        def __init__(self) -> None: ...
        def set(self, newOffset: int | java.jint | java.lang.Integer, newSize: int | java.jint | java.lang.Integer, newTimeUs: int | java.jlong | java.lang.Long, newFlags: int | java.jint | java.lang.Integer, /) -> None: ...

class MediaCodecInfo(java.lang.Object):
    SECURITY_MODEL_MEMORY_SAFE: typing.ClassVar[int] = ...
    SECURITY_MODEL_SANDBOXED: typing.ClassVar[int] = ...
    def getCanonicalName(self) -> str: ...
    def getCapabilitiesForType(self, type: str | java.lang.String, /) -> MediaCodecInfo.CodecCapabilities: ...
    def getName(self) -> str: ...
    def getSecurityModel(self) -> int: ...
    def getSupportedTypes(self) -> java.chaquopy.JavaArray[java.lang.String]: ...
    def isAlias(self) -> bool: ...
    def isEncoder(self) -> bool: ...
    def isHardwareAccelerated(self) -> bool: ...
    def isSoftwareOnly(self) -> bool: ...
    def isVendor(self) -> bool: ...

    class VideoCapabilities(java.lang.Object):
        def areSizeAndRateSupported(self, width: int | java.jint | java.lang.Integer, height: int | java.jint | java.lang.Integer, frameRate: float | java.jdouble | java.lang.Double, /) -> bool: ...
        def getAchievableFrameRatesFor(self, width: int | java.jint | java.lang.Integer, height: int | java.jint | java.lang.Integer, /) -> android.util.Range[java.lang.Double]: ...
        def getBitrateRange(self) -> android.util.Range[java.lang.Integer]: ...
        def getHeightAlignment(self) -> int: ...
        def getSupportedFrameRates(self) -> android.util.Range[java.lang.Integer]: ...
        def getSupportedFrameRatesFor(self, width: int | java.jint | java.lang.Integer, height: int | java.jint | java.lang.Integer, /) -> android.util.Range[java.lang.Double]: ...
        def getSupportedHeights(self) -> android.util.Range[java.lang.Integer]: ...
        def getSupportedHeightsFor(self, width: int | java.jint | java.lang.Integer, /) -> android.util.Range[java.lang.Integer]: ...
        def getSupportedPerformancePoints(self) -> java.util.List[MediaCodecInfo.VideoCapabilities.PerformancePoint]: ...
        def getSupportedWidths(self) -> android.util.Range[java.lang.Integer]: ...
        def getSupportedWidthsFor(self, height: int | java.jint | java.lang.Integer, /) -> android.util.Range[java.lang.Integer]: ...
        def getWidthAlignment(self) -> int: ...
        def isSizeSupported(self, width: int | java.jint | java.lang.Integer, height: int | java.jint | java.lang.Integer, /) -> bool: ...

        class PerformancePoint(java.lang.Object):
            FHD_100: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            FHD_120: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            FHD_200: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            FHD_240: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            FHD_24: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            FHD_25: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            FHD_30: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            FHD_50: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            FHD_60: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            HD_100: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            HD_120: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            HD_200: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            HD_240: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            HD_24: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            HD_25: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            HD_30: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            HD_50: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            HD_60: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            SD_24: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            SD_25: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            SD_30: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            SD_48: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            SD_50: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            SD_60: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            UHD_100: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            UHD_120: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            UHD_200: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            UHD_240: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            UHD_24: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            UHD_25: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            UHD_30: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            UHD_50: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            UHD_60: typing.ClassVar[MediaCodecInfo.VideoCapabilities.PerformancePoint] = ...
            def __init__(self, width: int | java.jint | java.lang.Integer, height: int | java.jint | java.lang.Integer, frameRate: int | java.jint | java.lang.Integer, /) -> None: ...
            @typing.overload
            def covers(self, other: MediaCodecInfo.VideoCapabilities.PerformancePoint, /) -> bool: ...
            @typing.overload
            def covers(self, format: MediaFormat, /) -> bool: ...
            def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
            def hashCode(self) -> int: ...
            def toString(self) -> str: ...

    class EncoderCapabilities(java.lang.Object):
        BITRATE_MODE_CBR: typing.ClassVar[int] = ...
        BITRATE_MODE_CBR_FD: typing.ClassVar[int] = ...
        BITRATE_MODE_CQ: typing.ClassVar[int] = ...
        BITRATE_MODE_VBR: typing.ClassVar[int] = ...
        def getComplexityRange(self) -> android.util.Range[java.lang.Integer]: ...
        def getQualityRange(self) -> android.util.Range[java.lang.Integer]: ...
        def isBitrateModeSupported(self, mode: int | java.jint | java.lang.Integer, /) -> bool: ...

    class CodecProfileLevel(java.lang.Object):
        AACObjectELD: typing.ClassVar[int] = ...
        AACObjectERLC: typing.ClassVar[int] = ...
        AACObjectERScalable: typing.ClassVar[int] = ...
        AACObjectHE: typing.ClassVar[int] = ...
        AACObjectHE_PS: typing.ClassVar[int] = ...
        AACObjectLC: typing.ClassVar[int] = ...
        AACObjectLD: typing.ClassVar[int] = ...
        AACObjectLTP: typing.ClassVar[int] = ...
        AACObjectMain: typing.ClassVar[int] = ...
        AACObjectSSR: typing.ClassVar[int] = ...
        AACObjectScalable: typing.ClassVar[int] = ...
        AACObjectXHE: typing.ClassVar[int] = ...
        AC4Level0: typing.ClassVar[int] = ...
        AC4Level1: typing.ClassVar[int] = ...
        AC4Level2: typing.ClassVar[int] = ...
        AC4Level3: typing.ClassVar[int] = ...
        AC4Level4: typing.ClassVar[int] = ...
        AC4Profile00: typing.ClassVar[int] = ...
        AC4Profile10: typing.ClassVar[int] = ...
        AC4Profile11: typing.ClassVar[int] = ...
        AC4Profile21: typing.ClassVar[int] = ...
        AC4Profile22: typing.ClassVar[int] = ...
        APVLevel11Band0: typing.ClassVar[int] = ...
        APVLevel11Band1: typing.ClassVar[int] = ...
        APVLevel11Band2: typing.ClassVar[int] = ...
        APVLevel11Band3: typing.ClassVar[int] = ...
        APVLevel1Band0: typing.ClassVar[int] = ...
        APVLevel1Band1: typing.ClassVar[int] = ...
        APVLevel1Band2: typing.ClassVar[int] = ...
        APVLevel1Band3: typing.ClassVar[int] = ...
        APVLevel21Band0: typing.ClassVar[int] = ...
        APVLevel21Band1: typing.ClassVar[int] = ...
        APVLevel21Band2: typing.ClassVar[int] = ...
        APVLevel21Band3: typing.ClassVar[int] = ...
        APVLevel2Band0: typing.ClassVar[int] = ...
        APVLevel2Band1: typing.ClassVar[int] = ...
        APVLevel2Band2: typing.ClassVar[int] = ...
        APVLevel2Band3: typing.ClassVar[int] = ...
        APVLevel31Band0: typing.ClassVar[int] = ...
        APVLevel31Band1: typing.ClassVar[int] = ...
        APVLevel31Band2: typing.ClassVar[int] = ...
        APVLevel31Band3: typing.ClassVar[int] = ...
        APVLevel3Band0: typing.ClassVar[int] = ...
        APVLevel3Band1: typing.ClassVar[int] = ...
        APVLevel3Band2: typing.ClassVar[int] = ...
        APVLevel3Band3: typing.ClassVar[int] = ...
        APVLevel41Band0: typing.ClassVar[int] = ...
        APVLevel41Band1: typing.ClassVar[int] = ...
        APVLevel41Band2: typing.ClassVar[int] = ...
        APVLevel41Band3: typing.ClassVar[int] = ...
        APVLevel4Band0: typing.ClassVar[int] = ...
        APVLevel4Band1: typing.ClassVar[int] = ...
        APVLevel4Band2: typing.ClassVar[int] = ...
        APVLevel4Band3: typing.ClassVar[int] = ...
        APVLevel51Band0: typing.ClassVar[int] = ...
        APVLevel51Band1: typing.ClassVar[int] = ...
        APVLevel51Band2: typing.ClassVar[int] = ...
        APVLevel51Band3: typing.ClassVar[int] = ...
        APVLevel5Band0: typing.ClassVar[int] = ...
        APVLevel5Band1: typing.ClassVar[int] = ...
        APVLevel5Band2: typing.ClassVar[int] = ...
        APVLevel5Band3: typing.ClassVar[int] = ...
        APVLevel61Band0: typing.ClassVar[int] = ...
        APVLevel61Band1: typing.ClassVar[int] = ...
        APVLevel61Band2: typing.ClassVar[int] = ...
        APVLevel61Band3: typing.ClassVar[int] = ...
        APVLevel6Band0: typing.ClassVar[int] = ...
        APVLevel6Band1: typing.ClassVar[int] = ...
        APVLevel6Band2: typing.ClassVar[int] = ...
        APVLevel6Band3: typing.ClassVar[int] = ...
        APVLevel71Band0: typing.ClassVar[int] = ...
        APVLevel71Band1: typing.ClassVar[int] = ...
        APVLevel71Band2: typing.ClassVar[int] = ...
        APVLevel71Band3: typing.ClassVar[int] = ...
        APVLevel7Band0: typing.ClassVar[int] = ...
        APVLevel7Band1: typing.ClassVar[int] = ...
        APVLevel7Band2: typing.ClassVar[int] = ...
        APVLevel7Band3: typing.ClassVar[int] = ...
        APVProfile422_10: typing.ClassVar[int] = ...
        APVProfile422_10HDR10: typing.ClassVar[int] = ...
        APVProfile422_10HDR10Plus: typing.ClassVar[int] = ...
        AV1Level21: typing.ClassVar[int] = ...
        AV1Level22: typing.ClassVar[int] = ...
        AV1Level23: typing.ClassVar[int] = ...
        AV1Level2: typing.ClassVar[int] = ...
        AV1Level31: typing.ClassVar[int] = ...
        AV1Level32: typing.ClassVar[int] = ...
        AV1Level33: typing.ClassVar[int] = ...
        AV1Level3: typing.ClassVar[int] = ...
        AV1Level41: typing.ClassVar[int] = ...
        AV1Level42: typing.ClassVar[int] = ...
        AV1Level43: typing.ClassVar[int] = ...
        AV1Level4: typing.ClassVar[int] = ...
        AV1Level51: typing.ClassVar[int] = ...
        AV1Level52: typing.ClassVar[int] = ...
        AV1Level53: typing.ClassVar[int] = ...
        AV1Level5: typing.ClassVar[int] = ...
        AV1Level61: typing.ClassVar[int] = ...
        AV1Level62: typing.ClassVar[int] = ...
        AV1Level63: typing.ClassVar[int] = ...
        AV1Level6: typing.ClassVar[int] = ...
        AV1Level71: typing.ClassVar[int] = ...
        AV1Level72: typing.ClassVar[int] = ...
        AV1Level73: typing.ClassVar[int] = ...
        AV1Level7: typing.ClassVar[int] = ...
        AV1ProfileMain10: typing.ClassVar[int] = ...
        AV1ProfileMain10HDR10: typing.ClassVar[int] = ...
        AV1ProfileMain10HDR10Plus: typing.ClassVar[int] = ...
        AV1ProfileMain8: typing.ClassVar[int] = ...
        AVCLevel11: typing.ClassVar[int] = ...
        AVCLevel12: typing.ClassVar[int] = ...
        AVCLevel13: typing.ClassVar[int] = ...
        AVCLevel1: typing.ClassVar[int] = ...
        AVCLevel1b: typing.ClassVar[int] = ...
        AVCLevel21: typing.ClassVar[int] = ...
        AVCLevel22: typing.ClassVar[int] = ...
        AVCLevel2: typing.ClassVar[int] = ...
        AVCLevel31: typing.ClassVar[int] = ...
        AVCLevel32: typing.ClassVar[int] = ...
        AVCLevel3: typing.ClassVar[int] = ...
        AVCLevel41: typing.ClassVar[int] = ...
        AVCLevel42: typing.ClassVar[int] = ...
        AVCLevel4: typing.ClassVar[int] = ...
        AVCLevel51: typing.ClassVar[int] = ...
        AVCLevel52: typing.ClassVar[int] = ...
        AVCLevel5: typing.ClassVar[int] = ...
        AVCLevel61: typing.ClassVar[int] = ...
        AVCLevel62: typing.ClassVar[int] = ...
        AVCLevel6: typing.ClassVar[int] = ...
        AVCProfileBaseline: typing.ClassVar[int] = ...
        AVCProfileConstrainedBaseline: typing.ClassVar[int] = ...
        AVCProfileConstrainedHigh: typing.ClassVar[int] = ...
        AVCProfileExtended: typing.ClassVar[int] = ...
        AVCProfileHigh10: typing.ClassVar[int] = ...
        AVCProfileHigh422: typing.ClassVar[int] = ...
        AVCProfileHigh444: typing.ClassVar[int] = ...
        AVCProfileHigh: typing.ClassVar[int] = ...
        AVCProfileMain: typing.ClassVar[int] = ...
        DTS_HDProfileHRA: typing.ClassVar[int] = ...
        DTS_HDProfileLBR: typing.ClassVar[int] = ...
        DTS_HDProfileMA: typing.ClassVar[int] = ...
        DTS_UHDProfileP1: typing.ClassVar[int] = ...
        DTS_UHDProfileP2: typing.ClassVar[int] = ...
        DolbyVisionLevel8k30: typing.ClassVar[int] = ...
        DolbyVisionLevel8k60: typing.ClassVar[int] = ...
        DolbyVisionLevelFhd24: typing.ClassVar[int] = ...
        DolbyVisionLevelFhd30: typing.ClassVar[int] = ...
        DolbyVisionLevelFhd60: typing.ClassVar[int] = ...
        DolbyVisionLevelHd24: typing.ClassVar[int] = ...
        DolbyVisionLevelHd30: typing.ClassVar[int] = ...
        DolbyVisionLevelUhd120: typing.ClassVar[int] = ...
        DolbyVisionLevelUhd24: typing.ClassVar[int] = ...
        DolbyVisionLevelUhd30: typing.ClassVar[int] = ...
        DolbyVisionLevelUhd48: typing.ClassVar[int] = ...
        DolbyVisionLevelUhd60: typing.ClassVar[int] = ...
        DolbyVisionProfileDvav110: typing.ClassVar[int] = ...
        DolbyVisionProfileDvavPen: typing.ClassVar[int] = ...
        DolbyVisionProfileDvavPer: typing.ClassVar[int] = ...
        DolbyVisionProfileDvavSe: typing.ClassVar[int] = ...
        DolbyVisionProfileDvheDen: typing.ClassVar[int] = ...
        DolbyVisionProfileDvheDer: typing.ClassVar[int] = ...
        DolbyVisionProfileDvheDtb: typing.ClassVar[int] = ...
        DolbyVisionProfileDvheDth: typing.ClassVar[int] = ...
        DolbyVisionProfileDvheDtr: typing.ClassVar[int] = ...
        DolbyVisionProfileDvheSt: typing.ClassVar[int] = ...
        DolbyVisionProfileDvheStn: typing.ClassVar[int] = ...
        H263Level10: typing.ClassVar[int] = ...
        H263Level20: typing.ClassVar[int] = ...
        H263Level30: typing.ClassVar[int] = ...
        H263Level40: typing.ClassVar[int] = ...
        H263Level45: typing.ClassVar[int] = ...
        H263Level50: typing.ClassVar[int] = ...
        H263Level60: typing.ClassVar[int] = ...
        H263Level70: typing.ClassVar[int] = ...
        H263ProfileBackwardCompatible: typing.ClassVar[int] = ...
        H263ProfileBaseline: typing.ClassVar[int] = ...
        H263ProfileH320Coding: typing.ClassVar[int] = ...
        H263ProfileHighCompression: typing.ClassVar[int] = ...
        H263ProfileHighLatency: typing.ClassVar[int] = ...
        H263ProfileISWV2: typing.ClassVar[int] = ...
        H263ProfileISWV3: typing.ClassVar[int] = ...
        H263ProfileInterlace: typing.ClassVar[int] = ...
        H263ProfileInternet: typing.ClassVar[int] = ...
        HEVCHighTierLevel1: typing.ClassVar[int] = ...
        HEVCHighTierLevel21: typing.ClassVar[int] = ...
        HEVCHighTierLevel2: typing.ClassVar[int] = ...
        HEVCHighTierLevel31: typing.ClassVar[int] = ...
        HEVCHighTierLevel3: typing.ClassVar[int] = ...
        HEVCHighTierLevel41: typing.ClassVar[int] = ...
        HEVCHighTierLevel4: typing.ClassVar[int] = ...
        HEVCHighTierLevel51: typing.ClassVar[int] = ...
        HEVCHighTierLevel52: typing.ClassVar[int] = ...
        HEVCHighTierLevel5: typing.ClassVar[int] = ...
        HEVCHighTierLevel61: typing.ClassVar[int] = ...
        HEVCHighTierLevel62: typing.ClassVar[int] = ...
        HEVCHighTierLevel6: typing.ClassVar[int] = ...
        HEVCMainTierLevel1: typing.ClassVar[int] = ...
        HEVCMainTierLevel21: typing.ClassVar[int] = ...
        HEVCMainTierLevel2: typing.ClassVar[int] = ...
        HEVCMainTierLevel31: typing.ClassVar[int] = ...
        HEVCMainTierLevel3: typing.ClassVar[int] = ...
        HEVCMainTierLevel41: typing.ClassVar[int] = ...
        HEVCMainTierLevel4: typing.ClassVar[int] = ...
        HEVCMainTierLevel51: typing.ClassVar[int] = ...
        HEVCMainTierLevel52: typing.ClassVar[int] = ...
        HEVCMainTierLevel5: typing.ClassVar[int] = ...
        HEVCMainTierLevel61: typing.ClassVar[int] = ...
        HEVCMainTierLevel62: typing.ClassVar[int] = ...
        HEVCMainTierLevel6: typing.ClassVar[int] = ...
        HEVCProfileMain10: typing.ClassVar[int] = ...
        HEVCProfileMain10HDR10: typing.ClassVar[int] = ...
        HEVCProfileMain10HDR10Plus: typing.ClassVar[int] = ...
        HEVCProfileMain: typing.ClassVar[int] = ...
        HEVCProfileMainStill: typing.ClassVar[int] = ...
        IAMFProfileBaseAac: typing.ClassVar[int] = ...
        IAMFProfileBaseEnhancedAac: typing.ClassVar[int] = ...
        IAMFProfileBaseEnhancedFlac: typing.ClassVar[int] = ...
        IAMFProfileBaseEnhancedOpus: typing.ClassVar[int] = ...
        IAMFProfileBaseEnhancedPcm: typing.ClassVar[int] = ...
        IAMFProfileBaseFlac: typing.ClassVar[int] = ...
        IAMFProfileBaseOpus: typing.ClassVar[int] = ...
        IAMFProfileBasePcm: typing.ClassVar[int] = ...
        IAMFProfileSimpleAac: typing.ClassVar[int] = ...
        IAMFProfileSimpleFlac: typing.ClassVar[int] = ...
        IAMFProfileSimpleOpus: typing.ClassVar[int] = ...
        IAMFProfileSimplePcm: typing.ClassVar[int] = ...
        MPEG2LevelH14: typing.ClassVar[int] = ...
        MPEG2LevelHL: typing.ClassVar[int] = ...
        MPEG2LevelHP: typing.ClassVar[int] = ...
        MPEG2LevelLL: typing.ClassVar[int] = ...
        MPEG2LevelML: typing.ClassVar[int] = ...
        MPEG2Profile422: typing.ClassVar[int] = ...
        MPEG2ProfileHigh: typing.ClassVar[int] = ...
        MPEG2ProfileMain: typing.ClassVar[int] = ...
        MPEG2ProfileSNR: typing.ClassVar[int] = ...
        MPEG2ProfileSimple: typing.ClassVar[int] = ...
        MPEG2ProfileSpatial: typing.ClassVar[int] = ...
        MPEG4Level0: typing.ClassVar[int] = ...
        MPEG4Level0b: typing.ClassVar[int] = ...
        MPEG4Level1: typing.ClassVar[int] = ...
        MPEG4Level2: typing.ClassVar[int] = ...
        MPEG4Level3: typing.ClassVar[int] = ...
        MPEG4Level3b: typing.ClassVar[int] = ...
        MPEG4Level4: typing.ClassVar[int] = ...
        MPEG4Level4a: typing.ClassVar[int] = ...
        MPEG4Level5: typing.ClassVar[int] = ...
        MPEG4Level6: typing.ClassVar[int] = ...
        MPEG4ProfileAdvancedCoding: typing.ClassVar[int] = ...
        MPEG4ProfileAdvancedCore: typing.ClassVar[int] = ...
        MPEG4ProfileAdvancedRealTime: typing.ClassVar[int] = ...
        MPEG4ProfileAdvancedScalable: typing.ClassVar[int] = ...
        MPEG4ProfileAdvancedSimple: typing.ClassVar[int] = ...
        MPEG4ProfileBasicAnimated: typing.ClassVar[int] = ...
        MPEG4ProfileCore: typing.ClassVar[int] = ...
        MPEG4ProfileCoreScalable: typing.ClassVar[int] = ...
        MPEG4ProfileHybrid: typing.ClassVar[int] = ...
        MPEG4ProfileMain: typing.ClassVar[int] = ...
        MPEG4ProfileNbit: typing.ClassVar[int] = ...
        MPEG4ProfileScalableTexture: typing.ClassVar[int] = ...
        MPEG4ProfileSimple: typing.ClassVar[int] = ...
        MPEG4ProfileSimpleFBA: typing.ClassVar[int] = ...
        MPEG4ProfileSimpleFace: typing.ClassVar[int] = ...
        MPEG4ProfileSimpleScalable: typing.ClassVar[int] = ...
        VP8Level_Version0: typing.ClassVar[int] = ...
        VP8Level_Version1: typing.ClassVar[int] = ...
        VP8Level_Version2: typing.ClassVar[int] = ...
        VP8Level_Version3: typing.ClassVar[int] = ...
        VP8ProfileMain: typing.ClassVar[int] = ...
        VP9Level11: typing.ClassVar[int] = ...
        VP9Level1: typing.ClassVar[int] = ...
        VP9Level21: typing.ClassVar[int] = ...
        VP9Level2: typing.ClassVar[int] = ...
        VP9Level31: typing.ClassVar[int] = ...
        VP9Level3: typing.ClassVar[int] = ...
        VP9Level41: typing.ClassVar[int] = ...
        VP9Level4: typing.ClassVar[int] = ...
        VP9Level51: typing.ClassVar[int] = ...
        VP9Level52: typing.ClassVar[int] = ...
        VP9Level5: typing.ClassVar[int] = ...
        VP9Level61: typing.ClassVar[int] = ...
        VP9Level62: typing.ClassVar[int] = ...
        VP9Level6: typing.ClassVar[int] = ...
        VP9Profile0: typing.ClassVar[int] = ...
        VP9Profile1: typing.ClassVar[int] = ...
        VP9Profile2: typing.ClassVar[int] = ...
        VP9Profile2HDR10Plus: typing.ClassVar[int] = ...
        VP9Profile2HDR: typing.ClassVar[int] = ...
        VP9Profile3: typing.ClassVar[int] = ...
        VP9Profile3HDR10Plus: typing.ClassVar[int] = ...
        VP9Profile3HDR: typing.ClassVar[int] = ...
        level: int = ...
        profile: int = ...
        def __init__(self) -> None: ...
        def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
        def hashCode(self) -> int: ...

    class CodecCapabilities(java.lang.Object):
        COLOR_Format12bitRGB444: typing.ClassVar[int] = ...
        COLOR_Format16bitARGB1555: typing.ClassVar[int] = ...
        COLOR_Format16bitARGB4444: typing.ClassVar[int] = ...
        COLOR_Format16bitBGR565: typing.ClassVar[int] = ...
        COLOR_Format16bitRGB565: typing.ClassVar[int] = ...
        COLOR_Format18BitBGR666: typing.ClassVar[int] = ...
        COLOR_Format18bitARGB1665: typing.ClassVar[int] = ...
        COLOR_Format18bitRGB666: typing.ClassVar[int] = ...
        COLOR_Format19bitARGB1666: typing.ClassVar[int] = ...
        COLOR_Format24BitABGR6666: typing.ClassVar[int] = ...
        COLOR_Format24BitARGB6666: typing.ClassVar[int] = ...
        COLOR_Format24bitARGB1887: typing.ClassVar[int] = ...
        COLOR_Format24bitBGR888: typing.ClassVar[int] = ...
        COLOR_Format24bitRGB888: typing.ClassVar[int] = ...
        COLOR_Format25bitARGB1888: typing.ClassVar[int] = ...
        COLOR_Format32bitABGR2101010: typing.ClassVar[int] = ...
        COLOR_Format32bitABGR8888: typing.ClassVar[int] = ...
        COLOR_Format32bitARGB8888: typing.ClassVar[int] = ...
        COLOR_Format32bitBGRA8888: typing.ClassVar[int] = ...
        COLOR_Format64bitABGRFloat: typing.ClassVar[int] = ...
        COLOR_Format8bitRGB332: typing.ClassVar[int] = ...
        COLOR_FormatCbYCrY: typing.ClassVar[int] = ...
        COLOR_FormatCrYCbY: typing.ClassVar[int] = ...
        COLOR_FormatL16: typing.ClassVar[int] = ...
        COLOR_FormatL24: typing.ClassVar[int] = ...
        COLOR_FormatL2: typing.ClassVar[int] = ...
        COLOR_FormatL32: typing.ClassVar[int] = ...
        COLOR_FormatL4: typing.ClassVar[int] = ...
        COLOR_FormatL8: typing.ClassVar[int] = ...
        COLOR_FormatMonochrome: typing.ClassVar[int] = ...
        COLOR_FormatRGBAFlexible: typing.ClassVar[int] = ...
        COLOR_FormatRGBFlexible: typing.ClassVar[int] = ...
        COLOR_FormatRawBayer10bit: typing.ClassVar[int] = ...
        COLOR_FormatRawBayer8bit: typing.ClassVar[int] = ...
        COLOR_FormatRawBayer8bitcompressed: typing.ClassVar[int] = ...
        COLOR_FormatSurface: typing.ClassVar[int] = ...
        COLOR_FormatYCbYCr: typing.ClassVar[int] = ...
        COLOR_FormatYCrYCb: typing.ClassVar[int] = ...
        COLOR_FormatYUV411PackedPlanar: typing.ClassVar[int] = ...
        COLOR_FormatYUV411Planar: typing.ClassVar[int] = ...
        COLOR_FormatYUV420Flexible: typing.ClassVar[int] = ...
        COLOR_FormatYUV420PackedPlanar: typing.ClassVar[int] = ...
        COLOR_FormatYUV420PackedSemiPlanar: typing.ClassVar[int] = ...
        COLOR_FormatYUV420Planar: typing.ClassVar[int] = ...
        COLOR_FormatYUV420SemiPlanar: typing.ClassVar[int] = ...
        COLOR_FormatYUV422Flexible: typing.ClassVar[int] = ...
        COLOR_FormatYUV422PackedPlanar: typing.ClassVar[int] = ...
        COLOR_FormatYUV422PackedSemiPlanar: typing.ClassVar[int] = ...
        COLOR_FormatYUV422Planar: typing.ClassVar[int] = ...
        COLOR_FormatYUV422SemiPlanar: typing.ClassVar[int] = ...
        COLOR_FormatYUV444Flexible: typing.ClassVar[int] = ...
        COLOR_FormatYUV444Interleaved: typing.ClassVar[int] = ...
        COLOR_FormatYUVP010: typing.ClassVar[int] = ...
        COLOR_FormatYUVP210: typing.ClassVar[int] = ...
        COLOR_QCOM_FormatYUV420SemiPlanar: typing.ClassVar[int] = ...
        COLOR_TI_FormatYUV420PackedSemiPlanar: typing.ClassVar[int] = ...
        FEATURE_AdaptivePlayback: typing.ClassVar[str] = ...
        FEATURE_DetachedSurface: typing.ClassVar[str] = ...
        FEATURE_DynamicColorAspects: typing.ClassVar[str] = ...
        FEATURE_DynamicTimestamp: typing.ClassVar[str] = ...
        FEATURE_EncodingStatistics: typing.ClassVar[str] = ...
        FEATURE_FrameParsing: typing.ClassVar[str] = ...
        FEATURE_HdrEditing: typing.ClassVar[str] = ...
        FEATURE_HlgEditing: typing.ClassVar[str] = ...
        FEATURE_IntraRefresh: typing.ClassVar[str] = ...
        FEATURE_LowLatency: typing.ClassVar[str] = ...
        FEATURE_MultipleFrames: typing.ClassVar[str] = ...
        FEATURE_PartialFrame: typing.ClassVar[str] = ...
        FEATURE_QpBounds: typing.ClassVar[str] = ...
        FEATURE_Roi: typing.ClassVar[str] = ...
        FEATURE_SecurePlayback: typing.ClassVar[str] = ...
        FEATURE_TunneledPlayback: typing.ClassVar[str] = ...
        colorFormats: java.chaquopy.JavaArrayJInt = ...
        profileLevels: java.chaquopy.JavaArray[MediaCodecInfo.CodecProfileLevel] = ...
        def __init__(self) -> None: ...
        @staticmethod
        def createFromProfileLevel(mime: str | java.lang.String, profile: int | java.jint | java.lang.Integer, level: int | java.jint | java.lang.Integer, /) -> MediaCodecInfo.CodecCapabilities: ...
        def getAudioCapabilities(self) -> MediaCodecInfo.AudioCapabilities: ...
        def getDefaultFormat(self) -> MediaFormat: ...
        def getEncoderCapabilities(self) -> MediaCodecInfo.EncoderCapabilities: ...
        def getMaxSupportedInstances(self) -> int: ...
        def getMimeType(self) -> str: ...
        def getVideoCapabilities(self) -> MediaCodecInfo.VideoCapabilities: ...
        def isFeatureRequired(self, name: str | java.lang.String, /) -> bool: ...
        def isFeatureSupported(self, name: str | java.lang.String, /) -> bool: ...
        def isFormatSupported(self, format: MediaFormat, /) -> bool: ...

    class AudioCapabilities(java.lang.Object):
        def getBitrateRange(self) -> android.util.Range[java.lang.Integer]: ...
        def getInputChannelCountRanges(self) -> java.chaquopy.JavaArray[android.util.Range[java.lang.Integer]]: ...
        def getMaxInputChannelCount(self) -> int: ...
        def getMinInputChannelCount(self) -> int: ...
        def getSupportedSampleRateRanges(self) -> java.chaquopy.JavaArray[android.util.Range[java.lang.Integer]]: ...
        def getSupportedSampleRates(self) -> java.chaquopy.JavaArrayJInt: ...
        def isSampleRateSupported(self, sampleRate: int | java.jint | java.lang.Integer, /) -> bool: ...

class MediaCodecList(java.lang.Object):
    ALL_CODECS: typing.ClassVar[int] = ...
    REGULAR_CODECS: typing.ClassVar[int] = ...
    def __init__(self, kind: int | java.jint | java.lang.Integer, /) -> None: ...
    def findDecoderForFormat(self, format: MediaFormat, /) -> str: ...
    def findEncoderForFormat(self, format: MediaFormat, /) -> str: ...
    @staticmethod
    def getCodecCount() -> int: ...
    @staticmethod
    def getCodecInfoAt(index: int | java.jint | java.lang.Integer, /) -> MediaCodecInfo: ...
    def getCodecInfos(self) -> java.chaquopy.JavaArray[MediaCodecInfo]: ...

class MediaCommunicationManager(java.lang.Object):
    def getSession2Tokens(self) -> java.util.List[Session2Token]: ...
    def getVersion(self) -> int: ...

class MediaController2(java.lang.AutoCloseable):
    def cancelSessionCommand(self, token: java.lang.Object | int | bool | float | str, /) -> None: ...
    def close(self) -> None: ...
    def getConnectedToken(self) -> Session2Token | None: ...
    def isPlaybackActive(self) -> bool: ...
    def sendSessionCommand(self, command: Session2Command, args: android.os.Bundle, /) -> java.lang.Object: ...

    class ControllerCallback(java.lang.Object):
        def __init__(self) -> None: ...
        def onCommandResult(self, controller: MediaController2, token: java.lang.Object | int | bool | float | str, command: Session2Command, result: Session2Command.Result, /) -> None: ...
        def onConnected(self, controller: MediaController2, allowedCommands: Session2CommandGroup, /) -> None: ...
        def onDisconnected(self, controller: MediaController2, /) -> None: ...
        def onPlaybackActiveChanged(self, controller: MediaController2, playbackActive: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
        def onSessionCommand(self, controller: MediaController2, command: Session2Command, args: android.os.Bundle, /) -> Session2Command.Result: ...

    class Builder(java.lang.Object):
        def __init__(self, context: android.content.Context, token: Session2Token, /) -> None: ...
        def build(self) -> MediaController2: ...
        def setConnectionHints(self, connectionHints: android.os.Bundle, /) -> MediaController2.Builder: ...
        def setControllerCallback(self, executor: java.util.concurrent.Executor, callback: MediaController2.ControllerCallback, /) -> MediaController2.Builder: ...

class MediaCrypto(java.lang.Object):
    def __init__(self, uuid: java.util.UUID, sessionId: java.chaquopy.JavaArrayJByte, /) -> None: ...
    def finalize(self) -> None: ...
    @staticmethod
    def isCryptoSchemeSupported(uuid: java.util.UUID, /) -> bool: ...
    def release(self) -> None: ...
    def requiresSecureDecoderComponent(self, arg1: str | java.lang.String, /) -> bool: ...
    def setMediaDrmSession(self, arg1: java.chaquopy.JavaArrayJByte, /) -> None: ...

class MediaCryptoException(MediaDrmThrowable, java.lang.Exception):
    def __init__(self, detailMessage: str | java.lang.String, /) -> None: ...
    def getErrorContext(self) -> int: ...
    def getOemError(self) -> int: ...
    def getVendorError(self) -> int: ...

class MediaDataSource(java.io.Closeable):
    def __init__(self) -> None: ...
    def getSize(self) -> int: ...
    def readAt(self, arg1: int | java.jlong | java.lang.Long, arg2: java.chaquopy.JavaArrayJByte, arg3: int | java.jint | java.lang.Integer, arg4: int | java.jint | java.lang.Integer, /) -> int: ...

class MediaDescrambler(java.lang.AutoCloseable):
    SCRAMBLE_CONTROL_EVEN_KEY: typing.ClassVar[int] = ...
    SCRAMBLE_CONTROL_ODD_KEY: typing.ClassVar[int] = ...
    SCRAMBLE_CONTROL_RESERVED: typing.ClassVar[int] = ...
    SCRAMBLE_CONTROL_UNSCRAMBLED: typing.ClassVar[int] = ...
    SCRAMBLE_FLAG_PES_HEADER: typing.ClassVar[int] = ...
    def __init__(self, CA_system_id: int | java.jint | java.lang.Integer, /) -> None: ...
    def close(self) -> None: ...
    def descramble(self, srcBuf: java.nio.ByteBuffer, dstBuf: java.nio.ByteBuffer, cryptoInfo: MediaCodec.CryptoInfo, /) -> int: ...
    def finalize(self) -> None: ...
    def requiresSecureDecoderComponent(self, mime: str | java.lang.String, /) -> bool: ...
    def setMediaCasSession(self, session: MediaCas.Session, /) -> None: ...

class MediaDescription(android.os.Parcelable):
    BT_FOLDER_TYPE_ALBUMS: typing.ClassVar[int] = ...
    BT_FOLDER_TYPE_ARTISTS: typing.ClassVar[int] = ...
    BT_FOLDER_TYPE_GENRES: typing.ClassVar[int] = ...
    BT_FOLDER_TYPE_MIXED: typing.ClassVar[int] = ...
    BT_FOLDER_TYPE_PLAYLISTS: typing.ClassVar[int] = ...
    BT_FOLDER_TYPE_TITLES: typing.ClassVar[int] = ...
    BT_FOLDER_TYPE_YEARS: typing.ClassVar[int] = ...
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[MediaDescription]] = ...
    EXTRA_BT_FOLDER_TYPE: typing.ClassVar[str] = ...
    def describeContents(self) -> int: ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getDescription(self) -> java.lang.CharSequence | None: ...
    def getExtras(self) -> android.os.Bundle | None: ...
    def getIconBitmap(self) -> android.graphics.Bitmap | None: ...
    def getIconUri(self) -> android.net.Uri | None: ...
    def getMediaId(self) -> str | None: ...
    def getMediaUri(self) -> android.net.Uri | None: ...
    def getSubtitle(self) -> java.lang.CharSequence | None: ...
    def getTitle(self) -> java.lang.CharSequence | None: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class Builder(java.lang.Object):
        def __init__(self) -> None: ...
        def build(self) -> MediaDescription: ...
        def setDescription(self, description: java.lang.CharSequence, /) -> MediaDescription.Builder: ...
        def setExtras(self, extras: android.os.Bundle, /) -> MediaDescription.Builder: ...
        def setIconBitmap(self, icon: android.graphics.Bitmap, /) -> MediaDescription.Builder: ...
        def setIconUri(self, iconUri: android.net.Uri, /) -> MediaDescription.Builder: ...
        def setMediaId(self, mediaId: str | java.lang.String, /) -> MediaDescription.Builder: ...
        def setMediaUri(self, mediaUri: android.net.Uri, /) -> MediaDescription.Builder: ...
        def setSubtitle(self, subtitle: java.lang.CharSequence, /) -> MediaDescription.Builder: ...
        def setTitle(self, title: java.lang.CharSequence, /) -> MediaDescription.Builder: ...

class MediaDrm(java.lang.AutoCloseable):
    EVENT_KEY_EXPIRED: typing.ClassVar[int] = ...
    EVENT_KEY_REQUIRED: typing.ClassVar[int] = ...
    EVENT_PROVISION_REQUIRED: typing.ClassVar[int] = ...
    EVENT_SESSION_RECLAIMED: typing.ClassVar[int] = ...
    EVENT_VENDOR_DEFINED: typing.ClassVar[int] = ...
    HDCP_LEVEL_UNKNOWN: typing.ClassVar[int] = ...
    HDCP_NONE: typing.ClassVar[int] = ...
    HDCP_NO_DIGITAL_OUTPUT: typing.ClassVar[int] = ...
    HDCP_V1: typing.ClassVar[int] = ...
    HDCP_V2: typing.ClassVar[int] = ...
    HDCP_V2_1: typing.ClassVar[int] = ...
    HDCP_V2_2: typing.ClassVar[int] = ...
    HDCP_V2_3: typing.ClassVar[int] = ...
    KEY_TYPE_OFFLINE: typing.ClassVar[int] = ...
    KEY_TYPE_RELEASE: typing.ClassVar[int] = ...
    KEY_TYPE_STREAMING: typing.ClassVar[int] = ...
    OFFLINE_LICENSE_STATE_RELEASED: typing.ClassVar[int] = ...
    OFFLINE_LICENSE_STATE_UNKNOWN: typing.ClassVar[int] = ...
    OFFLINE_LICENSE_STATE_USABLE: typing.ClassVar[int] = ...
    PROPERTY_ALGORITHMS: typing.ClassVar[str] = ...
    PROPERTY_DESCRIPTION: typing.ClassVar[str] = ...
    PROPERTY_DEVICE_UNIQUE_ID: typing.ClassVar[str] = ...
    PROPERTY_VENDOR: typing.ClassVar[str] = ...
    PROPERTY_VERSION: typing.ClassVar[str] = ...
    SECURITY_LEVEL_HW_SECURE_ALL: typing.ClassVar[int] = ...
    SECURITY_LEVEL_HW_SECURE_CRYPTO: typing.ClassVar[int] = ...
    SECURITY_LEVEL_HW_SECURE_DECODE: typing.ClassVar[int] = ...
    SECURITY_LEVEL_SW_SECURE_CRYPTO: typing.ClassVar[int] = ...
    SECURITY_LEVEL_SW_SECURE_DECODE: typing.ClassVar[int] = ...
    SECURITY_LEVEL_UNKNOWN: typing.ClassVar[int] = ...
    def __init__(self, uuid: java.util.UUID, /) -> None: ...
    def clearOnEventListener(self) -> None: ...
    def clearOnExpirationUpdateListener(self) -> None: ...
    def clearOnKeyStatusChangeListener(self) -> None: ...
    def clearOnSessionLostStateListener(self) -> None: ...
    def close(self) -> None: ...
    def closeSession(self, sessionId: java.chaquopy.JavaArrayJByte, /) -> None: ...
    def finalize(self) -> None: ...
    def getConnectedHdcpLevel(self) -> int: ...
    def getCryptoSession(self, sessionId: java.chaquopy.JavaArrayJByte, cipherAlgorithm: str | java.lang.String, macAlgorithm: str | java.lang.String, /) -> MediaDrm.CryptoSession: ...
    def getKeyRequest(self, scope: java.chaquopy.JavaArrayJByte, init: java.chaquopy.JavaArrayJByte, mimeType: str | java.lang.String, keyType: int | java.jint | java.lang.Integer, optionalParameters: java.util.HashMap[java.lang.String, java.lang.String], /) -> MediaDrm.KeyRequest: ...
    def getLogMessages(self) -> java.util.List[MediaDrm.LogMessage]: ...
    def getMaxHdcpLevel(self) -> int: ...
    @staticmethod
    def getMaxSecurityLevel() -> int: ...
    def getMaxSessionCount(self) -> int: ...
    def getMetrics(self) -> android.os.PersistableBundle: ...
    def getOfflineLicenseKeySetIds(self) -> java.util.List[java.chaquopy.JavaArrayJByte]: ...
    def getOfflineLicenseState(self, arg1: java.chaquopy.JavaArrayJByte, /) -> int: ...
    def getOpenSessionCount(self) -> int: ...
    def getPlaybackComponent(self, sessionId: java.chaquopy.JavaArrayJByte, /) -> MediaDrm.PlaybackComponent | None: ...
    def getPropertyByteArray(self, arg1: str | java.lang.String, /) -> java.chaquopy.JavaArrayJByte: ...
    def getPropertyString(self, arg1: str | java.lang.String, /) -> str: ...
    def getProvisionRequest(self) -> MediaDrm.ProvisionRequest: ...
    def getSecureStop(self, arg1: java.chaquopy.JavaArrayJByte, /) -> java.chaquopy.JavaArrayJByte: ...
    def getSecureStopIds(self) -> java.util.List[java.chaquopy.JavaArrayJByte]: ...
    def getSecureStops(self) -> java.util.List[java.chaquopy.JavaArrayJByte]: ...
    def getSecurityLevel(self, arg1: java.chaquopy.JavaArrayJByte, /) -> int: ...
    @staticmethod
    def getSupportedCryptoSchemes() -> java.util.List[java.util.UUID]: ...
    @typing.overload
    @staticmethod
    def isCryptoSchemeSupported(uuid: java.util.UUID, /) -> bool: ...
    @typing.overload
    @staticmethod
    def isCryptoSchemeSupported(uuid: java.util.UUID, mimeType: str | java.lang.String, /) -> bool: ...
    @typing.overload
    @staticmethod
    def isCryptoSchemeSupported(uuid: java.util.UUID, mimeType: str | java.lang.String, securityLevel: int | java.jint | java.lang.Integer, /) -> bool: ...
    @typing.overload
    def openSession(self) -> java.chaquopy.JavaArrayJByte: ...
    @typing.overload
    def openSession(self, level: int | java.jint | java.lang.Integer, /) -> java.chaquopy.JavaArrayJByte: ...
    def provideKeyResponse(self, arg1: java.chaquopy.JavaArrayJByte, arg2: java.chaquopy.JavaArrayJByte, /) -> java.chaquopy.JavaArrayJByte | None: ...
    def provideProvisionResponse(self, response: java.chaquopy.JavaArrayJByte, /) -> None: ...
    def queryKeyStatus(self, arg1: java.chaquopy.JavaArrayJByte, /) -> java.util.HashMap[java.lang.String, java.lang.String]: ...
    def release(self) -> None: ...
    def releaseAllSecureStops(self) -> None: ...
    def releaseSecureStops(self, arg1: java.chaquopy.JavaArrayJByte, /) -> None: ...
    def removeAllSecureStops(self) -> None: ...
    def removeKeys(self, arg1: java.chaquopy.JavaArrayJByte, /) -> None: ...
    def removeOfflineLicense(self, arg1: java.chaquopy.JavaArrayJByte, /) -> None: ...
    def removeSecureStop(self, arg1: java.chaquopy.JavaArrayJByte, /) -> None: ...
    @typing.overload
    def requiresSecureDecoder(self, mime: str | java.lang.String, /) -> bool: ...
    @typing.overload
    def requiresSecureDecoder(self, arg1: str | java.lang.String, arg2: int | java.jint | java.lang.Integer, /) -> bool: ...
    def restoreKeys(self, arg1: java.chaquopy.JavaArrayJByte, arg2: java.chaquopy.JavaArrayJByte, /) -> None: ...
    @typing.overload
    def setOnEventListener(self, listener: MediaDrm.OnEventListener, /) -> None: ...
    @typing.overload
    def setOnEventListener(self, listener: MediaDrm.OnEventListener, handler: android.os.Handler, /) -> None: ...
    @typing.overload
    def setOnEventListener(self, executor: java.util.concurrent.Executor, listener: MediaDrm.OnEventListener, /) -> None: ...
    @typing.overload
    def setOnExpirationUpdateListener(self, listener: MediaDrm.OnExpirationUpdateListener, handler: android.os.Handler, /) -> None: ...
    @typing.overload
    def setOnExpirationUpdateListener(self, executor: java.util.concurrent.Executor, listener: MediaDrm.OnExpirationUpdateListener, /) -> None: ...
    @typing.overload
    def setOnKeyStatusChangeListener(self, listener: MediaDrm.OnKeyStatusChangeListener, handler: android.os.Handler, /) -> None: ...
    @typing.overload
    def setOnKeyStatusChangeListener(self, executor: java.util.concurrent.Executor, listener: MediaDrm.OnKeyStatusChangeListener, /) -> None: ...
    @typing.overload
    def setOnSessionLostStateListener(self, listener: MediaDrm.OnSessionLostStateListener, handler: android.os.Handler, /) -> None: ...
    @typing.overload
    def setOnSessionLostStateListener(self, executor: java.util.concurrent.Executor, listener: MediaDrm.OnSessionLostStateListener, /) -> None: ...
    def setPropertyByteArray(self, arg1: str | java.lang.String, arg2: java.chaquopy.JavaArrayJByte, /) -> None: ...
    def setPropertyString(self, arg1: str | java.lang.String, arg2: str | java.lang.String, /) -> None: ...

    class SessionException(MediaDrmThrowable, java.lang.RuntimeException):
        ERROR_RESOURCE_CONTENTION: typing.ClassVar[int] = ...
        ERROR_UNKNOWN: typing.ClassVar[int] = ...
        def __init__(self, errorCode: int | java.jint | java.lang.Integer, detailMessage: str | java.lang.String, /) -> None: ...
        def getErrorCode(self) -> int: ...
        def getErrorContext(self) -> int: ...
        def getOemError(self) -> int: ...
        def getVendorError(self) -> int: ...
        def isTransient(self) -> bool: ...

    class ProvisionRequest(java.lang.Object):
        def getData(self) -> java.chaquopy.JavaArrayJByte: ...
        def getDefaultUrl(self) -> str: ...

    class PlaybackComponent(java.lang.Object):
        def getLogSessionId(self) -> android.media.metrics.LogSessionId: ...
        def setLogSessionId(self, logSessionId: android.media.metrics.LogSessionId, /) -> None: ...

    class OnSessionLostStateListener(java.lang.Object):
        def onSessionLostState(self, arg1: MediaDrm, arg2: java.chaquopy.JavaArrayJByte, /) -> None: ...

    class OnKeyStatusChangeListener(java.lang.Object):
        def onKeyStatusChange(self, arg1: MediaDrm, arg2: java.chaquopy.JavaArrayJByte, arg3: java.util.List[MediaDrm.KeyStatus], arg4: bool | java.jboolean | java.lang.Boolean, /) -> None: ...

    class OnExpirationUpdateListener(java.lang.Object):
        def onExpirationUpdate(self, arg1: MediaDrm, arg2: java.chaquopy.JavaArrayJByte, arg3: int | java.jlong | java.lang.Long, /) -> None: ...

    class OnEventListener(java.lang.Object):
        def onEvent(self, arg1: MediaDrm, arg2: java.chaquopy.JavaArrayJByte, arg3: int | java.jint | java.lang.Integer, arg4: int | java.jint | java.lang.Integer, arg5: java.chaquopy.JavaArrayJByte, /) -> None: ...

    class MetricsConstants(java.lang.Object):
        CLOSE_SESSION_ERROR_COUNT: typing.ClassVar[str] = ...
        CLOSE_SESSION_ERROR_LIST: typing.ClassVar[str] = ...
        CLOSE_SESSION_OK_COUNT: typing.ClassVar[str] = ...
        EVENT_KEY_EXPIRED_COUNT: typing.ClassVar[str] = ...
        EVENT_KEY_NEEDED_COUNT: typing.ClassVar[str] = ...
        EVENT_PROVISION_REQUIRED_COUNT: typing.ClassVar[str] = ...
        EVENT_SESSION_RECLAIMED_COUNT: typing.ClassVar[str] = ...
        EVENT_VENDOR_DEFINED_COUNT: typing.ClassVar[str] = ...
        GET_DEVICE_UNIQUE_ID_ERROR_COUNT: typing.ClassVar[str] = ...
        GET_DEVICE_UNIQUE_ID_ERROR_LIST: typing.ClassVar[str] = ...
        GET_DEVICE_UNIQUE_ID_OK_COUNT: typing.ClassVar[str] = ...
        GET_KEY_REQUEST_ERROR_COUNT: typing.ClassVar[str] = ...
        GET_KEY_REQUEST_ERROR_LIST: typing.ClassVar[str] = ...
        GET_KEY_REQUEST_OK_COUNT: typing.ClassVar[str] = ...
        GET_KEY_REQUEST_OK_TIME_MICROS: typing.ClassVar[str] = ...
        GET_PROVISION_REQUEST_ERROR_COUNT: typing.ClassVar[str] = ...
        GET_PROVISION_REQUEST_ERROR_LIST: typing.ClassVar[str] = ...
        GET_PROVISION_REQUEST_OK_COUNT: typing.ClassVar[str] = ...
        KEY_STATUS_EXPIRED_COUNT: typing.ClassVar[str] = ...
        KEY_STATUS_INTERNAL_ERROR_COUNT: typing.ClassVar[str] = ...
        KEY_STATUS_OUTPUT_NOT_ALLOWED_COUNT: typing.ClassVar[str] = ...
        KEY_STATUS_PENDING_COUNT: typing.ClassVar[str] = ...
        KEY_STATUS_USABLE_COUNT: typing.ClassVar[str] = ...
        OPEN_SESSION_ERROR_COUNT: typing.ClassVar[str] = ...
        OPEN_SESSION_ERROR_LIST: typing.ClassVar[str] = ...
        OPEN_SESSION_OK_COUNT: typing.ClassVar[str] = ...
        PROVIDE_KEY_RESPONSE_ERROR_COUNT: typing.ClassVar[str] = ...
        PROVIDE_KEY_RESPONSE_ERROR_LIST: typing.ClassVar[str] = ...
        PROVIDE_KEY_RESPONSE_OK_COUNT: typing.ClassVar[str] = ...
        PROVIDE_KEY_RESPONSE_OK_TIME_MICROS: typing.ClassVar[str] = ...
        PROVIDE_PROVISION_RESPONSE_ERROR_COUNT: typing.ClassVar[str] = ...
        PROVIDE_PROVISION_RESPONSE_ERROR_LIST: typing.ClassVar[str] = ...
        PROVIDE_PROVISION_RESPONSE_OK_COUNT: typing.ClassVar[str] = ...
        SESSION_END_TIMES_MS: typing.ClassVar[str] = ...
        SESSION_START_TIMES_MS: typing.ClassVar[str] = ...

    class MediaDrmStateException(MediaDrmThrowable, java.lang.IllegalStateException):
        def getDiagnosticInfo(self) -> str: ...
        def getErrorCode(self) -> int: ...
        def getErrorContext(self) -> int: ...
        def getOemError(self) -> int: ...
        def getVendorError(self) -> int: ...
        def isTransient(self) -> bool: ...

    class LogMessage(java.lang.Object):
        def getMessage(self) -> str: ...
        def getPriority(self) -> int: ...
        def getTimestampMillis(self) -> int: ...
        def toString(self) -> str: ...

    class KeyStatus(java.lang.Object):
        STATUS_EXPIRED: typing.ClassVar[int] = ...
        STATUS_INTERNAL_ERROR: typing.ClassVar[int] = ...
        STATUS_OUTPUT_NOT_ALLOWED: typing.ClassVar[int] = ...
        STATUS_PENDING: typing.ClassVar[int] = ...
        STATUS_USABLE: typing.ClassVar[int] = ...
        STATUS_USABLE_IN_FUTURE: typing.ClassVar[int] = ...
        def getKeyId(self) -> java.chaquopy.JavaArrayJByte: ...
        def getStatusCode(self) -> int: ...

    class KeyRequest(java.lang.Object):
        REQUEST_TYPE_INITIAL: typing.ClassVar[int] = ...
        REQUEST_TYPE_NONE: typing.ClassVar[int] = ...
        REQUEST_TYPE_RELEASE: typing.ClassVar[int] = ...
        REQUEST_TYPE_RENEWAL: typing.ClassVar[int] = ...
        REQUEST_TYPE_UPDATE: typing.ClassVar[int] = ...
        def getData(self) -> java.chaquopy.JavaArrayJByte: ...
        def getDefaultUrl(self) -> str: ...
        def getRequestType(self) -> int: ...

    class ErrorCodes(java.lang.Object):
        ERROR_CERTIFICATE_MALFORMED: typing.ClassVar[int] = ...
        ERROR_CERTIFICATE_MISSING: typing.ClassVar[int] = ...
        ERROR_CRYPTO_LIBRARY: typing.ClassVar[int] = ...
        ERROR_FRAME_TOO_LARGE: typing.ClassVar[int] = ...
        ERROR_GENERIC_OEM: typing.ClassVar[int] = ...
        ERROR_GENERIC_PLUGIN: typing.ClassVar[int] = ...
        ERROR_INIT_DATA: typing.ClassVar[int] = ...
        ERROR_INSUFFICIENT_OUTPUT_PROTECTION: typing.ClassVar[int] = ...
        ERROR_INSUFFICIENT_SECURITY: typing.ClassVar[int] = ...
        ERROR_KEY_EXPIRED: typing.ClassVar[int] = ...
        ERROR_KEY_NOT_LOADED: typing.ClassVar[int] = ...
        ERROR_LICENSE_PARSE: typing.ClassVar[int] = ...
        ERROR_LICENSE_POLICY: typing.ClassVar[int] = ...
        ERROR_LICENSE_RELEASE: typing.ClassVar[int] = ...
        ERROR_LICENSE_REQUEST_REJECTED: typing.ClassVar[int] = ...
        ERROR_LICENSE_RESTORE: typing.ClassVar[int] = ...
        ERROR_LICENSE_STATE: typing.ClassVar[int] = ...
        ERROR_LOST_STATE: typing.ClassVar[int] = ...
        ERROR_MEDIA_FRAMEWORK: typing.ClassVar[int] = ...
        ERROR_NO_KEY: typing.ClassVar[int] = ...
        ERROR_PROVISIONING_CERTIFICATE: typing.ClassVar[int] = ...
        ERROR_PROVISIONING_CONFIG: typing.ClassVar[int] = ...
        ERROR_PROVISIONING_PARSE: typing.ClassVar[int] = ...
        ERROR_PROVISIONING_REQUEST_REJECTED: typing.ClassVar[int] = ...
        ERROR_PROVISIONING_RETRY: typing.ClassVar[int] = ...
        ERROR_RESOURCE_BUSY: typing.ClassVar[int] = ...
        ERROR_RESOURCE_CONTENTION: typing.ClassVar[int] = ...
        ERROR_SECURE_STOP_RELEASE: typing.ClassVar[int] = ...
        ERROR_SESSION_NOT_OPENED: typing.ClassVar[int] = ...
        ERROR_STORAGE_READ: typing.ClassVar[int] = ...
        ERROR_STORAGE_WRITE: typing.ClassVar[int] = ...
        ERROR_UNKNOWN: typing.ClassVar[int] = ...
        ERROR_UNSUPPORTED_OPERATION: typing.ClassVar[int] = ...
        ERROR_ZERO_SUBSAMPLES: typing.ClassVar[int] = ...

    class CryptoSession(java.lang.Object):
        def decrypt(self, keyid: java.chaquopy.JavaArrayJByte, input: java.chaquopy.JavaArrayJByte, iv: java.chaquopy.JavaArrayJByte, /) -> java.chaquopy.JavaArrayJByte: ...
        def encrypt(self, keyid: java.chaquopy.JavaArrayJByte, input: java.chaquopy.JavaArrayJByte, iv: java.chaquopy.JavaArrayJByte, /) -> java.chaquopy.JavaArrayJByte: ...
        def sign(self, keyid: java.chaquopy.JavaArrayJByte, message: java.chaquopy.JavaArrayJByte, /) -> java.chaquopy.JavaArrayJByte: ...
        def verify(self, keyid: java.chaquopy.JavaArrayJByte, message: java.chaquopy.JavaArrayJByte, signature: java.chaquopy.JavaArrayJByte, /) -> bool: ...

class MediaDrmException(MediaDrmThrowable, java.lang.Exception):
    def __init__(self, detailMessage: str | java.lang.String, /) -> None: ...
    def getErrorContext(self) -> int: ...
    def getOemError(self) -> int: ...
    def getVendorError(self) -> int: ...

class MediaDrmResetException(MediaDrmThrowable, java.lang.IllegalStateException):
    def __init__(self, detailMessage: str | java.lang.String, /) -> None: ...

class MediaDrmThrowable(java.lang.Object):
    def getErrorContext(self) -> int: ...
    def getOemError(self) -> int: ...
    def getVendorError(self) -> int: ...

class MediaExtractor(java.lang.Object):
    SAMPLE_FLAG_ENCRYPTED: typing.ClassVar[int] = ...
    SAMPLE_FLAG_PARTIAL_FRAME: typing.ClassVar[int] = ...
    SAMPLE_FLAG_SYNC: typing.ClassVar[int] = ...
    SEEK_TO_CLOSEST_SYNC: typing.ClassVar[int] = ...
    SEEK_TO_NEXT_SYNC: typing.ClassVar[int] = ...
    SEEK_TO_PREVIOUS_SYNC: typing.ClassVar[int] = ...
    def __init__(self) -> None: ...
    def advance(self) -> bool: ...
    def finalize(self) -> None: ...
    def getAudioPresentations(self, trackIndex: int | java.jint | java.lang.Integer, /) -> java.util.List[AudioPresentation]: ...
    def getCachedDuration(self) -> int: ...
    def getCasInfo(self, index: int | java.jint | java.lang.Integer, /) -> MediaExtractor.CasInfo: ...
    def getDrmInitData(self) -> DrmInitData: ...
    def getLogSessionId(self) -> android.media.metrics.LogSessionId: ...
    def getMetrics(self) -> android.os.PersistableBundle: ...
    def getPsshInfo(self) -> java.util.Map[java.util.UUID, java.chaquopy.JavaArrayJByte] | None: ...
    def getSampleCryptoInfo(self, arg1: MediaCodec.CryptoInfo, /) -> bool: ...
    def getSampleFlags(self) -> int: ...
    def getSampleSize(self) -> int: ...
    def getSampleTime(self) -> int: ...
    def getSampleTrackIndex(self) -> int: ...
    def getTrackCount(self) -> int: ...
    def getTrackFormat(self, index: int | java.jint | java.lang.Integer, /) -> MediaFormat: ...
    def hasCacheReachedEndOfStream(self) -> bool: ...
    def readSampleData(self, arg1: java.nio.ByteBuffer, arg2: int | java.jint | java.lang.Integer, /) -> int: ...
    def release(self) -> None: ...
    def seekTo(self, arg1: int | java.jlong | java.lang.Long, arg2: int | java.jint | java.lang.Integer, /) -> None: ...
    def selectTrack(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def setDataSource(self, afd: android.content.res.AssetFileDescriptor, /) -> None: ...
    @typing.overload
    def setDataSource(self, arg1: MediaDataSource, /) -> None: ...
    @typing.overload
    def setDataSource(self, fd: java.io.FileDescriptor, /) -> None: ...
    @typing.overload
    def setDataSource(self, path: str | java.lang.String, /) -> None: ...
    @typing.overload
    def setDataSource(self, path: str | java.lang.String, headers: java.util.Map[java.lang.String, java.lang.String], /) -> None: ...
    @typing.overload
    def setDataSource(self, context: android.content.Context, uri: android.net.Uri, headers: java.util.Map[java.lang.String, java.lang.String], /) -> None: ...
    @typing.overload
    def setDataSource(self, arg1: java.io.FileDescriptor, arg2: int | java.jlong | java.lang.Long, arg3: int | java.jlong | java.lang.Long, /) -> None: ...
    def setLogSessionId(self, logSessionId: android.media.metrics.LogSessionId, /) -> None: ...
    def setMediaCas(self, mediaCas: MediaCas, /) -> None: ...
    def unselectTrack(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...

    class MetricsConstants(java.lang.Object):
        FORMAT: typing.ClassVar[str] = ...
        MIME_TYPE: typing.ClassVar[str] = ...
        TRACKS: typing.ClassVar[str] = ...

    class CasInfo(java.lang.Object):
        def getPrivateData(self) -> java.chaquopy.JavaArrayJByte: ...
        def getSession(self) -> MediaCas.Session: ...
        def getSystemId(self) -> int: ...

class MediaFeature(java.lang.Object):
    def __init__(self) -> None: ...

    class HdrType(java.lang.Object):
        DOLBY_VISION: typing.ClassVar[str] = ...
        HDR10: typing.ClassVar[str] = ...
        HDR10_PLUS: typing.ClassVar[str] = ...
        HLG: typing.ClassVar[str] = ...

class MediaFormat(java.lang.Object):
    COLOR_RANGE_FULL: typing.ClassVar[int] = ...
    COLOR_RANGE_LIMITED: typing.ClassVar[int] = ...
    COLOR_STANDARD_BT2020: typing.ClassVar[int] = ...
    COLOR_STANDARD_BT601_NTSC: typing.ClassVar[int] = ...
    COLOR_STANDARD_BT601_PAL: typing.ClassVar[int] = ...
    COLOR_STANDARD_BT709: typing.ClassVar[int] = ...
    COLOR_TRANSFER_HLG: typing.ClassVar[int] = ...
    COLOR_TRANSFER_LINEAR: typing.ClassVar[int] = ...
    COLOR_TRANSFER_SDR_VIDEO: typing.ClassVar[int] = ...
    COLOR_TRANSFER_ST2084: typing.ClassVar[int] = ...
    FLAG_SECURITY_MODEL_MEMORY_SAFE: typing.ClassVar[int] = ...
    FLAG_SECURITY_MODEL_SANDBOXED: typing.ClassVar[int] = ...
    KEY_AAC_DRC_ALBUM_MODE: typing.ClassVar[str] = ...
    KEY_AAC_DRC_ATTENUATION_FACTOR: typing.ClassVar[str] = ...
    KEY_AAC_DRC_BOOST_FACTOR: typing.ClassVar[str] = ...
    KEY_AAC_DRC_EFFECT_TYPE: typing.ClassVar[str] = ...
    KEY_AAC_DRC_HEAVY_COMPRESSION: typing.ClassVar[str] = ...
    KEY_AAC_DRC_OUTPUT_LOUDNESS: typing.ClassVar[str] = ...
    KEY_AAC_DRC_TARGET_REFERENCE_LEVEL: typing.ClassVar[str] = ...
    KEY_AAC_ENCODED_TARGET_LEVEL: typing.ClassVar[str] = ...
    KEY_AAC_MAX_OUTPUT_CHANNEL_COUNT: typing.ClassVar[str] = ...
    KEY_AAC_PROFILE: typing.ClassVar[str] = ...
    KEY_AAC_SBR_MODE: typing.ClassVar[str] = ...
    KEY_ALLOW_FRAME_DROP: typing.ClassVar[str] = ...
    KEY_AUDIO_SESSION_ID: typing.ClassVar[str] = ...
    KEY_BITRATE_MODE: typing.ClassVar[str] = ...
    KEY_BIT_RATE: typing.ClassVar[str] = ...
    KEY_BUFFER_BATCH_MAX_OUTPUT_SIZE: typing.ClassVar[str] = ...
    KEY_BUFFER_BATCH_THRESHOLD_OUTPUT_SIZE: typing.ClassVar[str] = ...
    KEY_CAPTION_SERVICE_NUMBER: typing.ClassVar[str] = ...
    KEY_CAPTURE_RATE: typing.ClassVar[str] = ...
    KEY_CHANNEL_COUNT: typing.ClassVar[str] = ...
    KEY_CHANNEL_MASK: typing.ClassVar[str] = ...
    KEY_CODECS_STRING: typing.ClassVar[str] = ...
    KEY_COLOR_FORMAT: typing.ClassVar[str] = ...
    KEY_COLOR_RANGE: typing.ClassVar[str] = ...
    KEY_COLOR_STANDARD: typing.ClassVar[str] = ...
    KEY_COLOR_TRANSFER: typing.ClassVar[str] = ...
    KEY_COLOR_TRANSFER_REQUEST: typing.ClassVar[str] = ...
    KEY_COMPLEXITY: typing.ClassVar[str] = ...
    KEY_CREATE_INPUT_SURFACE_SUSPENDED: typing.ClassVar[str] = ...
    KEY_CROP_BOTTOM: typing.ClassVar[str] = ...
    KEY_CROP_LEFT: typing.ClassVar[str] = ...
    KEY_CROP_RIGHT: typing.ClassVar[str] = ...
    KEY_CROP_TOP: typing.ClassVar[str] = ...
    KEY_DURATION: typing.ClassVar[str] = ...
    KEY_ENCODER_DELAY: typing.ClassVar[str] = ...
    KEY_ENCODER_PADDING: typing.ClassVar[str] = ...
    KEY_FLAC_COMPRESSION_LEVEL: typing.ClassVar[str] = ...
    KEY_FRAME_RATE: typing.ClassVar[str] = ...
    KEY_GRID_COLUMNS: typing.ClassVar[str] = ...
    KEY_GRID_ROWS: typing.ClassVar[str] = ...
    KEY_HAPTIC_CHANNEL_COUNT: typing.ClassVar[str] = ...
    KEY_HARDWARE_AV_SYNC_ID: typing.ClassVar[str] = ...
    KEY_HDR10_PLUS_INFO: typing.ClassVar[str] = ...
    KEY_HDR_STATIC_INFO: typing.ClassVar[str] = ...
    KEY_HEIGHT: typing.ClassVar[str] = ...
    KEY_IMPORTANCE: typing.ClassVar[str] = ...
    KEY_INTRA_REFRESH_PERIOD: typing.ClassVar[str] = ...
    KEY_IS_ADTS: typing.ClassVar[str] = ...
    KEY_IS_AUTOSELECT: typing.ClassVar[str] = ...
    KEY_IS_DEFAULT: typing.ClassVar[str] = ...
    KEY_IS_FORCED_SUBTITLE: typing.ClassVar[str] = ...
    KEY_I_FRAME_INTERVAL: typing.ClassVar[str] = ...
    KEY_LANGUAGE: typing.ClassVar[str] = ...
    KEY_LATENCY: typing.ClassVar[str] = ...
    KEY_LEVEL: typing.ClassVar[str] = ...
    KEY_LOW_LATENCY: typing.ClassVar[str] = ...
    KEY_MAX_B_FRAMES: typing.ClassVar[str] = ...
    KEY_MAX_FPS_TO_ENCODER: typing.ClassVar[str] = ...
    KEY_MAX_HEIGHT: typing.ClassVar[str] = ...
    KEY_MAX_INPUT_SIZE: typing.ClassVar[str] = ...
    KEY_MAX_OUTPUT_CHANNEL_COUNT: typing.ClassVar[str] = ...
    KEY_MAX_PTS_GAP_TO_ENCODER: typing.ClassVar[str] = ...
    KEY_MAX_WIDTH: typing.ClassVar[str] = ...
    KEY_MIME: typing.ClassVar[str] = ...
    KEY_MPEGH_COMPATIBLE_SETS: typing.ClassVar[str] = ...
    KEY_MPEGH_PROFILE_LEVEL_INDICATION: typing.ClassVar[str] = ...
    KEY_MPEGH_REFERENCE_CHANNEL_LAYOUT: typing.ClassVar[str] = ...
    KEY_OPERATING_RATE: typing.ClassVar[str] = ...
    KEY_OUTPUT_REORDER_DEPTH: typing.ClassVar[str] = ...
    KEY_PCM_ENCODING: typing.ClassVar[str] = ...
    KEY_PICTURE_PROFILE_ID: typing.ClassVar[str] = ...
    KEY_PICTURE_PROFILE_INSTANCE: typing.ClassVar[str] = ...
    KEY_PICTURE_TYPE: typing.ClassVar[str] = ...
    KEY_PIXEL_ASPECT_RATIO_HEIGHT: typing.ClassVar[str] = ...
    KEY_PIXEL_ASPECT_RATIO_WIDTH: typing.ClassVar[str] = ...
    KEY_PREPEND_HEADER_TO_SYNC_FRAMES: typing.ClassVar[str] = ...
    KEY_PRIORITY: typing.ClassVar[str] = ...
    KEY_PROFILE: typing.ClassVar[str] = ...
    KEY_PUSH_BLANK_BUFFERS_ON_STOP: typing.ClassVar[str] = ...
    KEY_QUALITY: typing.ClassVar[str] = ...
    KEY_REPEAT_PREVIOUS_FRAME_AFTER: typing.ClassVar[str] = ...
    KEY_ROTATION: typing.ClassVar[str] = ...
    KEY_SAMPLE_RATE: typing.ClassVar[str] = ...
    KEY_SECURITY_MODEL: typing.ClassVar[str] = ...
    KEY_SLICE_HEIGHT: typing.ClassVar[str] = ...
    KEY_SLOW_MOTION_MARKERS: typing.ClassVar[str] = ...
    KEY_STRIDE: typing.ClassVar[str] = ...
    KEY_TEMPORAL_LAYERING: typing.ClassVar[str] = ...
    KEY_TILE_HEIGHT: typing.ClassVar[str] = ...
    KEY_TILE_WIDTH: typing.ClassVar[str] = ...
    KEY_TRACK_ID: typing.ClassVar[str] = ...
    KEY_VIDEO_ENCODING_STATISTICS_LEVEL: typing.ClassVar[str] = ...
    KEY_VIDEO_QP_AVERAGE: typing.ClassVar[str] = ...
    KEY_VIDEO_QP_B_MAX: typing.ClassVar[str] = ...
    KEY_VIDEO_QP_B_MIN: typing.ClassVar[str] = ...
    KEY_VIDEO_QP_I_MAX: typing.ClassVar[str] = ...
    KEY_VIDEO_QP_I_MIN: typing.ClassVar[str] = ...
    KEY_VIDEO_QP_MAX: typing.ClassVar[str] = ...
    KEY_VIDEO_QP_MIN: typing.ClassVar[str] = ...
    KEY_VIDEO_QP_P_MAX: typing.ClassVar[str] = ...
    KEY_VIDEO_QP_P_MIN: typing.ClassVar[str] = ...
    KEY_WIDTH: typing.ClassVar[str] = ...
    LOG_SESSION_ID: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_AAC: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_AAC_ELD: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_AAC_HE_V1: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_AAC_HE_V2: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_AAC_LC: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_AAC_XHE: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_AC3: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_AC4: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_AMR_NB: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_AMR_WB: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_DOLBY_MAT: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_DOLBY_TRUEHD: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_DRA: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_DTS: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_DTS_HD: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_DTS_UHD: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_EAC3: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_EAC3_JOC: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_FLAC: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_G711_ALAW: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_G711_MLAW: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_IAMF: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_IEC61937: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_MPEG: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_MPEGH_BL_L3: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_MPEGH_BL_L4: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_MPEGH_LC_L3: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_MPEGH_LC_L4: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_MPEGH_MHA1: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_MPEGH_MHM1: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_MSGSM: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_OPUS: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_QCELP: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_RAW: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_SCRAMBLED: typing.ClassVar[str] = ...
    MIMETYPE_AUDIO_VORBIS: typing.ClassVar[str] = ...
    MIMETYPE_IMAGE_ANDROID_HEIC: typing.ClassVar[str] = ...
    MIMETYPE_IMAGE_AVIF: typing.ClassVar[str] = ...
    MIMETYPE_TEXT_CEA_608: typing.ClassVar[str] = ...
    MIMETYPE_TEXT_CEA_708: typing.ClassVar[str] = ...
    MIMETYPE_TEXT_SUBRIP: typing.ClassVar[str] = ...
    MIMETYPE_TEXT_VTT: typing.ClassVar[str] = ...
    MIMETYPE_VIDEO_APV: typing.ClassVar[str] = ...
    MIMETYPE_VIDEO_AV1: typing.ClassVar[str] = ...
    MIMETYPE_VIDEO_AVC: typing.ClassVar[str] = ...
    MIMETYPE_VIDEO_DOLBY_VISION: typing.ClassVar[str] = ...
    MIMETYPE_VIDEO_H263: typing.ClassVar[str] = ...
    MIMETYPE_VIDEO_HEVC: typing.ClassVar[str] = ...
    MIMETYPE_VIDEO_MPEG2: typing.ClassVar[str] = ...
    MIMETYPE_VIDEO_MPEG4: typing.ClassVar[str] = ...
    MIMETYPE_VIDEO_RAW: typing.ClassVar[str] = ...
    MIMETYPE_VIDEO_SCRAMBLED: typing.ClassVar[str] = ...
    MIMETYPE_VIDEO_VP8: typing.ClassVar[str] = ...
    MIMETYPE_VIDEO_VP9: typing.ClassVar[str] = ...
    PICTURE_TYPE_B: typing.ClassVar[int] = ...
    PICTURE_TYPE_I: typing.ClassVar[int] = ...
    PICTURE_TYPE_P: typing.ClassVar[int] = ...
    PICTURE_TYPE_UNKNOWN: typing.ClassVar[int] = ...
    TYPE_BYTE_BUFFER: typing.ClassVar[int] = ...
    TYPE_FLOAT: typing.ClassVar[int] = ...
    TYPE_INTEGER: typing.ClassVar[int] = ...
    TYPE_LONG: typing.ClassVar[int] = ...
    TYPE_NULL: typing.ClassVar[int] = ...
    TYPE_STRING: typing.ClassVar[int] = ...
    VIDEO_ENCODING_STATISTICS_LEVEL_1: typing.ClassVar[int] = ...
    VIDEO_ENCODING_STATISTICS_LEVEL_NONE: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self) -> None: ...
    @typing.overload
    def __init__(self, other: MediaFormat, /) -> None: ...
    def containsFeature(self, name: str | java.lang.String, /) -> bool: ...
    def containsKey(self, name: str | java.lang.String, /) -> bool: ...
    @staticmethod
    def createAudioFormat(mime: str | java.lang.String, sampleRate: int | java.jint | java.lang.Integer, channelCount: int | java.jint | java.lang.Integer, /) -> MediaFormat: ...
    @staticmethod
    def createSubtitleFormat(mime: str | java.lang.String, language: str | java.lang.String, /) -> MediaFormat: ...
    @staticmethod
    def createVideoFormat(mime: str | java.lang.String, width: int | java.jint | java.lang.Integer, height: int | java.jint | java.lang.Integer, /) -> MediaFormat: ...
    @typing.overload
    def getByteBuffer(self, name: str | java.lang.String, /) -> java.nio.ByteBuffer | None: ...
    @typing.overload
    def getByteBuffer(self, name: str | java.lang.String, defaultValue: java.nio.ByteBuffer, /) -> java.nio.ByteBuffer | None: ...
    def getFeatureEnabled(self, feature: str | java.lang.String, /) -> bool: ...
    def getFeatures(self) -> java.util.Set[java.lang.String]: ...
    @typing.overload
    def getFloat(self, name: str | java.lang.String, /) -> float: ...
    @typing.overload
    def getFloat(self, name: str | java.lang.String, defaultValue: float | java.jfloat | java.lang.Float, /) -> float: ...
    @typing.overload
    def getInteger(self, name: str | java.lang.String, /) -> int: ...
    @typing.overload
    def getInteger(self, name: str | java.lang.String, defaultValue: int | java.jint | java.lang.Integer, /) -> int: ...
    def getKeys(self) -> java.util.Set[java.lang.String]: ...
    @typing.overload
    def getLong(self, name: str | java.lang.String, /) -> int: ...
    @typing.overload
    def getLong(self, name: str | java.lang.String, defaultValue: int | java.jlong | java.lang.Long, /) -> int: ...
    @typing.overload
    def getNumber(self, name: str | java.lang.String, /) -> java.lang.Number | None: ...
    @typing.overload
    def getNumber(self, name: str | java.lang.String, defaultValue: java.lang.Number, /) -> java.lang.Number | None: ...
    @typing.overload
    def getString(self, name: str | java.lang.String, /) -> str | None: ...
    @typing.overload
    def getString(self, name: str | java.lang.String, defaultValue: str | java.lang.String, /) -> str | None: ...
    def getValueTypeForKey(self, name: str | java.lang.String, /) -> int: ...
    def removeFeature(self, name: str | java.lang.String, /) -> None: ...
    def removeKey(self, name: str | java.lang.String, /) -> None: ...
    def setByteBuffer(self, name: str | java.lang.String, bytes: java.nio.ByteBuffer, /) -> None: ...
    def setFeatureEnabled(self, feature: str | java.lang.String, enabled: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setFloat(self, name: str | java.lang.String, value: float | java.jfloat | java.lang.Float, /) -> None: ...
    def setInteger(self, name: str | java.lang.String, value: int | java.jint | java.lang.Integer, /) -> None: ...
    def setLong(self, name: str | java.lang.String, value: int | java.jlong | java.lang.Long, /) -> None: ...
    def setString(self, name: str | java.lang.String, value: str | java.lang.String, /) -> None: ...
    def toString(self) -> str: ...

    class QpOffsetRect(java.lang.Object):
        def __init__(self, contour: android.graphics.Rect, qpOffset: int | java.jint | java.lang.Integer, /) -> None: ...
        @typing.overload
        def flattenToString(self) -> str: ...
        @typing.overload
        @staticmethod
        def flattenToString(qpOffsetRects: java.util.List[MediaFormat.QpOffsetRect], /) -> str: ...
        def set(self, contour: android.graphics.Rect, qpOffset: int | java.jint | java.lang.Integer, /) -> None: ...

class MediaMetadata(android.os.Parcelable):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[MediaMetadata]] = ...
    METADATA_KEY_ALBUM: typing.ClassVar[str] = ...
    METADATA_KEY_ALBUM_ART: typing.ClassVar[str] = ...
    METADATA_KEY_ALBUM_ARTIST: typing.ClassVar[str] = ...
    METADATA_KEY_ALBUM_ART_URI: typing.ClassVar[str] = ...
    METADATA_KEY_ART: typing.ClassVar[str] = ...
    METADATA_KEY_ARTIST: typing.ClassVar[str] = ...
    METADATA_KEY_ART_URI: typing.ClassVar[str] = ...
    METADATA_KEY_AUTHOR: typing.ClassVar[str] = ...
    METADATA_KEY_BT_FOLDER_TYPE: typing.ClassVar[str] = ...
    METADATA_KEY_COMPILATION: typing.ClassVar[str] = ...
    METADATA_KEY_COMPOSER: typing.ClassVar[str] = ...
    METADATA_KEY_DATE: typing.ClassVar[str] = ...
    METADATA_KEY_DISC_NUMBER: typing.ClassVar[str] = ...
    METADATA_KEY_DISPLAY_DESCRIPTION: typing.ClassVar[str] = ...
    METADATA_KEY_DISPLAY_ICON: typing.ClassVar[str] = ...
    METADATA_KEY_DISPLAY_ICON_URI: typing.ClassVar[str] = ...
    METADATA_KEY_DISPLAY_SUBTITLE: typing.ClassVar[str] = ...
    METADATA_KEY_DISPLAY_TITLE: typing.ClassVar[str] = ...
    METADATA_KEY_DURATION: typing.ClassVar[str] = ...
    METADATA_KEY_GENRE: typing.ClassVar[str] = ...
    METADATA_KEY_MEDIA_ID: typing.ClassVar[str] = ...
    METADATA_KEY_MEDIA_URI: typing.ClassVar[str] = ...
    METADATA_KEY_NUM_TRACKS: typing.ClassVar[str] = ...
    METADATA_KEY_RATING: typing.ClassVar[str] = ...
    METADATA_KEY_TITLE: typing.ClassVar[str] = ...
    METADATA_KEY_TRACK_NUMBER: typing.ClassVar[str] = ...
    METADATA_KEY_USER_RATING: typing.ClassVar[str] = ...
    METADATA_KEY_WRITER: typing.ClassVar[str] = ...
    METADATA_KEY_YEAR: typing.ClassVar[str] = ...
    def containsKey(self, key: str | java.lang.String, /) -> bool: ...
    def describeContents(self) -> int: ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getBitmap(self, key: str | java.lang.String, /) -> android.graphics.Bitmap: ...
    def getBitmapDimensionLimit(self) -> int: ...
    def getDescription(self) -> MediaDescription: ...
    def getLong(self, key: str | java.lang.String, /) -> int: ...
    def getRating(self, key: str | java.lang.String, /) -> Rating: ...
    def getString(self, key: str | java.lang.String, /) -> str | None: ...
    def getText(self, key: str | java.lang.String, /) -> java.lang.CharSequence | None: ...
    def hashCode(self) -> int: ...
    def keySet(self) -> java.util.Set[java.lang.String]: ...
    def size(self) -> int: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class Builder(java.lang.Object):
        @typing.overload
        def __init__(self) -> None: ...
        @typing.overload
        def __init__(self, source: MediaMetadata, /) -> None: ...
        def build(self) -> MediaMetadata: ...
        def putBitmap(self, key: str | java.lang.String, value: android.graphics.Bitmap, /) -> MediaMetadata.Builder: ...
        def putLong(self, key: str | java.lang.String, value: int | java.jlong | java.lang.Long, /) -> MediaMetadata.Builder: ...
        def putRating(self, key: str | java.lang.String, value: Rating, /) -> MediaMetadata.Builder: ...
        def putString(self, key: str | java.lang.String, value: str | java.lang.String, /) -> MediaMetadata.Builder: ...
        def putText(self, key: str | java.lang.String, value: java.lang.CharSequence, /) -> MediaMetadata.Builder: ...
        def setBitmapDimensionLimit(self, bitmapDimensionLimit: int | java.jint | java.lang.Integer, /) -> MediaMetadata.Builder: ...

class MediaMetadataEditor(java.lang.Object):
    BITMAP_KEY_ARTWORK: typing.ClassVar[int] = ...
    RATING_KEY_BY_OTHERS: typing.ClassVar[int] = ...
    RATING_KEY_BY_USER: typing.ClassVar[int] = ...
    def addEditableKey(self, key: int | java.jint | java.lang.Integer, /) -> None: ...
    def apply(self) -> None: ...
    def clear(self) -> None: ...
    def getBitmap(self, key: int | java.jint | java.lang.Integer, defaultValue: android.graphics.Bitmap, /) -> android.graphics.Bitmap: ...
    def getEditableKeys(self) -> java.chaquopy.JavaArrayJInt | None: ...
    def getLong(self, key: int | java.jint | java.lang.Integer, defaultValue: int | java.jlong | java.lang.Long, /) -> int: ...
    def getObject(self, key: int | java.jint | java.lang.Integer, defaultValue: java.lang.Object | int | bool | float | str, /) -> java.lang.Object: ...
    def getString(self, key: int | java.jint | java.lang.Integer, defaultValue: str | java.lang.String, /) -> str: ...
    def putBitmap(self, key: int | java.jint | java.lang.Integer, bitmap: android.graphics.Bitmap, /) -> MediaMetadataEditor: ...
    def putLong(self, key: int | java.jint | java.lang.Integer, value: int | java.jlong | java.lang.Long, /) -> MediaMetadataEditor: ...
    def putObject(self, key: int | java.jint | java.lang.Integer, value: java.lang.Object | int | bool | float | str, /) -> MediaMetadataEditor: ...
    def putString(self, key: int | java.jint | java.lang.Integer, value: str | java.lang.String, /) -> MediaMetadataEditor: ...
    def removeEditableKeys(self) -> None: ...

class MediaMetadataRetriever(java.lang.AutoCloseable):
    METADATA_KEY_ALBUM: typing.ClassVar[int] = ...
    METADATA_KEY_ALBUMARTIST: typing.ClassVar[int] = ...
    METADATA_KEY_ARTIST: typing.ClassVar[int] = ...
    METADATA_KEY_AUTHOR: typing.ClassVar[int] = ...
    METADATA_KEY_BITRATE: typing.ClassVar[int] = ...
    METADATA_KEY_BITS_PER_SAMPLE: typing.ClassVar[int] = ...
    METADATA_KEY_CAPTURE_FRAMERATE: typing.ClassVar[int] = ...
    METADATA_KEY_CD_TRACK_NUMBER: typing.ClassVar[int] = ...
    METADATA_KEY_COLOR_RANGE: typing.ClassVar[int] = ...
    METADATA_KEY_COLOR_STANDARD: typing.ClassVar[int] = ...
    METADATA_KEY_COLOR_TRANSFER: typing.ClassVar[int] = ...
    METADATA_KEY_COMPILATION: typing.ClassVar[int] = ...
    METADATA_KEY_COMPOSER: typing.ClassVar[int] = ...
    METADATA_KEY_DATE: typing.ClassVar[int] = ...
    METADATA_KEY_DISC_NUMBER: typing.ClassVar[int] = ...
    METADATA_KEY_DURATION: typing.ClassVar[int] = ...
    METADATA_KEY_EXIF_LENGTH: typing.ClassVar[int] = ...
    METADATA_KEY_EXIF_OFFSET: typing.ClassVar[int] = ...
    METADATA_KEY_GENRE: typing.ClassVar[int] = ...
    METADATA_KEY_HAS_AUDIO: typing.ClassVar[int] = ...
    METADATA_KEY_HAS_IMAGE: typing.ClassVar[int] = ...
    METADATA_KEY_HAS_VIDEO: typing.ClassVar[int] = ...
    METADATA_KEY_IMAGE_COUNT: typing.ClassVar[int] = ...
    METADATA_KEY_IMAGE_HEIGHT: typing.ClassVar[int] = ...
    METADATA_KEY_IMAGE_PRIMARY: typing.ClassVar[int] = ...
    METADATA_KEY_IMAGE_ROTATION: typing.ClassVar[int] = ...
    METADATA_KEY_IMAGE_WIDTH: typing.ClassVar[int] = ...
    METADATA_KEY_LOCATION: typing.ClassVar[int] = ...
    METADATA_KEY_MIMETYPE: typing.ClassVar[int] = ...
    METADATA_KEY_NUM_TRACKS: typing.ClassVar[int] = ...
    METADATA_KEY_SAMPLERATE: typing.ClassVar[int] = ...
    METADATA_KEY_TITLE: typing.ClassVar[int] = ...
    METADATA_KEY_VIDEO_FRAME_COUNT: typing.ClassVar[int] = ...
    METADATA_KEY_VIDEO_HEIGHT: typing.ClassVar[int] = ...
    METADATA_KEY_VIDEO_ROTATION: typing.ClassVar[int] = ...
    METADATA_KEY_VIDEO_WIDTH: typing.ClassVar[int] = ...
    METADATA_KEY_WRITER: typing.ClassVar[int] = ...
    METADATA_KEY_XMP_LENGTH: typing.ClassVar[int] = ...
    METADATA_KEY_XMP_OFFSET: typing.ClassVar[int] = ...
    METADATA_KEY_YEAR: typing.ClassVar[int] = ...
    OPTION_CLOSEST: typing.ClassVar[int] = ...
    OPTION_CLOSEST_SYNC: typing.ClassVar[int] = ...
    OPTION_NEXT_SYNC: typing.ClassVar[int] = ...
    OPTION_PREVIOUS_SYNC: typing.ClassVar[int] = ...
    def __init__(self) -> None: ...
    def close(self) -> None: ...
    def extractMetadata(self, keyCode: int | java.jint | java.lang.Integer, /) -> str | None: ...
    def finalize(self) -> None: ...
    def getEmbeddedPicture(self) -> java.chaquopy.JavaArrayJByte | None: ...
    @typing.overload
    def getFrameAtIndex(self, frameIndex: int | java.jint | java.lang.Integer, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    def getFrameAtIndex(self, frameIndex: int | java.jint | java.lang.Integer, params: MediaMetadataRetriever.BitmapParams, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    def getFrameAtTime(self) -> android.graphics.Bitmap | None: ...
    @typing.overload
    def getFrameAtTime(self, timeUs: int | java.jlong | java.lang.Long, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    def getFrameAtTime(self, timeUs: int | java.jlong | java.lang.Long, option: int | java.jint | java.lang.Integer, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    def getFrameAtTime(self, timeUs: int | java.jlong | java.lang.Long, option: int | java.jint | java.lang.Integer, params: MediaMetadataRetriever.BitmapParams, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    def getFramesAtIndex(self, frameIndex: int | java.jint | java.lang.Integer, numFrames: int | java.jint | java.lang.Integer, /) -> java.util.List[android.graphics.Bitmap]: ...
    @typing.overload
    def getFramesAtIndex(self, frameIndex: int | java.jint | java.lang.Integer, numFrames: int | java.jint | java.lang.Integer, params: MediaMetadataRetriever.BitmapParams, /) -> java.util.List[android.graphics.Bitmap]: ...
    @typing.overload
    def getImageAtIndex(self, imageIndex: int | java.jint | java.lang.Integer, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    def getImageAtIndex(self, imageIndex: int | java.jint | java.lang.Integer, params: MediaMetadataRetriever.BitmapParams, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    def getPrimaryImage(self) -> android.graphics.Bitmap | None: ...
    @typing.overload
    def getPrimaryImage(self, params: MediaMetadataRetriever.BitmapParams, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    def getScaledFrameAtTime(self, timeUs: int | java.jlong | java.lang.Long, option: int | java.jint | java.lang.Integer, dstWidth: int | java.jint | java.lang.Integer, dstHeight: int | java.jint | java.lang.Integer, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    def getScaledFrameAtTime(self, timeUs: int | java.jlong | java.lang.Long, option: int | java.jint | java.lang.Integer, dstWidth: int | java.jint | java.lang.Integer, dstHeight: int | java.jint | java.lang.Integer, params: MediaMetadataRetriever.BitmapParams, /) -> android.graphics.Bitmap | None: ...
    def release(self) -> None: ...
    @typing.overload
    def setDataSource(self, dataSource: MediaDataSource, /) -> None: ...
    @typing.overload
    def setDataSource(self, fd: java.io.FileDescriptor, /) -> None: ...
    @typing.overload
    def setDataSource(self, path: str | java.lang.String, /) -> None: ...
    @typing.overload
    def setDataSource(self, context: android.content.Context, uri: android.net.Uri, /) -> None: ...
    @typing.overload
    def setDataSource(self, uri: str | java.lang.String, headers: java.util.Map[java.lang.String, java.lang.String], /) -> None: ...
    @typing.overload
    def setDataSource(self, fd: java.io.FileDescriptor, offset: int | java.jlong | java.lang.Long, length: int | java.jlong | java.lang.Long, /) -> None: ...

    class BitmapParams(java.lang.Object):
        def __init__(self) -> None: ...
        def getActualConfig(self) -> android.graphics.Bitmap.Config: ...
        def getPreferredConfig(self) -> android.graphics.Bitmap.Config: ...
        def setPreferredConfig(self, config: android.graphics.Bitmap.Config, /) -> None: ...

class MediaMuxer(java.lang.Object):
    @typing.overload
    def __init__(self, fd: java.io.FileDescriptor, format: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, path: str | java.lang.String, format: int | java.jint | java.lang.Integer, /) -> None: ...
    def addTrack(self, format: MediaFormat, /) -> int: ...
    def finalize(self) -> None: ...
    def release(self) -> None: ...
    def setLocation(self, latitude: float | java.jfloat | java.lang.Float, longitude: float | java.jfloat | java.lang.Float, /) -> None: ...
    def setOrientationHint(self, degrees: int | java.jint | java.lang.Integer, /) -> None: ...
    def start(self) -> None: ...
    def stop(self) -> None: ...
    def writeSampleData(self, trackIndex: int | java.jint | java.lang.Integer, byteBuf: java.nio.ByteBuffer, bufferInfo: MediaCodec.BufferInfo, /) -> None: ...

    class OutputFormat(java.lang.Object):
        MUXER_OUTPUT_3GPP: typing.ClassVar[int] = ...
        MUXER_OUTPUT_HEIF: typing.ClassVar[int] = ...
        MUXER_OUTPUT_MPEG_4: typing.ClassVar[int] = ...
        MUXER_OUTPUT_OGG: typing.ClassVar[int] = ...
        MUXER_OUTPUT_WEBM: typing.ClassVar[int] = ...

class MediaParser(java.lang.Object):
    PARAMETER_ADTS_ENABLE_CBR_SEEKING: typing.ClassVar[str] = ...
    PARAMETER_AMR_ENABLE_CBR_SEEKING: typing.ClassVar[str] = ...
    PARAMETER_FLAC_DISABLE_ID3: typing.ClassVar[str] = ...
    PARAMETER_MATROSKA_DISABLE_CUES_SEEKING: typing.ClassVar[str] = ...
    PARAMETER_MP3_DISABLE_ID3: typing.ClassVar[str] = ...
    PARAMETER_MP3_ENABLE_CBR_SEEKING: typing.ClassVar[str] = ...
    PARAMETER_MP3_ENABLE_INDEX_SEEKING: typing.ClassVar[str] = ...
    PARAMETER_MP4_IGNORE_EDIT_LISTS: typing.ClassVar[str] = ...
    PARAMETER_MP4_IGNORE_TFDT_BOX: typing.ClassVar[str] = ...
    PARAMETER_MP4_TREAT_VIDEO_FRAMES_AS_KEYFRAMES: typing.ClassVar[str] = ...
    PARAMETER_TS_ALLOW_NON_IDR_AVC_KEYFRAMES: typing.ClassVar[str] = ...
    PARAMETER_TS_DETECT_ACCESS_UNITS: typing.ClassVar[str] = ...
    PARAMETER_TS_ENABLE_HDMV_DTS_AUDIO_STREAMS: typing.ClassVar[str] = ...
    PARAMETER_TS_IGNORE_AAC_STREAM: typing.ClassVar[str] = ...
    PARAMETER_TS_IGNORE_AVC_STREAM: typing.ClassVar[str] = ...
    PARAMETER_TS_IGNORE_SPLICE_INFO_STREAM: typing.ClassVar[str] = ...
    PARAMETER_TS_MODE: typing.ClassVar[str] = ...
    PARSER_NAME_AC3: typing.ClassVar[str] = ...
    PARSER_NAME_AC4: typing.ClassVar[str] = ...
    PARSER_NAME_ADTS: typing.ClassVar[str] = ...
    PARSER_NAME_AMR: typing.ClassVar[str] = ...
    PARSER_NAME_FLAC: typing.ClassVar[str] = ...
    PARSER_NAME_FLV: typing.ClassVar[str] = ...
    PARSER_NAME_FMP4: typing.ClassVar[str] = ...
    PARSER_NAME_MATROSKA: typing.ClassVar[str] = ...
    PARSER_NAME_MP3: typing.ClassVar[str] = ...
    PARSER_NAME_MP4: typing.ClassVar[str] = ...
    PARSER_NAME_OGG: typing.ClassVar[str] = ...
    PARSER_NAME_PS: typing.ClassVar[str] = ...
    PARSER_NAME_TS: typing.ClassVar[str] = ...
    PARSER_NAME_UNKNOWN: typing.ClassVar[str] = ...
    PARSER_NAME_WAV: typing.ClassVar[str] = ...
    SAMPLE_FLAG_DECODE_ONLY: typing.ClassVar[int] = ...
    SAMPLE_FLAG_ENCRYPTED: typing.ClassVar[int] = ...
    SAMPLE_FLAG_HAS_SUPPLEMENTAL_DATA: typing.ClassVar[int] = ...
    SAMPLE_FLAG_KEY_FRAME: typing.ClassVar[int] = ...
    SAMPLE_FLAG_LAST_SAMPLE: typing.ClassVar[int] = ...
    def advance(self, seekableInputReader: MediaParser.SeekableInputReader, /) -> bool: ...
    @staticmethod
    def create(outputConsumer: MediaParser.OutputConsumer, /, *parserNames: java.lang.String) -> MediaParser: ...
    @staticmethod
    def createByName(name: str | java.lang.String, outputConsumer: MediaParser.OutputConsumer, /) -> MediaParser: ...
    def getLogSessionId(self) -> android.media.metrics.LogSessionId: ...
    def getParserName(self) -> str | None: ...
    @staticmethod
    def getParserNames(mediaFormat: MediaFormat, /) -> java.util.List[java.lang.String]: ...
    def release(self) -> None: ...
    def seek(self, seekPoint: MediaParser.SeekPoint, /) -> None: ...
    def setLogSessionId(self, logSessionId: android.media.metrics.LogSessionId, /) -> None: ...
    def setParameter(self, parameterName: str | java.lang.String, value: java.lang.Object | int | bool | float | str, /) -> MediaParser: ...
    def supportsParameter(self, parameterName: str | java.lang.String, /) -> bool: ...

    class UnrecognizedInputFormatException(java.io.IOException): ...

    class TrackData(java.lang.Object):
        drmInitData: DrmInitData = ...
        mediaFormat: MediaFormat = ...

    class SeekableInputReader(MediaParser.InputReader):
        def seekToPosition(self, arg1: int | java.jlong | java.lang.Long, /) -> None: ...

    class SeekPoint(java.lang.Object):
        START: typing.ClassVar[MediaParser.SeekPoint] = ...
        position: int = ...
        timeMicros: int = ...
        def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
        def hashCode(self) -> int: ...
        def toString(self) -> str: ...

    class SeekMap(java.lang.Object):
        UNKNOWN_DURATION: typing.ClassVar[int] = ...
        def getDurationMicros(self) -> int: ...
        def getSeekPoints(self, timeMicros: int | java.jlong | java.lang.Long, /) -> android.util.Pair[MediaParser.SeekPoint, MediaParser.SeekPoint]: ...
        def isSeekable(self) -> bool: ...

    class ParsingException(java.io.IOException): ...

    class OutputConsumer(java.lang.Object):
        def onSampleCompleted(self, arg1: int | java.jint | java.lang.Integer, arg2: int | java.jlong | java.lang.Long, arg3: int | java.jint | java.lang.Integer, arg4: int | java.jint | java.lang.Integer, arg5: int | java.jint | java.lang.Integer, arg6: MediaCodec.CryptoInfo, /) -> None: ...
        def onSampleDataFound(self, arg1: int | java.jint | java.lang.Integer, arg2: MediaParser.InputReader, /) -> None: ...
        def onSeekMapFound(self, arg1: MediaParser.SeekMap, /) -> None: ...
        def onTrackCountFound(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
        def onTrackDataFound(self, arg1: int | java.jint | java.lang.Integer, arg2: MediaParser.TrackData, /) -> None: ...

    class InputReader(java.lang.Object):
        def getLength(self) -> int: ...
        def getPosition(self) -> int: ...
        def read(self, arg1: java.chaquopy.JavaArrayJByte, arg2: int | java.jint | java.lang.Integer, arg3: int | java.jint | java.lang.Integer, /) -> int: ...

class MediaPlayer(AudioRouting, VolumeAutomation):
    MEDIA_ERROR_IO: typing.ClassVar[int] = ...
    MEDIA_ERROR_MALFORMED: typing.ClassVar[int] = ...
    MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK: typing.ClassVar[int] = ...
    MEDIA_ERROR_SERVER_DIED: typing.ClassVar[int] = ...
    MEDIA_ERROR_TIMED_OUT: typing.ClassVar[int] = ...
    MEDIA_ERROR_UNKNOWN: typing.ClassVar[int] = ...
    MEDIA_ERROR_UNSUPPORTED: typing.ClassVar[int] = ...
    MEDIA_INFO_AUDIO_NOT_PLAYING: typing.ClassVar[int] = ...
    MEDIA_INFO_BAD_INTERLEAVING: typing.ClassVar[int] = ...
    MEDIA_INFO_BUFFERING_END: typing.ClassVar[int] = ...
    MEDIA_INFO_BUFFERING_START: typing.ClassVar[int] = ...
    MEDIA_INFO_METADATA_UPDATE: typing.ClassVar[int] = ...
    MEDIA_INFO_NOT_SEEKABLE: typing.ClassVar[int] = ...
    MEDIA_INFO_STARTED_AS_NEXT: typing.ClassVar[int] = ...
    MEDIA_INFO_SUBTITLE_TIMED_OUT: typing.ClassVar[int] = ...
    MEDIA_INFO_UNKNOWN: typing.ClassVar[int] = ...
    MEDIA_INFO_UNSUPPORTED_SUBTITLE: typing.ClassVar[int] = ...
    MEDIA_INFO_VIDEO_NOT_PLAYING: typing.ClassVar[int] = ...
    MEDIA_INFO_VIDEO_RENDERING_START: typing.ClassVar[int] = ...
    MEDIA_INFO_VIDEO_TRACK_LAGGING: typing.ClassVar[int] = ...
    MEDIA_MIMETYPE_TEXT_SUBRIP: typing.ClassVar[str] = ...
    PREPARE_DRM_STATUS_PREPARATION_ERROR: typing.ClassVar[int] = ...
    PREPARE_DRM_STATUS_PROVISIONING_NETWORK_ERROR: typing.ClassVar[int] = ...
    PREPARE_DRM_STATUS_PROVISIONING_SERVER_ERROR: typing.ClassVar[int] = ...
    PREPARE_DRM_STATUS_SUCCESS: typing.ClassVar[int] = ...
    SEEK_CLOSEST: typing.ClassVar[int] = ...
    SEEK_CLOSEST_SYNC: typing.ClassVar[int] = ...
    SEEK_NEXT_SYNC: typing.ClassVar[int] = ...
    SEEK_PREVIOUS_SYNC: typing.ClassVar[int] = ...
    VIDEO_SCALING_MODE_SCALE_TO_FIT: typing.ClassVar[int] = ...
    VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self) -> None: ...
    @typing.overload
    def __init__(self, context: android.content.Context, /) -> None: ...
    def addOnRoutingChangedListener(self, listener: AudioRouting.OnRoutingChangedListener, handler: android.os.Handler, /) -> None: ...
    @typing.overload
    def addTimedTextSource(self, fd: java.io.FileDescriptor, mimeType: str | java.lang.String, /) -> None: ...
    @typing.overload
    def addTimedTextSource(self, path: str | java.lang.String, mimeType: str | java.lang.String, /) -> None: ...
    @typing.overload
    def addTimedTextSource(self, context: android.content.Context, uri: android.net.Uri, mimeType: str | java.lang.String, /) -> None: ...
    @typing.overload
    def addTimedTextSource(self, fd: java.io.FileDescriptor, offset: int | java.jlong | java.lang.Long, length: int | java.jlong | java.lang.Long, mime: str | java.lang.String, /) -> None: ...
    def attachAuxEffect(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
    def clearOnMediaTimeDiscontinuityListener(self) -> None: ...
    def clearOnSubtitleDataListener(self) -> None: ...
    @typing.overload
    @staticmethod
    def create(context: android.content.Context, resid: int | java.jint | java.lang.Integer, /) -> MediaPlayer | None: ...
    @typing.overload
    @staticmethod
    def create(context: android.content.Context, uri: android.net.Uri, /) -> MediaPlayer | None: ...
    @typing.overload
    @staticmethod
    def create(context: android.content.Context, uri: android.net.Uri, holder: android.view.SurfaceHolder, /) -> MediaPlayer | None: ...
    @typing.overload
    @staticmethod
    def create(context: android.content.Context, resid: int | java.jint | java.lang.Integer, audioAttributes: AudioAttributes, audioSessionId: int | java.jint | java.lang.Integer, /) -> MediaPlayer | None: ...
    @typing.overload
    @staticmethod
    def create(context: android.content.Context, uri: android.net.Uri, holder: android.view.SurfaceHolder, audioAttributes: AudioAttributes, audioSessionId: int | java.jint | java.lang.Integer, /) -> MediaPlayer | None: ...
    def createVolumeShaper(self, configuration: VolumeShaper.Configuration, /) -> VolumeShaper: ...
    def deselectTrack(self, index: int | java.jint | java.lang.Integer, /) -> None: ...
    def finalize(self) -> None: ...
    def getAudioSessionId(self) -> int: ...
    def getCurrentPosition(self) -> int: ...
    def getDrmInfo(self) -> MediaPlayer.DrmInfo: ...
    def getDrmPropertyString(self, propertyName: str | java.lang.String, /) -> str: ...
    def getDuration(self) -> int: ...
    def getKeyRequest(self, keySetId: java.chaquopy.JavaArrayJByte, initData: java.chaquopy.JavaArrayJByte, mimeType: str | java.lang.String, keyType: int | java.jint | java.lang.Integer, optionalParameters: java.util.Map[java.lang.String, java.lang.String], /) -> MediaDrm.KeyRequest: ...
    def getMetrics(self) -> android.os.PersistableBundle: ...
    def getPlaybackParams(self) -> PlaybackParams: ...
    def getPreferredDevice(self) -> AudioDeviceInfo: ...
    def getRoutedDevice(self) -> AudioDeviceInfo: ...
    def getRoutedDevices(self) -> java.util.List[AudioDeviceInfo]: ...
    def getSelectedTrack(self, trackType: int | java.jint | java.lang.Integer, /) -> int: ...
    def getSyncParams(self) -> SyncParams: ...
    def getTimestamp(self) -> MediaTimestamp | None: ...
    def getTrackInfo(self) -> java.chaquopy.JavaArray[MediaPlayer.TrackInfo]: ...
    def getVideoHeight(self) -> int: ...
    def getVideoWidth(self) -> int: ...
    def isLooping(self) -> bool: ...
    def isPlaying(self) -> bool: ...
    def pause(self) -> None: ...
    def prepare(self) -> None: ...
    def prepareAsync(self) -> None: ...
    def prepareDrm(self, uuid: java.util.UUID, /) -> None: ...
    def provideKeyResponse(self, keySetId: java.chaquopy.JavaArrayJByte, response: java.chaquopy.JavaArrayJByte, /) -> java.chaquopy.JavaArrayJByte: ...
    def release(self) -> None: ...
    def releaseDrm(self) -> None: ...
    def removeOnRoutingChangedListener(self, listener: AudioRouting.OnRoutingChangedListener, /) -> None: ...
    def reset(self) -> None: ...
    def restoreKeys(self, keySetId: java.chaquopy.JavaArrayJByte, /) -> None: ...
    @typing.overload
    def seekTo(self, msec: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def seekTo(self, msec: int | java.jlong | java.lang.Long, mode: int | java.jint | java.lang.Integer, /) -> None: ...
    def selectTrack(self, index: int | java.jint | java.lang.Integer, /) -> None: ...
    def setAudioAttributes(self, attributes: AudioAttributes, /) -> None: ...
    def setAudioSessionId(self, sessionId: int | java.jint | java.lang.Integer, /) -> None: ...
    def setAudioStreamType(self, streamtype: int | java.jint | java.lang.Integer, /) -> None: ...
    def setAuxEffectSendLevel(self, level: float | java.jfloat | java.lang.Float, /) -> None: ...
    @typing.overload
    def setDataSource(self, afd: android.content.res.AssetFileDescriptor, /) -> None: ...
    @typing.overload
    def setDataSource(self, dataSource: MediaDataSource, /) -> None: ...
    @typing.overload
    def setDataSource(self, fd: java.io.FileDescriptor, /) -> None: ...
    @typing.overload
    def setDataSource(self, path: str | java.lang.String, /) -> None: ...
    @typing.overload
    def setDataSource(self, context: android.content.Context, uri: android.net.Uri, /) -> None: ...
    @typing.overload
    def setDataSource(self, context: android.content.Context, uri: android.net.Uri, headers: java.util.Map[java.lang.String, java.lang.String], /) -> None: ...
    @typing.overload
    def setDataSource(self, fd: java.io.FileDescriptor, offset: int | java.jlong | java.lang.Long, length: int | java.jlong | java.lang.Long, /) -> None: ...
    @typing.overload
    def setDataSource(self, context: android.content.Context, uri: android.net.Uri, headers: java.util.Map[java.lang.String, java.lang.String], cookies: java.util.List[java.net.HttpCookie], /) -> None: ...
    def setDisplay(self, sh: android.view.SurfaceHolder, /) -> None: ...
    def setDrmPropertyString(self, propertyName: str | java.lang.String, value: str | java.lang.String, /) -> None: ...
    def setLooping(self, arg1: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setNextMediaPlayer(self, arg1: MediaPlayer, /) -> None: ...
    def setOnBufferingUpdateListener(self, listener: MediaPlayer.OnBufferingUpdateListener, /) -> None: ...
    def setOnCompletionListener(self, listener: MediaPlayer.OnCompletionListener, /) -> None: ...
    def setOnDrmConfigHelper(self, listener: MediaPlayer.OnDrmConfigHelper, /) -> None: ...
    @typing.overload
    def setOnDrmInfoListener(self, listener: MediaPlayer.OnDrmInfoListener, /) -> None: ...
    @typing.overload
    def setOnDrmInfoListener(self, listener: MediaPlayer.OnDrmInfoListener, handler: android.os.Handler, /) -> None: ...
    @typing.overload
    def setOnDrmPreparedListener(self, listener: MediaPlayer.OnDrmPreparedListener, /) -> None: ...
    @typing.overload
    def setOnDrmPreparedListener(self, listener: MediaPlayer.OnDrmPreparedListener, handler: android.os.Handler, /) -> None: ...
    def setOnErrorListener(self, listener: MediaPlayer.OnErrorListener, /) -> None: ...
    def setOnInfoListener(self, listener: MediaPlayer.OnInfoListener, /) -> None: ...
    @typing.overload
    def setOnMediaTimeDiscontinuityListener(self, listener: MediaPlayer.OnMediaTimeDiscontinuityListener, /) -> None: ...
    @typing.overload
    def setOnMediaTimeDiscontinuityListener(self, listener: MediaPlayer.OnMediaTimeDiscontinuityListener, handler: android.os.Handler, /) -> None: ...
    def setOnPreparedListener(self, listener: MediaPlayer.OnPreparedListener, /) -> None: ...
    def setOnSeekCompleteListener(self, listener: MediaPlayer.OnSeekCompleteListener, /) -> None: ...
    @typing.overload
    def setOnSubtitleDataListener(self, listener: MediaPlayer.OnSubtitleDataListener, /) -> None: ...
    @typing.overload
    def setOnSubtitleDataListener(self, listener: MediaPlayer.OnSubtitleDataListener, handler: android.os.Handler, /) -> None: ...
    def setOnTimedMetaDataAvailableListener(self, listener: MediaPlayer.OnTimedMetaDataAvailableListener, /) -> None: ...
    def setOnTimedTextListener(self, listener: MediaPlayer.OnTimedTextListener, /) -> None: ...
    def setOnVideoSizeChangedListener(self, listener: MediaPlayer.OnVideoSizeChangedListener, /) -> None: ...
    def setPlaybackParams(self, arg1: PlaybackParams, /) -> None: ...
    def setPreferredDevice(self, deviceInfo: AudioDeviceInfo, /) -> bool: ...
    def setScreenOnWhilePlaying(self, screenOn: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setSurface(self, surface: android.view.Surface, /) -> None: ...
    def setSyncParams(self, arg1: SyncParams, /) -> None: ...
    def setVideoScalingMode(self, mode: int | java.jint | java.lang.Integer, /) -> None: ...
    def setVolume(self, leftVolume: float | java.jfloat | java.lang.Float, rightVolume: float | java.jfloat | java.lang.Float, /) -> None: ...
    def setWakeMode(self, context: android.content.Context, mode: int | java.jint | java.lang.Integer, /) -> None: ...
    def start(self) -> None: ...
    def stop(self) -> None: ...

    class TrackInfo(android.os.Parcelable):
        MEDIA_TRACK_TYPE_AUDIO: typing.ClassVar[int] = ...
        MEDIA_TRACK_TYPE_METADATA: typing.ClassVar[int] = ...
        MEDIA_TRACK_TYPE_SUBTITLE: typing.ClassVar[int] = ...
        MEDIA_TRACK_TYPE_TIMEDTEXT: typing.ClassVar[int] = ...
        MEDIA_TRACK_TYPE_UNKNOWN: typing.ClassVar[int] = ...
        MEDIA_TRACK_TYPE_VIDEO: typing.ClassVar[int] = ...
        def describeContents(self) -> int: ...
        def getFormat(self) -> MediaFormat: ...
        def getLanguage(self) -> str: ...
        def getTrackType(self) -> int: ...
        def toString(self) -> str: ...
        def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class ProvisioningServerErrorException(MediaDrmException):
        def __init__(self, detailMessage: str | java.lang.String, /) -> None: ...

    class ProvisioningNetworkErrorException(MediaDrmException):
        def __init__(self, detailMessage: str | java.lang.String, /) -> None: ...

    class OnVideoSizeChangedListener(java.lang.Object):
        def onVideoSizeChanged(self, arg1: MediaPlayer, arg2: int | java.jint | java.lang.Integer, arg3: int | java.jint | java.lang.Integer, /) -> None: ...

    class OnTimedTextListener(java.lang.Object):
        def onTimedText(self, arg1: MediaPlayer, arg2: TimedText, /) -> None: ...

    class OnTimedMetaDataAvailableListener(java.lang.Object):
        def onTimedMetaDataAvailable(self, arg1: MediaPlayer, arg2: TimedMetaData, /) -> None: ...

    class OnSubtitleDataListener(java.lang.Object):
        def onSubtitleData(self, arg1: MediaPlayer, arg2: SubtitleData, /) -> None: ...

    class OnSeekCompleteListener(java.lang.Object):
        def onSeekComplete(self, arg1: MediaPlayer, /) -> None: ...

    class OnPreparedListener(java.lang.Object):
        def onPrepared(self, arg1: MediaPlayer, /) -> None: ...

    class OnMediaTimeDiscontinuityListener(java.lang.Object):
        def onMediaTimeDiscontinuity(self, arg1: MediaPlayer, arg2: MediaTimestamp, /) -> None: ...

    class OnInfoListener(java.lang.Object):
        def onInfo(self, arg1: MediaPlayer, arg2: int | java.jint | java.lang.Integer, arg3: int | java.jint | java.lang.Integer, /) -> bool: ...

    class OnErrorListener(java.lang.Object):
        def onError(self, arg1: MediaPlayer, arg2: int | java.jint | java.lang.Integer, arg3: int | java.jint | java.lang.Integer, /) -> bool: ...

    class OnDrmPreparedListener(java.lang.Object):
        def onDrmPrepared(self, arg1: MediaPlayer, arg2: int | java.jint | java.lang.Integer, /) -> None: ...

    class OnDrmInfoListener(java.lang.Object):
        def onDrmInfo(self, arg1: MediaPlayer, arg2: MediaPlayer.DrmInfo, /) -> None: ...

    class OnDrmConfigHelper(java.lang.Object):
        def onDrmConfig(self, arg1: MediaPlayer, /) -> None: ...

    class OnCompletionListener(java.lang.Object):
        def onCompletion(self, arg1: MediaPlayer, /) -> None: ...

    class OnBufferingUpdateListener(java.lang.Object):
        def onBufferingUpdate(self, arg1: MediaPlayer, arg2: int | java.jint | java.lang.Integer, /) -> None: ...

    class NoDrmSchemeException(MediaDrmException):
        def __init__(self, detailMessage: str | java.lang.String, /) -> None: ...

    class MetricsConstants(java.lang.Object):
        CODEC_AUDIO: typing.ClassVar[str] = ...
        CODEC_VIDEO: typing.ClassVar[str] = ...
        DURATION: typing.ClassVar[str] = ...
        ERRORS: typing.ClassVar[str] = ...
        ERROR_CODE: typing.ClassVar[str] = ...
        FRAMES: typing.ClassVar[str] = ...
        FRAMES_DROPPED: typing.ClassVar[str] = ...
        HEIGHT: typing.ClassVar[str] = ...
        MIME_TYPE_AUDIO: typing.ClassVar[str] = ...
        MIME_TYPE_VIDEO: typing.ClassVar[str] = ...
        PLAYING: typing.ClassVar[str] = ...
        WIDTH: typing.ClassVar[str] = ...

    class DrmInfo(java.lang.Object):
        def getPssh(self) -> java.util.Map[java.util.UUID, java.chaquopy.JavaArrayJByte]: ...
        def getSupportedSchemes(self) -> java.chaquopy.JavaArray[java.util.UUID]: ...

class MediaRecorder(AudioRecordingMonitor, AudioRouting, MicrophoneDirection):
    MEDIA_ERROR_SERVER_DIED: typing.ClassVar[int] = ...
    MEDIA_RECORDER_ERROR_UNKNOWN: typing.ClassVar[int] = ...
    MEDIA_RECORDER_INFO_MAX_DURATION_REACHED: typing.ClassVar[int] = ...
    MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING: typing.ClassVar[int] = ...
    MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED: typing.ClassVar[int] = ...
    MEDIA_RECORDER_INFO_NEXT_OUTPUT_FILE_STARTED: typing.ClassVar[int] = ...
    MEDIA_RECORDER_INFO_UNKNOWN: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self) -> None: ...
    @typing.overload
    def __init__(self, context: android.content.Context, /) -> None: ...
    def addOnRoutingChangedListener(self, listener: AudioRouting.OnRoutingChangedListener, handler: android.os.Handler, /) -> None: ...
    def finalize(self) -> None: ...
    def getActiveMicrophones(self) -> java.util.List[MicrophoneInfo]: ...
    def getActiveRecordingConfiguration(self) -> AudioRecordingConfiguration | None: ...
    @staticmethod
    def getAudioSourceMax() -> int: ...
    def getLogSessionId(self) -> android.media.metrics.LogSessionId: ...
    def getMaxAmplitude(self) -> int: ...
    def getMetrics(self) -> android.os.PersistableBundle: ...
    def getPreferredDevice(self) -> AudioDeviceInfo: ...
    def getRoutedDevice(self) -> AudioDeviceInfo: ...
    def getRoutedDevices(self) -> java.util.List[AudioDeviceInfo]: ...
    def getSurface(self) -> android.view.Surface: ...
    def isPrivacySensitive(self) -> bool: ...
    def pause(self) -> None: ...
    def prepare(self) -> None: ...
    def registerAudioRecordingCallback(self, executor: java.util.concurrent.Executor, cb: AudioManager.AudioRecordingCallback, /) -> None: ...
    def release(self) -> None: ...
    def removeOnRoutingChangedListener(self, listener: AudioRouting.OnRoutingChangedListener, /) -> None: ...
    def reset(self) -> None: ...
    def resume(self) -> None: ...
    def setAudioChannels(self, numChannels: int | java.jint | java.lang.Integer, /) -> None: ...
    def setAudioEncoder(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
    def setAudioEncodingBitRate(self, bitRate: int | java.jint | java.lang.Integer, /) -> None: ...
    def setAudioProfile(self, profile: EncoderProfiles.AudioProfile, /) -> None: ...
    def setAudioSamplingRate(self, samplingRate: int | java.jint | java.lang.Integer, /) -> None: ...
    def setAudioSource(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
    def setCamera(self, arg1: android.hardware.Camera, /) -> None: ...
    def setCaptureRate(self, fps: float | java.jdouble | java.lang.Double, /) -> None: ...
    def setInputSurface(self, surface: android.view.Surface, /) -> None: ...
    def setLocation(self, latitude: float | java.jfloat | java.lang.Float, longitude: float | java.jfloat | java.lang.Float, /) -> None: ...
    def setLogSessionId(self, id: android.media.metrics.LogSessionId, /) -> None: ...
    def setMaxDuration(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
    def setMaxFileSize(self, arg1: int | java.jlong | java.lang.Long, /) -> None: ...
    @typing.overload
    def setNextOutputFile(self, file: java.io.File, /) -> None: ...
    @typing.overload
    def setNextOutputFile(self, fd: java.io.FileDescriptor, /) -> None: ...
    def setOnErrorListener(self, l: MediaRecorder.OnErrorListener, /) -> None: ...
    def setOnInfoListener(self, listener: MediaRecorder.OnInfoListener, /) -> None: ...
    def setOrientationHint(self, degrees: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def setOutputFile(self, file: java.io.File, /) -> None: ...
    @typing.overload
    def setOutputFile(self, fd: java.io.FileDescriptor, /) -> None: ...
    @typing.overload
    def setOutputFile(self, path: str | java.lang.String, /) -> None: ...
    def setOutputFormat(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
    def setPreferredDevice(self, deviceInfo: AudioDeviceInfo, /) -> bool: ...
    def setPreferredMicrophoneDirection(self, direction: int | java.jint | java.lang.Integer, /) -> bool: ...
    def setPreferredMicrophoneFieldDimension(self, zoom: float | java.jfloat | java.lang.Float, /) -> bool: ...
    def setPreviewDisplay(self, sv: android.view.Surface, /) -> None: ...
    def setPrivacySensitive(self, arg1: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setProfile(self, profile: CamcorderProfile, /) -> None: ...
    def setVideoEncoder(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
    def setVideoEncodingBitRate(self, bitRate: int | java.jint | java.lang.Integer, /) -> None: ...
    def setVideoEncodingProfileLevel(self, profile: int | java.jint | java.lang.Integer, level: int | java.jint | java.lang.Integer, /) -> None: ...
    def setVideoFrameRate(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
    def setVideoProfile(self, profile: EncoderProfiles.VideoProfile, /) -> None: ...
    def setVideoSize(self, arg1: int | java.jint | java.lang.Integer, arg2: int | java.jint | java.lang.Integer, /) -> None: ...
    def setVideoSource(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
    def start(self) -> None: ...
    def stop(self) -> None: ...
    def unregisterAudioRecordingCallback(self, cb: AudioManager.AudioRecordingCallback, /) -> None: ...

    class VideoSource(java.lang.Object):
        CAMERA: typing.ClassVar[int] = ...
        DEFAULT: typing.ClassVar[int] = ...
        SURFACE: typing.ClassVar[int] = ...

    class VideoEncoder(java.lang.Object):
        AV1: typing.ClassVar[int] = ...
        DEFAULT: typing.ClassVar[int] = ...
        DOLBY_VISION: typing.ClassVar[int] = ...
        H263: typing.ClassVar[int] = ...
        H264: typing.ClassVar[int] = ...
        HEVC: typing.ClassVar[int] = ...
        MPEG_4_SP: typing.ClassVar[int] = ...
        VP8: typing.ClassVar[int] = ...
        VP9: typing.ClassVar[int] = ...

    class OutputFormat(java.lang.Object):
        AAC_ADTS: typing.ClassVar[int] = ...
        AMR_NB: typing.ClassVar[int] = ...
        AMR_WB: typing.ClassVar[int] = ...
        DEFAULT: typing.ClassVar[int] = ...
        MPEG_2_TS: typing.ClassVar[int] = ...
        MPEG_4: typing.ClassVar[int] = ...
        OGG: typing.ClassVar[int] = ...
        RAW_AMR: typing.ClassVar[int] = ...
        THREE_GPP: typing.ClassVar[int] = ...
        WEBM: typing.ClassVar[int] = ...

    class OnInfoListener(java.lang.Object):
        def onInfo(self, arg1: MediaRecorder, arg2: int | java.jint | java.lang.Integer, arg3: int | java.jint | java.lang.Integer, /) -> None: ...

    class OnErrorListener(java.lang.Object):
        def onError(self, arg1: MediaRecorder, arg2: int | java.jint | java.lang.Integer, arg3: int | java.jint | java.lang.Integer, /) -> None: ...

    class MetricsConstants(java.lang.Object):
        AUDIO_BITRATE: typing.ClassVar[str] = ...
        AUDIO_CHANNELS: typing.ClassVar[str] = ...
        AUDIO_SAMPLERATE: typing.ClassVar[str] = ...
        AUDIO_TIMESCALE: typing.ClassVar[str] = ...
        CAPTURE_FPS: typing.ClassVar[str] = ...
        CAPTURE_FPS_ENABLE: typing.ClassVar[str] = ...
        FRAMERATE: typing.ClassVar[str] = ...
        HEIGHT: typing.ClassVar[str] = ...
        MOVIE_TIMESCALE: typing.ClassVar[str] = ...
        ROTATION: typing.ClassVar[str] = ...
        VIDEO_BITRATE: typing.ClassVar[str] = ...
        VIDEO_IFRAME_INTERVAL: typing.ClassVar[str] = ...
        VIDEO_LEVEL: typing.ClassVar[str] = ...
        VIDEO_PROFILE: typing.ClassVar[str] = ...
        VIDEO_TIMESCALE: typing.ClassVar[str] = ...
        WIDTH: typing.ClassVar[str] = ...

    class AudioSource(java.lang.Object):
        CAMCORDER: typing.ClassVar[int] = ...
        DEFAULT: typing.ClassVar[int] = ...
        MIC: typing.ClassVar[int] = ...
        REMOTE_SUBMIX: typing.ClassVar[int] = ...
        UNPROCESSED: typing.ClassVar[int] = ...
        VOICE_CALL: typing.ClassVar[int] = ...
        VOICE_COMMUNICATION: typing.ClassVar[int] = ...
        VOICE_DOWNLINK: typing.ClassVar[int] = ...
        VOICE_PERFORMANCE: typing.ClassVar[int] = ...
        VOICE_RECOGNITION: typing.ClassVar[int] = ...
        VOICE_UPLINK: typing.ClassVar[int] = ...

    class AudioEncoder(java.lang.Object):
        AAC: typing.ClassVar[int] = ...
        AAC_ELD: typing.ClassVar[int] = ...
        AMR_NB: typing.ClassVar[int] = ...
        AMR_WB: typing.ClassVar[int] = ...
        DEFAULT: typing.ClassVar[int] = ...
        HE_AAC: typing.ClassVar[int] = ...
        OPUS: typing.ClassVar[int] = ...
        VORBIS: typing.ClassVar[int] = ...

class MediaRoute2Info(android.os.Parcelable):
    CONNECTION_STATE_CONNECTED: typing.ClassVar[int] = ...
    CONNECTION_STATE_CONNECTING: typing.ClassVar[int] = ...
    CONNECTION_STATE_DISCONNECTED: typing.ClassVar[int] = ...
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[MediaRoute2Info]] = ...
    FEATURE_LIVE_AUDIO: typing.ClassVar[str] = ...
    FEATURE_LIVE_VIDEO: typing.ClassVar[str] = ...
    FEATURE_REMOTE_AUDIO_PLAYBACK: typing.ClassVar[str] = ...
    FEATURE_REMOTE_PLAYBACK: typing.ClassVar[str] = ...
    FEATURE_REMOTE_VIDEO_PLAYBACK: typing.ClassVar[str] = ...
    PLAYBACK_VOLUME_FIXED: typing.ClassVar[int] = ...
    PLAYBACK_VOLUME_VARIABLE: typing.ClassVar[int] = ...
    SUITABILITY_STATUS_NOT_SUITABLE_FOR_TRANSFER: typing.ClassVar[int] = ...
    SUITABILITY_STATUS_SUITABLE_FOR_DEFAULT_TRANSFER: typing.ClassVar[int] = ...
    SUITABILITY_STATUS_SUITABLE_FOR_MANUAL_TRANSFER: typing.ClassVar[int] = ...
    TYPE_AUX_LINE: typing.ClassVar[int] = ...
    TYPE_BLE_HEADSET: typing.ClassVar[int] = ...
    TYPE_BLUETOOTH_A2DP: typing.ClassVar[int] = ...
    TYPE_BUILTIN_SPEAKER: typing.ClassVar[int] = ...
    TYPE_DOCK: typing.ClassVar[int] = ...
    TYPE_GROUP: typing.ClassVar[int] = ...
    TYPE_HDMI: typing.ClassVar[int] = ...
    TYPE_HDMI_ARC: typing.ClassVar[int] = ...
    TYPE_HDMI_EARC: typing.ClassVar[int] = ...
    TYPE_HEARING_AID: typing.ClassVar[int] = ...
    TYPE_LINE_ANALOG: typing.ClassVar[int] = ...
    TYPE_LINE_DIGITAL: typing.ClassVar[int] = ...
    TYPE_MULTICHANNEL_SPEAKER_GROUP: typing.ClassVar[int] = ...
    TYPE_REMOTE_AUDIO_VIDEO_RECEIVER: typing.ClassVar[int] = ...
    TYPE_REMOTE_CAR: typing.ClassVar[int] = ...
    TYPE_REMOTE_COMPUTER: typing.ClassVar[int] = ...
    TYPE_REMOTE_GAME_CONSOLE: typing.ClassVar[int] = ...
    TYPE_REMOTE_SMARTPHONE: typing.ClassVar[int] = ...
    TYPE_REMOTE_SMARTWATCH: typing.ClassVar[int] = ...
    TYPE_REMOTE_SPEAKER: typing.ClassVar[int] = ...
    TYPE_REMOTE_TABLET: typing.ClassVar[int] = ...
    TYPE_REMOTE_TABLET_DOCKED: typing.ClassVar[int] = ...
    TYPE_REMOTE_TV: typing.ClassVar[int] = ...
    TYPE_UNKNOWN: typing.ClassVar[int] = ...
    TYPE_USB_ACCESSORY: typing.ClassVar[int] = ...
    TYPE_USB_DEVICE: typing.ClassVar[int] = ...
    TYPE_USB_HEADSET: typing.ClassVar[int] = ...
    TYPE_WIRED_HEADPHONES: typing.ClassVar[int] = ...
    TYPE_WIRED_HEADSET: typing.ClassVar[int] = ...
    def describeContents(self) -> int: ...
    def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getClientPackageName(self) -> str | None: ...
    def getConnectionState(self) -> int: ...
    def getDeduplicationIds(self) -> java.util.Set[java.lang.String]: ...
    def getDescription(self) -> java.lang.CharSequence | None: ...
    def getExtras(self) -> android.os.Bundle | None: ...
    def getFeatures(self) -> java.util.List[java.lang.String]: ...
    def getIconUri(self) -> android.net.Uri | None: ...
    def getId(self) -> str: ...
    def getName(self) -> java.lang.CharSequence: ...
    def getSuitabilityStatus(self) -> int: ...
    def getType(self) -> int: ...
    def getVolume(self) -> int: ...
    def getVolumeHandling(self) -> int: ...
    def getVolumeMax(self) -> int: ...
    def hashCode(self) -> int: ...
    def isSystemRoute(self) -> bool: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class Builder(java.lang.Object):
        @typing.overload
        def __init__(self, routeInfo: MediaRoute2Info, /) -> None: ...
        @typing.overload
        def __init__(self, id: str | java.lang.String, name: java.lang.CharSequence, /) -> None: ...
        def addFeature(self, feature: str | java.lang.String, /) -> MediaRoute2Info.Builder: ...
        def addFeatures(self, features: java.util.Collection[java.lang.String], /) -> MediaRoute2Info.Builder: ...
        def build(self) -> MediaRoute2Info: ...
        def clearFeatures(self) -> MediaRoute2Info.Builder: ...
        def setClientPackageName(self, packageName: str | java.lang.String, /) -> MediaRoute2Info.Builder: ...
        def setConnectionState(self, connectionState: int | java.jint | java.lang.Integer, /) -> MediaRoute2Info.Builder: ...
        def setDeduplicationIds(self, id: java.util.Set[java.lang.String], /) -> MediaRoute2Info.Builder: ...
        def setDescription(self, description: java.lang.CharSequence, /) -> MediaRoute2Info.Builder: ...
        def setExtras(self, extras: android.os.Bundle, /) -> MediaRoute2Info.Builder: ...
        def setIconUri(self, iconUri: android.net.Uri, /) -> MediaRoute2Info.Builder: ...
        def setSuitabilityStatus(self, suitabilityStatus: int | java.jint | java.lang.Integer, /) -> MediaRoute2Info.Builder: ...
        def setType(self, type: int | java.jint | java.lang.Integer, /) -> MediaRoute2Info.Builder: ...
        def setVisibilityPublic(self) -> MediaRoute2Info.Builder: ...
        def setVisibilityRestricted(self, allowedPackages: java.util.Set[java.lang.String], /) -> MediaRoute2Info.Builder: ...
        def setVolume(self, volume: int | java.jint | java.lang.Integer, /) -> MediaRoute2Info.Builder: ...
        def setVolumeHandling(self, volumeHandling: int | java.jint | java.lang.Integer, /) -> MediaRoute2Info.Builder: ...
        def setVolumeMax(self, volumeMax: int | java.jint | java.lang.Integer, /) -> MediaRoute2Info.Builder: ...

class MediaRoute2ProviderService(android.app.Service):
    REASON_INVALID_COMMAND: typing.ClassVar[int] = ...
    REASON_NETWORK_ERROR: typing.ClassVar[int] = ...
    REASON_REJECTED: typing.ClassVar[int] = ...
    REASON_ROUTE_NOT_AVAILABLE: typing.ClassVar[int] = ...
    REASON_UNKNOWN_ERROR: typing.ClassVar[int] = ...
    REQUEST_ID_NONE: typing.ClassVar[int] = ...
    SERVICE_INTERFACE: typing.ClassVar[str] = ...
    def __init__(self) -> None: ...
    def getAllSessionInfo(self) -> java.util.List[RoutingSessionInfo]: ...
    def getSessionInfo(self, sessionId: str | java.lang.String, /) -> RoutingSessionInfo | None: ...
    def notifyRequestFailed(self, requestId: int | java.jlong | java.lang.Long, reason: int | java.jint | java.lang.Integer, /) -> None: ...
    def notifyRoutes(self, routes: java.util.Collection[MediaRoute2Info], /) -> None: ...
    def notifySessionCreated(self, requestId: int | java.jlong | java.lang.Long, sessionInfo: RoutingSessionInfo, /) -> None: ...
    def notifySessionReleased(self, sessionId: str | java.lang.String, /) -> None: ...
    def notifySessionUpdated(self, sessionInfo: RoutingSessionInfo, /) -> None: ...
    def onBind(self, intent: android.content.Intent, /) -> android.os.IBinder | None: ...
    def onCreateSession(self, arg1: int | java.jlong | java.lang.Long, arg2: str | java.lang.String, arg3: str | java.lang.String, arg4: android.os.Bundle, /) -> None: ...
    def onDeselectRoute(self, arg1: int | java.jlong | java.lang.Long, arg2: str | java.lang.String, arg3: str | java.lang.String, /) -> None: ...
    def onDiscoveryPreferenceChanged(self, preference: RouteDiscoveryPreference, /) -> None: ...
    def onReleaseSession(self, arg1: int | java.jlong | java.lang.Long, arg2: str | java.lang.String, /) -> None: ...
    def onSelectRoute(self, arg1: int | java.jlong | java.lang.Long, arg2: str | java.lang.String, arg3: str | java.lang.String, /) -> None: ...
    def onSetRouteVolume(self, arg1: int | java.jlong | java.lang.Long, arg2: str | java.lang.String, arg3: int | java.jint | java.lang.Integer, /) -> None: ...
    def onSetSessionVolume(self, arg1: int | java.jlong | java.lang.Long, arg2: str | java.lang.String, arg3: int | java.jint | java.lang.Integer, /) -> None: ...
    def onTransferToRoute(self, arg1: int | java.jlong | java.lang.Long, arg2: str | java.lang.String, arg3: str | java.lang.String, /) -> None: ...

class MediaRouter(java.lang.Object):
    CALLBACK_FLAG_PERFORM_ACTIVE_SCAN: typing.ClassVar[int] = ...
    CALLBACK_FLAG_UNFILTERED_EVENTS: typing.ClassVar[int] = ...
    ROUTE_TYPE_LIVE_AUDIO: typing.ClassVar[int] = ...
    ROUTE_TYPE_LIVE_VIDEO: typing.ClassVar[int] = ...
    ROUTE_TYPE_USER: typing.ClassVar[int] = ...
    @typing.overload
    def addCallback(self, types: int | java.jint | java.lang.Integer, cb: MediaRouter.Callback, /) -> None: ...
    @typing.overload
    def addCallback(self, types: int | java.jint | java.lang.Integer, cb: MediaRouter.Callback, flags: int | java.jint | java.lang.Integer, /) -> None: ...
    def addUserRoute(self, info: MediaRouter.UserRouteInfo, /) -> None: ...
    def clearUserRoutes(self) -> None: ...
    @typing.overload
    def createRouteCategory(self, nameResId: int | java.jint | java.lang.Integer, isGroupable: bool | java.jboolean | java.lang.Boolean, /) -> MediaRouter.RouteCategory: ...
    @typing.overload
    def createRouteCategory(self, name: java.lang.CharSequence, isGroupable: bool | java.jboolean | java.lang.Boolean, /) -> MediaRouter.RouteCategory: ...
    def createUserRoute(self, category: MediaRouter.RouteCategory, /) -> MediaRouter.UserRouteInfo: ...
    def getCategoryAt(self, index: int | java.jint | java.lang.Integer, /) -> MediaRouter.RouteCategory: ...
    def getCategoryCount(self) -> int: ...
    def getDefaultRoute(self) -> MediaRouter.RouteInfo: ...
    def getRouteAt(self, index: int | java.jint | java.lang.Integer, /) -> MediaRouter.RouteInfo: ...
    def getRouteCount(self) -> int: ...
    def getSelectedRoute(self, type: int | java.jint | java.lang.Integer, /) -> MediaRouter.RouteInfo: ...
    def removeCallback(self, cb: MediaRouter.Callback, /) -> None: ...
    def removeUserRoute(self, info: MediaRouter.UserRouteInfo, /) -> None: ...
    def selectRoute(self, types: int | java.jint | java.lang.Integer, route: MediaRouter.RouteInfo, /) -> None: ...

    class VolumeCallback(java.lang.Object):
        def __init__(self) -> None: ...
        def onVolumeSetRequest(self, arg1: MediaRouter.RouteInfo, arg2: int | java.jint | java.lang.Integer, /) -> None: ...
        def onVolumeUpdateRequest(self, arg1: MediaRouter.RouteInfo, arg2: int | java.jint | java.lang.Integer, /) -> None: ...

    class UserRouteInfo(MediaRouter.RouteInfo):
        def getRemoteControlClient(self) -> RemoteControlClient: ...
        def requestSetVolume(self, volume: int | java.jint | java.lang.Integer, /) -> None: ...
        def requestUpdateVolume(self, direction: int | java.jint | java.lang.Integer, /) -> None: ...
        def setDescription(self, description: java.lang.CharSequence, /) -> None: ...
        def setIconDrawable(self, icon: android.graphics.drawable.Drawable, /) -> None: ...
        def setIconResource(self, resId: int | java.jint | java.lang.Integer, /) -> None: ...
        @typing.overload
        def setName(self, resId: int | java.jint | java.lang.Integer, /) -> None: ...
        @typing.overload
        def setName(self, name: java.lang.CharSequence, /) -> None: ...
        def setPlaybackStream(self, stream: int | java.jint | java.lang.Integer, /) -> None: ...
        def setPlaybackType(self, type: int | java.jint | java.lang.Integer, /) -> None: ...
        def setRemoteControlClient(self, rcc: RemoteControlClient, /) -> None: ...
        def setStatus(self, status: java.lang.CharSequence, /) -> None: ...
        def setVolume(self, volume: int | java.jint | java.lang.Integer, /) -> None: ...
        def setVolumeCallback(self, vcb: MediaRouter.VolumeCallback, /) -> None: ...
        def setVolumeHandling(self, volumeHandling: int | java.jint | java.lang.Integer, /) -> None: ...
        def setVolumeMax(self, volumeMax: int | java.jint | java.lang.Integer, /) -> None: ...

    class SimpleCallback(MediaRouter.Callback):
        def __init__(self) -> None: ...
        def onRouteAdded(self, router: MediaRouter, info: MediaRouter.RouteInfo, /) -> None: ...
        def onRouteChanged(self, router: MediaRouter, info: MediaRouter.RouteInfo, /) -> None: ...
        def onRouteGrouped(self, router: MediaRouter, info: MediaRouter.RouteInfo, group: MediaRouter.RouteGroup, index: int | java.jint | java.lang.Integer, /) -> None: ...
        def onRouteRemoved(self, router: MediaRouter, info: MediaRouter.RouteInfo, /) -> None: ...
        def onRouteSelected(self, router: MediaRouter, type: int | java.jint | java.lang.Integer, info: MediaRouter.RouteInfo, /) -> None: ...
        def onRouteUngrouped(self, router: MediaRouter, info: MediaRouter.RouteInfo, group: MediaRouter.RouteGroup, /) -> None: ...
        def onRouteUnselected(self, router: MediaRouter, type: int | java.jint | java.lang.Integer, info: MediaRouter.RouteInfo, /) -> None: ...
        def onRouteVolumeChanged(self, router: MediaRouter, info: MediaRouter.RouteInfo, /) -> None: ...

    class RouteInfo(java.lang.Object):
        DEVICE_TYPE_BLUETOOTH: typing.ClassVar[int] = ...
        DEVICE_TYPE_SPEAKER: typing.ClassVar[int] = ...
        DEVICE_TYPE_TV: typing.ClassVar[int] = ...
        DEVICE_TYPE_UNKNOWN: typing.ClassVar[int] = ...
        PLAYBACK_TYPE_LOCAL: typing.ClassVar[int] = ...
        PLAYBACK_TYPE_REMOTE: typing.ClassVar[int] = ...
        PLAYBACK_VOLUME_FIXED: typing.ClassVar[int] = ...
        PLAYBACK_VOLUME_VARIABLE: typing.ClassVar[int] = ...
        def getCategory(self) -> MediaRouter.RouteCategory: ...
        def getDescription(self) -> java.lang.CharSequence: ...
        def getDeviceType(self) -> int: ...
        def getGroup(self) -> MediaRouter.RouteGroup: ...
        def getIconDrawable(self) -> android.graphics.drawable.Drawable: ...
        @typing.overload
        def getName(self) -> java.lang.CharSequence: ...
        @typing.overload
        def getName(self, context: android.content.Context, /) -> java.lang.CharSequence: ...
        def getPlaybackStream(self) -> int: ...
        def getPlaybackType(self) -> int: ...
        def getPresentationDisplay(self) -> android.view.Display: ...
        def getStatus(self) -> java.lang.CharSequence: ...
        def getSupportedTypes(self) -> int: ...
        def getTag(self) -> java.lang.Object: ...
        def getVolume(self) -> int: ...
        def getVolumeHandling(self) -> int: ...
        def getVolumeMax(self) -> int: ...
        def isConnecting(self) -> bool: ...
        def isEnabled(self) -> bool: ...
        def requestSetVolume(self, volume: int | java.jint | java.lang.Integer, /) -> None: ...
        def requestUpdateVolume(self, direction: int | java.jint | java.lang.Integer, /) -> None: ...
        def setTag(self, tag: java.lang.Object | int | bool | float | str, /) -> None: ...
        def toString(self) -> str: ...

    class RouteGroup(MediaRouter.RouteInfo):
        @typing.overload
        def addRoute(self, route: MediaRouter.RouteInfo, /) -> None: ...
        @typing.overload
        def addRoute(self, route: MediaRouter.RouteInfo, insertAt: int | java.jint | java.lang.Integer, /) -> None: ...
        def getRouteAt(self, index: int | java.jint | java.lang.Integer, /) -> MediaRouter.RouteInfo: ...
        def getRouteCount(self) -> int: ...
        @typing.overload
        def removeRoute(self, index: int | java.jint | java.lang.Integer, /) -> None: ...
        @typing.overload
        def removeRoute(self, route: MediaRouter.RouteInfo, /) -> None: ...
        def requestSetVolume(self, volume: int | java.jint | java.lang.Integer, /) -> None: ...
        def requestUpdateVolume(self, direction: int | java.jint | java.lang.Integer, /) -> None: ...
        def setIconDrawable(self, icon: android.graphics.drawable.Drawable, /) -> None: ...
        def setIconResource(self, resId: int | java.jint | java.lang.Integer, /) -> None: ...
        def toString(self) -> str: ...

    class RouteCategory(java.lang.Object):
        @typing.overload
        def getName(self) -> java.lang.CharSequence: ...
        @typing.overload
        def getName(self, context: android.content.Context, /) -> java.lang.CharSequence: ...
        def getRoutes(self, out: java.util.List[MediaRouter.RouteInfo], /) -> java.util.List[MediaRouter.RouteInfo]: ...
        def getSupportedTypes(self) -> int: ...
        def isGroupable(self) -> bool: ...
        def toString(self) -> str: ...

    class Callback(java.lang.Object):
        def __init__(self) -> None: ...
        def onRouteAdded(self, arg1: MediaRouter, arg2: MediaRouter.RouteInfo, /) -> None: ...
        def onRouteChanged(self, arg1: MediaRouter, arg2: MediaRouter.RouteInfo, /) -> None: ...
        def onRouteGrouped(self, arg1: MediaRouter, arg2: MediaRouter.RouteInfo, arg3: MediaRouter.RouteGroup, arg4: int | java.jint | java.lang.Integer, /) -> None: ...
        def onRoutePresentationDisplayChanged(self, router: MediaRouter, info: MediaRouter.RouteInfo, /) -> None: ...
        def onRouteRemoved(self, arg1: MediaRouter, arg2: MediaRouter.RouteInfo, /) -> None: ...
        def onRouteSelected(self, arg1: MediaRouter, arg2: int | java.jint | java.lang.Integer, arg3: MediaRouter.RouteInfo, /) -> None: ...
        def onRouteUngrouped(self, arg1: MediaRouter, arg2: MediaRouter.RouteInfo, arg3: MediaRouter.RouteGroup, /) -> None: ...
        def onRouteUnselected(self, arg1: MediaRouter, arg2: int | java.jint | java.lang.Integer, arg3: MediaRouter.RouteInfo, /) -> None: ...
        def onRouteVolumeChanged(self, arg1: MediaRouter, arg2: MediaRouter.RouteInfo, /) -> None: ...

class MediaRouter2(java.lang.Object):
    def cancelScanRequest(self, token: MediaRouter2.ScanToken, /) -> None: ...
    def getController(self, id: str | java.lang.String, /) -> MediaRouter2.RoutingController | None: ...
    def getControllers(self) -> java.util.List[MediaRouter2.RoutingController]: ...
    @typing.overload
    @staticmethod
    def getInstance(context: android.content.Context, /) -> MediaRouter2 | None: ...
    @typing.overload
    @staticmethod
    def getInstance(context: android.content.Context, clientPackageName: str | java.lang.String, executor: java.util.concurrent.Executor, onInstanceInvalidatedListener: java.lang.Runnable, /) -> MediaRouter2 | None: ...
    def getRouteListingPreference(self) -> RouteListingPreference | None: ...
    def getRoutes(self) -> java.util.List[MediaRoute2Info]: ...
    def getSystemController(self) -> MediaRouter2.RoutingController: ...
    def registerControllerCallback(self, executor: java.util.concurrent.Executor, callback: MediaRouter2.ControllerCallback, /) -> None: ...
    def registerRouteCallback(self, executor: java.util.concurrent.Executor, routeCallback: MediaRouter2.RouteCallback, preference: RouteDiscoveryPreference, /) -> None: ...
    def registerRouteListingPreferenceUpdatedCallback(self, executor: java.util.concurrent.Executor, routeListingPreferenceCallback: java.util.function.Consumer[RouteListingPreference], /) -> None: ...
    def registerTransferCallback(self, executor: java.util.concurrent.Executor, callback: MediaRouter2.TransferCallback, /) -> None: ...
    def requestScan(self, scanRequest: MediaRouter2.ScanRequest, /) -> MediaRouter2.ScanToken: ...
    def setOnGetControllerHintsListener(self, listener: MediaRouter2.OnGetControllerHintsListener, /) -> None: ...
    def setRouteListingPreference(self, routeListingPreference: RouteListingPreference, /) -> None: ...
    def setRouteVolume(self, route: MediaRoute2Info, volume: int | java.jint | java.lang.Integer, /) -> None: ...
    def showSystemOutputSwitcher(self) -> bool: ...
    def stop(self) -> None: ...
    def transferTo(self, route: MediaRoute2Info, /) -> None: ...
    def unregisterControllerCallback(self, callback: MediaRouter2.ControllerCallback, /) -> None: ...
    def unregisterRouteCallback(self, routeCallback: MediaRouter2.RouteCallback, /) -> None: ...
    def unregisterRouteListingPreferenceUpdatedCallback(self, callback: java.util.function.Consumer[RouteListingPreference], /) -> None: ...
    def unregisterTransferCallback(self, callback: MediaRouter2.TransferCallback, /) -> None: ...

    class TransferCallback(java.lang.Object):
        def __init__(self) -> None: ...
        def onStop(self, controller: MediaRouter2.RoutingController, /) -> None: ...
        def onTransfer(self, oldController: MediaRouter2.RoutingController, newController: MediaRouter2.RoutingController, /) -> None: ...
        def onTransferFailure(self, requestedRoute: MediaRoute2Info, /) -> None: ...

    class ScanToken(java.lang.Object): ...

    class ScanRequest(java.lang.Object):
        def isScreenOffScan(self) -> bool: ...

        class Builder(java.lang.Object):
            def __init__(self) -> None: ...
            def build(self) -> MediaRouter2.ScanRequest: ...
            def setScreenOffScan(self, isScreenOffScan: bool | java.jboolean | java.lang.Boolean, /) -> MediaRouter2.ScanRequest.Builder: ...

    class RoutingController(java.lang.Object):
        def deselectRoute(self, route: MediaRoute2Info, /) -> None: ...
        def getControlHints(self) -> android.os.Bundle: ...
        def getDeselectableRoutes(self) -> java.util.List[MediaRoute2Info]: ...
        def getId(self) -> str: ...
        def getRoutingSessionInfo(self) -> RoutingSessionInfo: ...
        def getSelectableRoutes(self) -> java.util.List[MediaRoute2Info]: ...
        def getSelectedRoutes(self) -> java.util.List[MediaRoute2Info]: ...
        def getTransferableRoutes(self) -> java.util.List[MediaRoute2Info]: ...
        def getVolume(self) -> int: ...
        def getVolumeHandling(self) -> int: ...
        def getVolumeMax(self) -> int: ...
        def isReleased(self) -> bool: ...
        def release(self) -> None: ...
        def selectRoute(self, route: MediaRoute2Info, /) -> None: ...
        def setVolume(self, volume: int | java.jint | java.lang.Integer, /) -> None: ...
        def toString(self) -> str: ...
        def wasTransferInitiatedBySelf(self) -> bool: ...

    class RouteCallback(java.lang.Object):
        def __init__(self) -> None: ...
        def onRoutesAdded(self, routes: java.util.List[MediaRoute2Info], /) -> None: ...
        def onRoutesChanged(self, routes: java.util.List[MediaRoute2Info], /) -> None: ...
        def onRoutesRemoved(self, routes: java.util.List[MediaRoute2Info], /) -> None: ...
        def onRoutesUpdated(self, routes: java.util.List[MediaRoute2Info], /) -> None: ...

    class OnGetControllerHintsListener(java.lang.Object):
        def onGetControllerHints(self, arg1: MediaRoute2Info, /) -> android.os.Bundle: ...

    class ControllerCallback(java.lang.Object):
        def __init__(self) -> None: ...
        def onControllerUpdated(self, controller: MediaRouter2.RoutingController, /) -> None: ...

class MediaScannerConnection(android.content.ServiceConnection):
    def __init__(self, context: android.content.Context, client: MediaScannerConnection.MediaScannerConnectionClient, /) -> None: ...
    def connect(self) -> None: ...
    def disconnect(self) -> None: ...
    def isConnected(self) -> bool: ...
    def onServiceConnected(self, className: android.content.ComponentName, service: android.os.IBinder, /) -> None: ...
    def onServiceDisconnected(self, className: android.content.ComponentName, /) -> None: ...
    @typing.overload
    def scanFile(self, path: str | java.lang.String, mimeType: str | java.lang.String, /) -> None: ...
    @typing.overload
    @staticmethod
    def scanFile(context: android.content.Context, paths: java.chaquopy.JavaArray[java.lang.String], mimeTypes: java.chaquopy.JavaArray[java.lang.String], callback: MediaScannerConnection.OnScanCompletedListener, /) -> None: ...

    class OnScanCompletedListener(java.lang.Object):
        def onScanCompleted(self, arg1: str | java.lang.String, arg2: android.net.Uri, /) -> None: ...

    class MediaScannerConnectionClient(MediaScannerConnection.OnScanCompletedListener):
        def onMediaScannerConnected(self) -> None: ...

class MediaSession2(java.lang.AutoCloseable):
    def broadcastSessionCommand(self, command: Session2Command, args: android.os.Bundle, /) -> None: ...
    def cancelSessionCommand(self, controller: MediaSession2.ControllerInfo, token: java.lang.Object | int | bool | float | str, /) -> None: ...
    def close(self) -> None: ...
    def getConnectedControllers(self) -> java.util.List[MediaSession2.ControllerInfo]: ...
    def getId(self) -> str: ...
    def getToken(self) -> Session2Token: ...
    def isPlaybackActive(self) -> bool: ...
    def sendSessionCommand(self, controller: MediaSession2.ControllerInfo, command: Session2Command, args: android.os.Bundle, /) -> java.lang.Object: ...
    def setPlaybackActive(self, playbackActive: bool | java.jboolean | java.lang.Boolean, /) -> None: ...

    class SessionCallback(java.lang.Object):
        def __init__(self) -> None: ...
        def onCommandResult(self, session: MediaSession2, controller: MediaSession2.ControllerInfo, token: java.lang.Object | int | bool | float | str, command: Session2Command, result: Session2Command.Result, /) -> None: ...
        def onConnect(self, session: MediaSession2, controller: MediaSession2.ControllerInfo, /) -> Session2CommandGroup: ...
        def onDisconnected(self, session: MediaSession2, controller: MediaSession2.ControllerInfo, /) -> None: ...
        def onPostConnect(self, session: MediaSession2, controller: MediaSession2.ControllerInfo, /) -> None: ...
        def onSessionCommand(self, session: MediaSession2, controller: MediaSession2.ControllerInfo, command: Session2Command, args: android.os.Bundle, /) -> Session2Command.Result: ...

    class ControllerInfo(java.lang.Object):
        def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
        def getConnectionHints(self) -> android.os.Bundle: ...
        def getPackageName(self) -> str: ...
        def getRemoteUserInfo(self) -> android.media.session.MediaSessionManager.RemoteUserInfo: ...
        def getUid(self) -> int: ...
        def hashCode(self) -> int: ...
        def toString(self) -> str: ...

    class Builder(java.lang.Object):
        def __init__(self, context: android.content.Context, /) -> None: ...
        def build(self) -> MediaSession2: ...
        def setExtras(self, extras: android.os.Bundle, /) -> MediaSession2.Builder: ...
        def setId(self, id: str | java.lang.String, /) -> MediaSession2.Builder: ...
        def setSessionActivity(self, pi: android.app.PendingIntent, /) -> MediaSession2.Builder: ...
        def setSessionCallback(self, executor: java.util.concurrent.Executor, callback: MediaSession2.SessionCallback, /) -> MediaSession2.Builder: ...

class MediaSession2Service(android.app.Service):
    SERVICE_INTERFACE: typing.ClassVar[str] = ...
    def __init__(self) -> None: ...
    def addSession(self, session: MediaSession2, /) -> None: ...
    def getSessions(self) -> java.util.List[MediaSession2]: ...
    def onBind(self, intent: android.content.Intent, /) -> android.os.IBinder | None: ...
    def onCreate(self) -> None: ...
    def onDestroy(self) -> None: ...
    def onGetSession(self, arg1: MediaSession2.ControllerInfo, /) -> MediaSession2 | None: ...
    def onUpdateNotification(self, arg1: MediaSession2, /) -> MediaSession2Service.MediaNotification | None: ...
    def removeSession(self, session: MediaSession2, /) -> None: ...

    class MediaNotification(java.lang.Object):
        def __init__(self, notificationId: int | java.jint | java.lang.Integer, notification: android.app.Notification, /) -> None: ...
        def getNotification(self) -> android.app.Notification: ...
        def getNotificationId(self) -> int: ...

class MediaSync(java.lang.Object):
    MEDIASYNC_ERROR_AUDIOTRACK_FAIL: typing.ClassVar[int] = ...
    MEDIASYNC_ERROR_SURFACE_FAIL: typing.ClassVar[int] = ...
    def __init__(self) -> None: ...
    def createInputSurface(self) -> android.view.Surface: ...
    def finalize(self) -> None: ...
    def flush(self) -> None: ...
    def getPlaybackParams(self) -> PlaybackParams: ...
    def getSyncParams(self) -> SyncParams: ...
    def getTimestamp(self) -> MediaTimestamp | None: ...
    def queueAudio(self, audioData: java.nio.ByteBuffer, bufferId: int | java.jint | java.lang.Integer, presentationTimeUs: int | java.jlong | java.lang.Long, /) -> None: ...
    def release(self) -> None: ...
    def setAudioTrack(self, audioTrack: AudioTrack, /) -> None: ...
    def setCallback(self, cb: MediaSync.Callback, handler: android.os.Handler, /) -> None: ...
    def setOnErrorListener(self, listener: MediaSync.OnErrorListener, handler: android.os.Handler, /) -> None: ...
    def setPlaybackParams(self, params: PlaybackParams, /) -> None: ...
    def setSurface(self, surface: android.view.Surface, /) -> None: ...
    def setSyncParams(self, params: SyncParams, /) -> None: ...

    class OnErrorListener(java.lang.Object):
        def onError(self, arg1: MediaSync, arg2: int | java.jint | java.lang.Integer, arg3: int | java.jint | java.lang.Integer, /) -> None: ...

    class Callback(java.lang.Object):
        def __init__(self) -> None: ...
        def onAudioBufferConsumed(self, arg1: MediaSync, arg2: java.nio.ByteBuffer, arg3: int | java.jint | java.lang.Integer, /) -> None: ...

class MediaSyncEvent(android.os.Parcelable):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[MediaSyncEvent]] = ...
    SYNC_EVENT_NONE: typing.ClassVar[int] = ...
    SYNC_EVENT_PRESENTATION_COMPLETE: typing.ClassVar[int] = ...
    @staticmethod
    def createEvent(eventType: int | java.jint | java.lang.Integer, /) -> MediaSyncEvent: ...
    def describeContents(self) -> int: ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getAudioSessionId(self) -> int: ...
    def getType(self) -> int: ...
    def hashCode(self) -> int: ...
    def setAudioSessionId(self, audioSessionId: int | java.jint | java.lang.Integer, /) -> MediaSyncEvent: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

class MediaTimestamp(java.lang.Object):
    TIMESTAMP_UNKNOWN: typing.ClassVar[MediaTimestamp] = ...
    def __init__(self, mediaTimeUs: int | java.jlong | java.lang.Long, nanoTimeNs: int | java.jlong | java.lang.Long, clockRate: float | java.jfloat | java.lang.Float, /) -> None: ...
    def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getAnchorMediaTimeUs(self) -> int: ...
    def getAnchorSystemNanoTime(self) -> int: ...
    def getAnchorSytemNanoTime(self) -> int: ...
    def getMediaClockRate(self) -> float: ...
    def toString(self) -> str: ...

class MicrophoneDirection(java.lang.Object):
    MIC_DIRECTION_AWAY_FROM_USER: typing.ClassVar[int] = ...
    MIC_DIRECTION_EXTERNAL: typing.ClassVar[int] = ...
    MIC_DIRECTION_TOWARDS_USER: typing.ClassVar[int] = ...
    MIC_DIRECTION_UNSPECIFIED: typing.ClassVar[int] = ...
    def setPreferredMicrophoneDirection(self, arg1: int | java.jint | java.lang.Integer, /) -> bool: ...
    def setPreferredMicrophoneFieldDimension(self, arg1: float | java.jfloat | java.lang.Float, /) -> bool: ...

class MicrophoneInfo(java.lang.Object):
    CHANNEL_MAPPING_DIRECT: typing.ClassVar[int] = ...
    CHANNEL_MAPPING_PROCESSED: typing.ClassVar[int] = ...
    DIRECTIONALITY_BI_DIRECTIONAL: typing.ClassVar[int] = ...
    DIRECTIONALITY_CARDIOID: typing.ClassVar[int] = ...
    DIRECTIONALITY_HYPER_CARDIOID: typing.ClassVar[int] = ...
    DIRECTIONALITY_OMNI: typing.ClassVar[int] = ...
    DIRECTIONALITY_SUPER_CARDIOID: typing.ClassVar[int] = ...
    DIRECTIONALITY_UNKNOWN: typing.ClassVar[int] = ...
    GROUP_UNKNOWN: typing.ClassVar[int] = ...
    INDEX_IN_THE_GROUP_UNKNOWN: typing.ClassVar[int] = ...
    LOCATION_MAINBODY: typing.ClassVar[int] = ...
    LOCATION_MAINBODY_MOVABLE: typing.ClassVar[int] = ...
    LOCATION_PERIPHERAL: typing.ClassVar[int] = ...
    LOCATION_UNKNOWN: typing.ClassVar[int] = ...
    ORIENTATION_UNKNOWN: typing.ClassVar[MicrophoneInfo.Coordinate3F] = ...
    POSITION_UNKNOWN: typing.ClassVar[MicrophoneInfo.Coordinate3F] = ...
    SENSITIVITY_UNKNOWN: typing.ClassVar[float] = ...
    SPL_UNKNOWN: typing.ClassVar[float] = ...
    def getAddress(self) -> str: ...
    def getChannelMapping(self) -> java.util.List[android.util.Pair[java.lang.Integer, java.lang.Integer]]: ...
    def getDescription(self) -> str: ...
    def getDirectionality(self) -> int: ...
    def getFrequencyResponse(self) -> java.util.List[android.util.Pair[java.lang.Float, java.lang.Float]]: ...
    def getGroup(self) -> int: ...
    def getId(self) -> int: ...
    def getIndexInTheGroup(self) -> int: ...
    def getLocation(self) -> int: ...
    def getMaxSpl(self) -> float: ...
    def getMinSpl(self) -> float: ...
    def getOrientation(self) -> MicrophoneInfo.Coordinate3F: ...
    def getPosition(self) -> MicrophoneInfo.Coordinate3F: ...
    def getSensitivity(self) -> float: ...
    def getType(self) -> int: ...

    class Coordinate3F(java.lang.Object):
        x: float = ...
        y: float = ...
        z: float = ...
        def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...

class NotProvisionedException(MediaDrmException):
    def __init__(self, detailMessage: str | java.lang.String, /) -> None: ...

class PlaybackParams(android.os.Parcelable):
    AUDIO_FALLBACK_MODE_DEFAULT: typing.ClassVar[int] = ...
    AUDIO_FALLBACK_MODE_FAIL: typing.ClassVar[int] = ...
    AUDIO_FALLBACK_MODE_MUTE: typing.ClassVar[int] = ...
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[PlaybackParams]] = ...
    def __init__(self) -> None: ...
    def allowDefaults(self) -> PlaybackParams: ...
    def describeContents(self) -> int: ...
    def getAudioFallbackMode(self) -> int: ...
    def getPitch(self) -> float: ...
    def getSpeed(self) -> float: ...
    def setAudioFallbackMode(self, audioFallbackMode: int | java.jint | java.lang.Integer, /) -> PlaybackParams: ...
    def setPitch(self, pitch: float | java.jfloat | java.lang.Float, /) -> PlaybackParams: ...
    def setSpeed(self, speed: float | java.jfloat | java.lang.Float, /) -> PlaybackParams: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

class Rating(android.os.Parcelable):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[Rating]] = ...
    RATING_3_STARS: typing.ClassVar[int] = ...
    RATING_4_STARS: typing.ClassVar[int] = ...
    RATING_5_STARS: typing.ClassVar[int] = ...
    RATING_HEART: typing.ClassVar[int] = ...
    RATING_NONE: typing.ClassVar[int] = ...
    RATING_PERCENTAGE: typing.ClassVar[int] = ...
    RATING_THUMB_UP_DOWN: typing.ClassVar[int] = ...
    def describeContents(self) -> int: ...
    def getPercentRating(self) -> float: ...
    def getRatingStyle(self) -> int: ...
    def getStarRating(self) -> float: ...
    def hasHeart(self) -> bool: ...
    def isRated(self) -> bool: ...
    def isThumbUp(self) -> bool: ...
    @staticmethod
    def newHeartRating(hasHeart: bool | java.jboolean | java.lang.Boolean, /) -> Rating: ...
    @staticmethod
    def newPercentageRating(percent: float | java.jfloat | java.lang.Float, /) -> Rating | None: ...
    @staticmethod
    def newStarRating(starRatingStyle: int | java.jint | java.lang.Integer, starRating: float | java.jfloat | java.lang.Float, /) -> Rating | None: ...
    @staticmethod
    def newThumbRating(thumbIsUp: bool | java.jboolean | java.lang.Boolean, /) -> Rating: ...
    @staticmethod
    def newUnratedRating(ratingStyle: int | java.jint | java.lang.Integer, /) -> Rating | None: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

class RemoteControlClient(java.lang.Object):
    FLAG_KEY_MEDIA_FAST_FORWARD: typing.ClassVar[int] = ...
    FLAG_KEY_MEDIA_NEXT: typing.ClassVar[int] = ...
    FLAG_KEY_MEDIA_PAUSE: typing.ClassVar[int] = ...
    FLAG_KEY_MEDIA_PLAY: typing.ClassVar[int] = ...
    FLAG_KEY_MEDIA_PLAY_PAUSE: typing.ClassVar[int] = ...
    FLAG_KEY_MEDIA_POSITION_UPDATE: typing.ClassVar[int] = ...
    FLAG_KEY_MEDIA_PREVIOUS: typing.ClassVar[int] = ...
    FLAG_KEY_MEDIA_RATING: typing.ClassVar[int] = ...
    FLAG_KEY_MEDIA_REWIND: typing.ClassVar[int] = ...
    FLAG_KEY_MEDIA_STOP: typing.ClassVar[int] = ...
    PLAYSTATE_BUFFERING: typing.ClassVar[int] = ...
    PLAYSTATE_ERROR: typing.ClassVar[int] = ...
    PLAYSTATE_FAST_FORWARDING: typing.ClassVar[int] = ...
    PLAYSTATE_PAUSED: typing.ClassVar[int] = ...
    PLAYSTATE_PLAYING: typing.ClassVar[int] = ...
    PLAYSTATE_REWINDING: typing.ClassVar[int] = ...
    PLAYSTATE_SKIPPING_BACKWARDS: typing.ClassVar[int] = ...
    PLAYSTATE_SKIPPING_FORWARDS: typing.ClassVar[int] = ...
    PLAYSTATE_STOPPED: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self, mediaButtonIntent: android.app.PendingIntent, /) -> None: ...
    @typing.overload
    def __init__(self, mediaButtonIntent: android.app.PendingIntent, looper: android.os.Looper, /) -> None: ...
    def editMetadata(self, startEmpty: bool | java.jboolean | java.lang.Boolean, /) -> RemoteControlClient.MetadataEditor: ...
    def getMediaSession(self) -> android.media.session.MediaSession | None: ...
    def setMetadataUpdateListener(self, l: RemoteControlClient.OnMetadataUpdateListener, /) -> None: ...
    def setOnGetPlaybackPositionListener(self, l: RemoteControlClient.OnGetPlaybackPositionListener, /) -> None: ...
    def setPlaybackPositionUpdateListener(self, l: RemoteControlClient.OnPlaybackPositionUpdateListener, /) -> None: ...
    @typing.overload
    def setPlaybackState(self, state: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def setPlaybackState(self, state: int | java.jint | java.lang.Integer, timeInMs: int | java.jlong | java.lang.Long, playbackSpeed: float | java.jfloat | java.lang.Float, /) -> None: ...
    def setTransportControlFlags(self, transportControlFlags: int | java.jint | java.lang.Integer, /) -> None: ...

    class OnPlaybackPositionUpdateListener(java.lang.Object):
        def onPlaybackPositionUpdate(self, arg1: int | java.jlong | java.lang.Long, /) -> None: ...

    class OnMetadataUpdateListener(java.lang.Object):
        def onMetadataUpdate(self, arg1: int | java.jint | java.lang.Integer, arg2: java.lang.Object | int | bool | float | str, /) -> None: ...

    class OnGetPlaybackPositionListener(java.lang.Object):
        def onGetPlaybackPosition(self) -> int: ...

    class MetadataEditor(MediaMetadataEditor):
        BITMAP_KEY_ARTWORK: typing.ClassVar[int] = ...
        def apply(self) -> None: ...
        def clear(self) -> None: ...
        def clone(self) -> java.lang.Object: ...
        def putBitmap(self, key: int | java.jint | java.lang.Integer, bitmap: android.graphics.Bitmap, /) -> RemoteControlClient.MetadataEditor: ...
        def putLong(self, key: int | java.jint | java.lang.Integer, value: int | java.jlong | java.lang.Long, /) -> RemoteControlClient.MetadataEditor: ...
        def putObject(self, key: int | java.jint | java.lang.Integer, object: java.lang.Object | int | bool | float | str, /) -> RemoteControlClient.MetadataEditor: ...
        def putString(self, key: int | java.jint | java.lang.Integer, value: str | java.lang.String, /) -> RemoteControlClient.MetadataEditor: ...

class RemoteController(java.lang.Object):
    POSITION_SYNCHRONIZATION_CHECK: typing.ClassVar[int] = ...
    POSITION_SYNCHRONIZATION_NONE: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self, context: android.content.Context, updateListener: RemoteController.OnClientUpdateListener, /) -> None: ...
    @typing.overload
    def __init__(self, context: android.content.Context, updateListener: RemoteController.OnClientUpdateListener, looper: android.os.Looper, /) -> None: ...
    def clearArtworkConfiguration(self) -> bool: ...
    def editMetadata(self) -> RemoteController.MetadataEditor: ...
    def getEstimatedMediaPosition(self) -> int: ...
    def seekTo(self, timeMs: int | java.jlong | java.lang.Long, /) -> bool: ...
    def sendMediaKeyEvent(self, keyEvent: android.view.KeyEvent, /) -> bool: ...
    def setArtworkConfiguration(self, width: int | java.jint | java.lang.Integer, height: int | java.jint | java.lang.Integer, /) -> bool: ...
    def setSynchronizationMode(self, sync: int | java.jint | java.lang.Integer, /) -> bool: ...

    class OnClientUpdateListener(java.lang.Object):
        def onClientChange(self, arg1: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
        def onClientMetadataUpdate(self, arg1: RemoteController.MetadataEditor, /) -> None: ...
        @typing.overload
        def onClientPlaybackStateUpdate(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
        @typing.overload
        def onClientPlaybackStateUpdate(self, arg1: int | java.jint | java.lang.Integer, arg2: int | java.jlong | java.lang.Long, arg3: int | java.jlong | java.lang.Long, arg4: float | java.jfloat | java.lang.Float, /) -> None: ...
        def onClientTransportControlUpdate(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...

    class MetadataEditor(MediaMetadataEditor):
        def apply(self) -> None: ...

class ResourceBusyException(MediaDrmException):
    def __init__(self, detailMessage: str | java.lang.String, /) -> None: ...

class Ringtone(java.lang.Object):
    def finalize(self) -> None: ...
    def getAudioAttributes(self) -> AudioAttributes: ...
    def getStreamType(self) -> int: ...
    def getTitle(self, context: android.content.Context, /) -> str: ...
    def getVolume(self) -> float: ...
    def isHapticGeneratorEnabled(self) -> bool: ...
    def isLooping(self) -> bool: ...
    def isPlaying(self) -> bool: ...
    def play(self) -> None: ...
    def setAudioAttributes(self, attributes: AudioAttributes, /) -> None: ...
    def setHapticGeneratorEnabled(self, enabled: bool | java.jboolean | java.lang.Boolean, /) -> bool: ...
    def setLooping(self, looping: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setStreamType(self, streamType: int | java.jint | java.lang.Integer, /) -> None: ...
    def setVolume(self, volume: float | java.jfloat | java.lang.Float, /) -> None: ...
    def stop(self) -> None: ...

class RingtoneManager(java.lang.Object):
    ACTION_RINGTONE_PICKER: typing.ClassVar[str] = ...
    EXTRA_RINGTONE_DEFAULT_URI: typing.ClassVar[str] = ...
    EXTRA_RINGTONE_EXISTING_URI: typing.ClassVar[str] = ...
    EXTRA_RINGTONE_INCLUDE_DRM: typing.ClassVar[str] = ...
    EXTRA_RINGTONE_PICKED_URI: typing.ClassVar[str] = ...
    EXTRA_RINGTONE_SHOW_DEFAULT: typing.ClassVar[str] = ...
    EXTRA_RINGTONE_SHOW_SILENT: typing.ClassVar[str] = ...
    EXTRA_RINGTONE_TITLE: typing.ClassVar[str] = ...
    EXTRA_RINGTONE_TYPE: typing.ClassVar[str] = ...
    ID_COLUMN_INDEX: typing.ClassVar[int] = ...
    TITLE_COLUMN_INDEX: typing.ClassVar[int] = ...
    TYPE_ALARM: typing.ClassVar[int] = ...
    TYPE_ALL: typing.ClassVar[int] = ...
    TYPE_NOTIFICATION: typing.ClassVar[int] = ...
    TYPE_RINGTONE: typing.ClassVar[int] = ...
    URI_COLUMN_INDEX: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self, activity: android.app.Activity, /) -> None: ...
    @typing.overload
    def __init__(self, context: android.content.Context, /) -> None: ...
    @staticmethod
    def getActualDefaultRingtoneUri(context: android.content.Context, type: int | java.jint | java.lang.Integer, /) -> android.net.Uri: ...
    def getCursor(self) -> android.database.Cursor: ...
    @staticmethod
    def getDefaultType(defaultRingtoneUri: android.net.Uri, /) -> int: ...
    @staticmethod
    def getDefaultUri(type: int | java.jint | java.lang.Integer, /) -> android.net.Uri: ...
    def getIncludeDrm(self) -> bool: ...
    @typing.overload
    def getRingtone(self, position: int | java.jint | java.lang.Integer, /) -> Ringtone: ...
    @typing.overload
    @staticmethod
    def getRingtone(context: android.content.Context, ringtoneUri: android.net.Uri, /) -> Ringtone: ...
    def getRingtonePosition(self, ringtoneUri: android.net.Uri, /) -> int: ...
    def getRingtoneUri(self, position: int | java.jint | java.lang.Integer, /) -> android.net.Uri: ...
    def getStopPreviousRingtone(self) -> bool: ...
    @staticmethod
    def getValidRingtoneUri(context: android.content.Context, /) -> android.net.Uri | None: ...
    @typing.overload
    def hasHapticChannels(self, position: int | java.jint | java.lang.Integer, /) -> bool: ...
    @typing.overload
    @staticmethod
    def hasHapticChannels(ringtoneUri: android.net.Uri, /) -> bool: ...
    @typing.overload
    @staticmethod
    def hasHapticChannels(context: android.content.Context, ringtoneUri: android.net.Uri, /) -> bool: ...
    def inferStreamType(self) -> int: ...
    @staticmethod
    def isDefault(ringtoneUri: android.net.Uri, /) -> bool: ...
    @staticmethod
    def openDefaultRingtoneUri(context: android.content.Context, uri: android.net.Uri, /) -> android.content.res.AssetFileDescriptor | None: ...
    @staticmethod
    def setActualDefaultRingtoneUri(context: android.content.Context, type: int | java.jint | java.lang.Integer, ringtoneUri: android.net.Uri, /) -> None: ...
    def setIncludeDrm(self, includeDrm: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setStopPreviousRingtone(self, stopPreviousRingtone: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    def setType(self, type: int | java.jint | java.lang.Integer, /) -> None: ...
    def stopPreviousRingtone(self) -> None: ...

class RouteDiscoveryPreference(android.os.Parcelable):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[RouteDiscoveryPreference]] = ...
    def describeContents(self) -> int: ...
    def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getPreferredFeatures(self) -> java.util.List[java.lang.String]: ...
    def hashCode(self) -> int: ...
    def shouldPerformActiveScan(self) -> bool: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class Builder(java.lang.Object):
        @typing.overload
        def __init__(self, preference: RouteDiscoveryPreference, /) -> None: ...
        @typing.overload
        def __init__(self, preferredFeatures: java.util.List[java.lang.String], activeScan: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
        def build(self) -> RouteDiscoveryPreference: ...
        def setPreferredFeatures(self, preferredFeatures: java.util.List[java.lang.String], /) -> RouteDiscoveryPreference.Builder: ...
        def setShouldPerformActiveScan(self, activeScan: bool | java.jboolean | java.lang.Boolean, /) -> RouteDiscoveryPreference.Builder: ...

class RouteListingPreference(android.os.Parcelable):
    ACTION_TRANSFER_MEDIA: typing.ClassVar[str] = ...
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[RouteListingPreference]] = ...
    EXTRA_ROUTE_ID: typing.ClassVar[str] = ...
    def describeContents(self) -> int: ...
    def equals(self, other: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getItems(self) -> java.util.List[RouteListingPreference.Item]: ...
    def getLinkedItemComponentName(self) -> android.content.ComponentName | None: ...
    def getUseSystemOrdering(self) -> bool: ...
    def hashCode(self) -> int: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class Item(android.os.Parcelable):
        CREATOR: typing.ClassVar[android.os.Parcelable.Creator[RouteListingPreference.Item]] = ...
        FLAG_ONGOING_SESSION: typing.ClassVar[int] = ...
        FLAG_ONGOING_SESSION_MANAGED: typing.ClassVar[int] = ...
        FLAG_SUGGESTED: typing.ClassVar[int] = ...
        SELECTION_BEHAVIOR_GO_TO_APP: typing.ClassVar[int] = ...
        SELECTION_BEHAVIOR_NONE: typing.ClassVar[int] = ...
        SELECTION_BEHAVIOR_TRANSFER: typing.ClassVar[int] = ...
        SUBTEXT_AD_ROUTING_DISALLOWED: typing.ClassVar[int] = ...
        SUBTEXT_CUSTOM: typing.ClassVar[int] = ...
        SUBTEXT_DEVICE_LOW_POWER: typing.ClassVar[int] = ...
        SUBTEXT_DOWNLOADED_CONTENT_ROUTING_DISALLOWED: typing.ClassVar[int] = ...
        SUBTEXT_ERROR_UNKNOWN: typing.ClassVar[int] = ...
        SUBTEXT_NONE: typing.ClassVar[int] = ...
        SUBTEXT_SUBSCRIPTION_REQUIRED: typing.ClassVar[int] = ...
        SUBTEXT_TRACK_UNSUPPORTED: typing.ClassVar[int] = ...
        SUBTEXT_UNAUTHORIZED: typing.ClassVar[int] = ...
        def describeContents(self) -> int: ...
        def equals(self, other: java.lang.Object | int | bool | float | str, /) -> bool: ...
        def getCustomSubtextMessage(self) -> java.lang.CharSequence: ...
        def getFlags(self) -> int: ...
        def getRouteId(self) -> str: ...
        def getSelectionBehavior(self) -> int: ...
        def getSubText(self) -> int: ...
        def hashCode(self) -> int: ...
        def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

        class Builder(java.lang.Object):
            def __init__(self, routeId: str | java.lang.String, /) -> None: ...
            def build(self) -> RouteListingPreference.Item: ...
            def setCustomSubtextMessage(self, customSubtextMessage: java.lang.CharSequence, /) -> RouteListingPreference.Item.Builder: ...
            def setFlags(self, flags: int | java.jint | java.lang.Integer, /) -> RouteListingPreference.Item.Builder: ...
            def setSelectionBehavior(self, selectionBehavior: int | java.jint | java.lang.Integer, /) -> RouteListingPreference.Item.Builder: ...
            def setSubText(self, subText: int | java.jint | java.lang.Integer, /) -> RouteListingPreference.Item.Builder: ...

    class Builder(java.lang.Object):
        def __init__(self) -> None: ...
        def build(self) -> RouteListingPreference: ...
        def setItems(self, items: java.util.List[RouteListingPreference.Item], /) -> RouteListingPreference.Builder: ...
        def setLinkedItemComponentName(self, linkedItemComponentName: android.content.ComponentName, /) -> RouteListingPreference.Builder: ...
        def setUseSystemOrdering(self, useSystemOrdering: bool | java.jboolean | java.lang.Boolean, /) -> RouteListingPreference.Builder: ...

class RoutingSessionInfo(android.os.Parcelable):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[RoutingSessionInfo]] = ...
    TRANSFER_REASON_APP: typing.ClassVar[int] = ...
    TRANSFER_REASON_FALLBACK: typing.ClassVar[int] = ...
    TRANSFER_REASON_SYSTEM_REQUEST: typing.ClassVar[int] = ...
    def describeContents(self) -> int: ...
    def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getClientPackageName(self) -> str: ...
    def getControlHints(self) -> android.os.Bundle | None: ...
    def getDeselectableRoutes(self) -> java.util.List[java.lang.String]: ...
    def getId(self) -> str: ...
    def getName(self) -> java.lang.CharSequence | None: ...
    def getSelectableRoutes(self) -> java.util.List[java.lang.String]: ...
    def getSelectedRoutes(self) -> java.util.List[java.lang.String]: ...
    def getTransferReason(self) -> int: ...
    def getTransferableRoutes(self) -> java.util.List[java.lang.String]: ...
    def getVolume(self) -> int: ...
    def getVolumeHandling(self) -> int: ...
    def getVolumeMax(self) -> int: ...
    def hashCode(self) -> int: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class Builder(java.lang.Object):
        @typing.overload
        def __init__(self, sessionInfo: RoutingSessionInfo, /) -> None: ...
        @typing.overload
        def __init__(self, originalId: str | java.lang.String, clientPackageName: str | java.lang.String, /) -> None: ...
        def addDeselectableRoute(self, routeId: str | java.lang.String, /) -> RoutingSessionInfo.Builder: ...
        def addSelectableRoute(self, routeId: str | java.lang.String, /) -> RoutingSessionInfo.Builder: ...
        def addSelectedRoute(self, routeId: str | java.lang.String, /) -> RoutingSessionInfo.Builder: ...
        def addTransferableRoute(self, routeId: str | java.lang.String, /) -> RoutingSessionInfo.Builder: ...
        def build(self) -> RoutingSessionInfo: ...
        def clearDeselectableRoutes(self) -> RoutingSessionInfo.Builder: ...
        def clearSelectableRoutes(self) -> RoutingSessionInfo.Builder: ...
        def clearSelectedRoutes(self) -> RoutingSessionInfo.Builder: ...
        def clearTransferableRoutes(self) -> RoutingSessionInfo.Builder: ...
        def removeDeselectableRoute(self, routeId: str | java.lang.String, /) -> RoutingSessionInfo.Builder: ...
        def removeSelectableRoute(self, routeId: str | java.lang.String, /) -> RoutingSessionInfo.Builder: ...
        def removeSelectedRoute(self, routeId: str | java.lang.String, /) -> RoutingSessionInfo.Builder: ...
        def removeTransferableRoute(self, routeId: str | java.lang.String, /) -> RoutingSessionInfo.Builder: ...
        def setControlHints(self, controlHints: android.os.Bundle, /) -> RoutingSessionInfo.Builder: ...
        def setName(self, name: java.lang.CharSequence, /) -> RoutingSessionInfo.Builder: ...
        def setTransferInitiator(self, transferInitiatorUserHandle: android.os.UserHandle, transferInitiatorPackageName: str | java.lang.String, /) -> RoutingSessionInfo.Builder: ...
        def setTransferReason(self, transferReason: int | java.jint | java.lang.Integer, /) -> RoutingSessionInfo.Builder: ...
        def setVolume(self, volume: int | java.jint | java.lang.Integer, /) -> RoutingSessionInfo.Builder: ...
        def setVolumeHandling(self, volumeHandling: int | java.jint | java.lang.Integer, /) -> RoutingSessionInfo.Builder: ...
        def setVolumeMax(self, volumeMax: int | java.jint | java.lang.Integer, /) -> RoutingSessionInfo.Builder: ...

class Session2Command(android.os.Parcelable):
    COMMAND_CODE_CUSTOM: typing.ClassVar[int] = ...
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[Session2Command]] = ...
    @typing.overload
    def __init__(self, commandCode: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, action: str | java.lang.String, extras: android.os.Bundle, /) -> None: ...
    def describeContents(self) -> int: ...
    def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getCommandCode(self) -> int: ...
    def getCustomAction(self) -> str | None: ...
    def getCustomExtras(self) -> android.os.Bundle | None: ...
    def hashCode(self) -> int: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class Result(java.lang.Object):
        RESULT_ERROR_UNKNOWN_ERROR: typing.ClassVar[int] = ...
        RESULT_INFO_SKIPPED: typing.ClassVar[int] = ...
        RESULT_SUCCESS: typing.ClassVar[int] = ...
        def __init__(self, resultCode: int | java.jint | java.lang.Integer, resultData: android.os.Bundle, /) -> None: ...
        def getResultCode(self) -> int: ...
        def getResultData(self) -> android.os.Bundle: ...

class Session2CommandGroup(android.os.Parcelable):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[Session2CommandGroup]] = ...
    def describeContents(self) -> int: ...
    def getCommands(self) -> java.util.Set[Session2Command]: ...
    @typing.overload
    def hasCommand(self, commandCode: int | java.jint | java.lang.Integer, /) -> bool: ...
    @typing.overload
    def hasCommand(self, command: Session2Command, /) -> bool: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class Builder(java.lang.Object):
        @typing.overload
        def __init__(self) -> None: ...
        @typing.overload
        def __init__(self, commandGroup: Session2CommandGroup, /) -> None: ...
        def addCommand(self, command: Session2Command, /) -> Session2CommandGroup.Builder: ...
        def build(self) -> Session2CommandGroup: ...
        def removeCommand(self, command: Session2Command, /) -> Session2CommandGroup.Builder: ...

class Session2Token(android.os.Parcelable):
    CREATOR: typing.ClassVar[android.os.Parcelable.Creator[Session2Token]] = ...
    TYPE_SESSION: typing.ClassVar[int] = ...
    TYPE_SESSION_SERVICE: typing.ClassVar[int] = ...
    def __init__(self, context: android.content.Context, serviceComponent: android.content.ComponentName, /) -> None: ...
    def describeContents(self) -> int: ...
    def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getExtras(self) -> android.os.Bundle: ...
    def getPackageName(self) -> str: ...
    def getServiceName(self) -> str | None: ...
    def getType(self) -> int: ...
    def getUid(self) -> int: ...
    def hashCode(self) -> int: ...
    def toString(self) -> str: ...
    def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

class SoundPool(java.lang.Object):
    def __init__(self, maxStreams: int | java.jint | java.lang.Integer, streamType: int | java.jint | java.lang.Integer, srcQuality: int | java.jint | java.lang.Integer, /) -> None: ...
    def autoPause(self) -> None: ...
    def autoResume(self) -> None: ...
    def finalize(self) -> None: ...
    @typing.overload
    def load(self, afd: android.content.res.AssetFileDescriptor, priority: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    def load(self, path: str | java.lang.String, priority: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    def load(self, context: android.content.Context, resId: int | java.jint | java.lang.Integer, priority: int | java.jint | java.lang.Integer, /) -> int: ...
    @typing.overload
    def load(self, fd: java.io.FileDescriptor, offset: int | java.jlong | java.lang.Long, length: int | java.jlong | java.lang.Long, priority: int | java.jint | java.lang.Integer, /) -> int: ...
    def pause(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
    def play(self, soundID: int | java.jint | java.lang.Integer, leftVolume: float | java.jfloat | java.lang.Float, rightVolume: float | java.jfloat | java.lang.Float, priority: int | java.jint | java.lang.Integer, loop: int | java.jint | java.lang.Integer, rate: float | java.jfloat | java.lang.Float, /) -> int: ...
    def release(self) -> None: ...
    def resume(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
    def setLoop(self, arg1: int | java.jint | java.lang.Integer, arg2: int | java.jint | java.lang.Integer, /) -> None: ...
    def setOnLoadCompleteListener(self, listener: SoundPool.OnLoadCompleteListener, /) -> None: ...
    def setPriority(self, arg1: int | java.jint | java.lang.Integer, arg2: int | java.jint | java.lang.Integer, /) -> None: ...
    def setRate(self, arg1: int | java.jint | java.lang.Integer, arg2: float | java.jfloat | java.lang.Float, /) -> None: ...
    def setVolume(self, streamID: int | java.jint | java.lang.Integer, leftVolume: float | java.jfloat | java.lang.Float, rightVolume: float | java.jfloat | java.lang.Float, /) -> None: ...
    def stop(self, arg1: int | java.jint | java.lang.Integer, /) -> None: ...
    def unload(self, arg1: int | java.jint | java.lang.Integer, /) -> bool: ...

    class OnLoadCompleteListener(java.lang.Object):
        def onLoadComplete(self, arg1: SoundPool, arg2: int | java.jint | java.lang.Integer, arg3: int | java.jint | java.lang.Integer, /) -> None: ...

    class Builder(java.lang.Object):
        def __init__(self) -> None: ...
        def build(self) -> SoundPool: ...
        def setAudioAttributes(self, attributes: AudioAttributes, /) -> SoundPool.Builder: ...
        def setAudioSessionId(self, sessionId: int | java.jint | java.lang.Integer, /) -> SoundPool.Builder: ...
        def setContext(self, context: android.content.Context, /) -> SoundPool.Builder: ...
        def setMaxStreams(self, maxStreams: int | java.jint | java.lang.Integer, /) -> SoundPool.Builder: ...

class Spatializer(java.lang.Object):
    SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL: typing.ClassVar[int] = ...
    SPATIALIZER_IMMERSIVE_LEVEL_NONE: typing.ClassVar[int] = ...
    SPATIALIZER_IMMERSIVE_LEVEL_OTHER: typing.ClassVar[int] = ...
    def addOnHeadTrackerAvailableListener(self, executor: java.util.concurrent.Executor, listener: Spatializer.OnHeadTrackerAvailableListener, /) -> None: ...
    def addOnSpatializerStateChangedListener(self, executor: java.util.concurrent.Executor, listener: Spatializer.OnSpatializerStateChangedListener, /) -> None: ...
    def canBeSpatialized(self, attributes: AudioAttributes, format: AudioFormat, /) -> bool: ...
    def getImmersiveAudioLevel(self) -> int: ...
    def getSpatializedChannelMasks(self) -> java.util.List[java.lang.Integer]: ...
    def isAvailable(self) -> bool: ...
    def isEnabled(self) -> bool: ...
    def isHeadTrackerAvailable(self) -> bool: ...
    def removeOnHeadTrackerAvailableListener(self, listener: Spatializer.OnHeadTrackerAvailableListener, /) -> None: ...
    def removeOnSpatializerStateChangedListener(self, listener: Spatializer.OnSpatializerStateChangedListener, /) -> None: ...

    class OnSpatializerStateChangedListener(java.lang.Object):
        def onSpatializerAvailableChanged(self, arg1: Spatializer, arg2: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
        def onSpatializerEnabledChanged(self, arg1: Spatializer, arg2: bool | java.jboolean | java.lang.Boolean, /) -> None: ...

    class OnHeadTrackerAvailableListener(java.lang.Object):
        def onHeadTrackerAvailableChanged(self, arg1: Spatializer, arg2: bool | java.jboolean | java.lang.Boolean, /) -> None: ...

class SubtitleData(java.lang.Object):
    def __init__(self, trackIndex: int | java.jint | java.lang.Integer, startTimeUs: int | java.jlong | java.lang.Long, durationUs: int | java.jlong | java.lang.Long, data: java.chaquopy.JavaArrayJByte, /) -> None: ...
    def getData(self) -> java.chaquopy.JavaArrayJByte: ...
    def getDurationUs(self) -> int: ...
    def getStartTimeUs(self) -> int: ...
    def getTrackIndex(self) -> int: ...

class SyncParams(java.lang.Object):
    AUDIO_ADJUST_MODE_DEFAULT: typing.ClassVar[int] = ...
    AUDIO_ADJUST_MODE_RESAMPLE: typing.ClassVar[int] = ...
    AUDIO_ADJUST_MODE_STRETCH: typing.ClassVar[int] = ...
    SYNC_SOURCE_AUDIO: typing.ClassVar[int] = ...
    SYNC_SOURCE_DEFAULT: typing.ClassVar[int] = ...
    SYNC_SOURCE_SYSTEM_CLOCK: typing.ClassVar[int] = ...
    SYNC_SOURCE_VSYNC: typing.ClassVar[int] = ...
    def __init__(self) -> None: ...
    def allowDefaults(self) -> SyncParams: ...
    def getAudioAdjustMode(self) -> int: ...
    def getFrameRate(self) -> float: ...
    def getSyncSource(self) -> int: ...
    def getTolerance(self) -> float: ...
    def setAudioAdjustMode(self, audioAdjustMode: int | java.jint | java.lang.Integer, /) -> SyncParams: ...
    def setFrameRate(self, frameRate: float | java.jfloat | java.lang.Float, /) -> SyncParams: ...
    def setSyncSource(self, syncSource: int | java.jint | java.lang.Integer, /) -> SyncParams: ...
    def setTolerance(self, tolerance: float | java.jfloat | java.lang.Float, /) -> SyncParams: ...

class ThumbnailUtils(java.lang.Object):
    OPTIONS_RECYCLE_INPUT: typing.ClassVar[int] = ...
    def __init__(self) -> None: ...
    @typing.overload
    @staticmethod
    def createAudioThumbnail(filePath: str | java.lang.String, kind: int | java.jint | java.lang.Integer, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    @staticmethod
    def createAudioThumbnail(file: java.io.File, size: android.util.Size, signal: android.os.CancellationSignal, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    @staticmethod
    def createImageThumbnail(filePath: str | java.lang.String, kind: int | java.jint | java.lang.Integer, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    @staticmethod
    def createImageThumbnail(file: java.io.File, size: android.util.Size, signal: android.os.CancellationSignal, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    @staticmethod
    def createVideoThumbnail(filePath: str | java.lang.String, kind: int | java.jint | java.lang.Integer, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    @staticmethod
    def createVideoThumbnail(file: java.io.File, size: android.util.Size, signal: android.os.CancellationSignal, /) -> android.graphics.Bitmap | None: ...
    @typing.overload
    @staticmethod
    def extractThumbnail(source: android.graphics.Bitmap, width: int | java.jint | java.lang.Integer, height: int | java.jint | java.lang.Integer, /) -> android.graphics.Bitmap: ...
    @typing.overload
    @staticmethod
    def extractThumbnail(source: android.graphics.Bitmap, width: int | java.jint | java.lang.Integer, height: int | java.jint | java.lang.Integer, options: int | java.jint | java.lang.Integer, /) -> android.graphics.Bitmap: ...

class TimedMetaData(java.lang.Object):
    def __init__(self, timestampUs: int | java.jlong | java.lang.Long, metaData: java.chaquopy.JavaArrayJByte, /) -> None: ...
    def getMetaData(self) -> java.chaquopy.JavaArrayJByte: ...
    def getTimestamp(self) -> int: ...

class TimedText(java.lang.Object):
    def getBounds(self) -> android.graphics.Rect: ...
    def getText(self) -> str: ...

class ToneGenerator(java.lang.Object):
    MAX_VOLUME: typing.ClassVar[int] = ...
    MIN_VOLUME: typing.ClassVar[int] = ...
    TONE_CDMA_ABBR_ALERT: typing.ClassVar[int] = ...
    TONE_CDMA_ABBR_INTERCEPT: typing.ClassVar[int] = ...
    TONE_CDMA_ABBR_REORDER: typing.ClassVar[int] = ...
    TONE_CDMA_ALERT_AUTOREDIAL_LITE: typing.ClassVar[int] = ...
    TONE_CDMA_ALERT_CALL_GUARD: typing.ClassVar[int] = ...
    TONE_CDMA_ALERT_INCALL_LITE: typing.ClassVar[int] = ...
    TONE_CDMA_ALERT_NETWORK_LITE: typing.ClassVar[int] = ...
    TONE_CDMA_ANSWER: typing.ClassVar[int] = ...
    TONE_CDMA_CALLDROP_LITE: typing.ClassVar[int] = ...
    TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP: typing.ClassVar[int] = ...
    TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL: typing.ClassVar[int] = ...
    TONE_CDMA_CALL_SIGNAL_ISDN_PAT3: typing.ClassVar[int] = ...
    TONE_CDMA_CALL_SIGNAL_ISDN_PAT5: typing.ClassVar[int] = ...
    TONE_CDMA_CALL_SIGNAL_ISDN_PAT6: typing.ClassVar[int] = ...
    TONE_CDMA_CALL_SIGNAL_ISDN_PAT7: typing.ClassVar[int] = ...
    TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING: typing.ClassVar[int] = ...
    TONE_CDMA_CALL_SIGNAL_ISDN_SP_PRI: typing.ClassVar[int] = ...
    TONE_CDMA_CONFIRM: typing.ClassVar[int] = ...
    TONE_CDMA_DIAL_TONE_LITE: typing.ClassVar[int] = ...
    TONE_CDMA_EMERGENCY_RINGBACK: typing.ClassVar[int] = ...
    TONE_CDMA_HIGH_L: typing.ClassVar[int] = ...
    TONE_CDMA_HIGH_PBX_L: typing.ClassVar[int] = ...
    TONE_CDMA_HIGH_PBX_SLS: typing.ClassVar[int] = ...
    TONE_CDMA_HIGH_PBX_SS: typing.ClassVar[int] = ...
    TONE_CDMA_HIGH_PBX_SSL: typing.ClassVar[int] = ...
    TONE_CDMA_HIGH_PBX_S_X4: typing.ClassVar[int] = ...
    TONE_CDMA_HIGH_SLS: typing.ClassVar[int] = ...
    TONE_CDMA_HIGH_SS: typing.ClassVar[int] = ...
    TONE_CDMA_HIGH_SSL: typing.ClassVar[int] = ...
    TONE_CDMA_HIGH_SS_2: typing.ClassVar[int] = ...
    TONE_CDMA_HIGH_S_X4: typing.ClassVar[int] = ...
    TONE_CDMA_INTERCEPT: typing.ClassVar[int] = ...
    TONE_CDMA_KEYPAD_VOLUME_KEY_LITE: typing.ClassVar[int] = ...
    TONE_CDMA_LOW_L: typing.ClassVar[int] = ...
    TONE_CDMA_LOW_PBX_L: typing.ClassVar[int] = ...
    TONE_CDMA_LOW_PBX_SLS: typing.ClassVar[int] = ...
    TONE_CDMA_LOW_PBX_SS: typing.ClassVar[int] = ...
    TONE_CDMA_LOW_PBX_SSL: typing.ClassVar[int] = ...
    TONE_CDMA_LOW_PBX_S_X4: typing.ClassVar[int] = ...
    TONE_CDMA_LOW_SLS: typing.ClassVar[int] = ...
    TONE_CDMA_LOW_SS: typing.ClassVar[int] = ...
    TONE_CDMA_LOW_SSL: typing.ClassVar[int] = ...
    TONE_CDMA_LOW_SS_2: typing.ClassVar[int] = ...
    TONE_CDMA_LOW_S_X4: typing.ClassVar[int] = ...
    TONE_CDMA_MED_L: typing.ClassVar[int] = ...
    TONE_CDMA_MED_PBX_L: typing.ClassVar[int] = ...
    TONE_CDMA_MED_PBX_SLS: typing.ClassVar[int] = ...
    TONE_CDMA_MED_PBX_SS: typing.ClassVar[int] = ...
    TONE_CDMA_MED_PBX_SSL: typing.ClassVar[int] = ...
    TONE_CDMA_MED_PBX_S_X4: typing.ClassVar[int] = ...
    TONE_CDMA_MED_SLS: typing.ClassVar[int] = ...
    TONE_CDMA_MED_SS: typing.ClassVar[int] = ...
    TONE_CDMA_MED_SSL: typing.ClassVar[int] = ...
    TONE_CDMA_MED_SS_2: typing.ClassVar[int] = ...
    TONE_CDMA_MED_S_X4: typing.ClassVar[int] = ...
    TONE_CDMA_NETWORK_BUSY: typing.ClassVar[int] = ...
    TONE_CDMA_NETWORK_BUSY_ONE_SHOT: typing.ClassVar[int] = ...
    TONE_CDMA_NETWORK_CALLWAITING: typing.ClassVar[int] = ...
    TONE_CDMA_NETWORK_USA_RINGBACK: typing.ClassVar[int] = ...
    TONE_CDMA_ONE_MIN_BEEP: typing.ClassVar[int] = ...
    TONE_CDMA_PIP: typing.ClassVar[int] = ...
    TONE_CDMA_PRESSHOLDKEY_LITE: typing.ClassVar[int] = ...
    TONE_CDMA_REORDER: typing.ClassVar[int] = ...
    TONE_CDMA_SIGNAL_OFF: typing.ClassVar[int] = ...
    TONE_CDMA_SOFT_ERROR_LITE: typing.ClassVar[int] = ...
    TONE_DTMF_0: typing.ClassVar[int] = ...
    TONE_DTMF_1: typing.ClassVar[int] = ...
    TONE_DTMF_2: typing.ClassVar[int] = ...
    TONE_DTMF_3: typing.ClassVar[int] = ...
    TONE_DTMF_4: typing.ClassVar[int] = ...
    TONE_DTMF_5: typing.ClassVar[int] = ...
    TONE_DTMF_6: typing.ClassVar[int] = ...
    TONE_DTMF_7: typing.ClassVar[int] = ...
    TONE_DTMF_8: typing.ClassVar[int] = ...
    TONE_DTMF_9: typing.ClassVar[int] = ...
    TONE_DTMF_A: typing.ClassVar[int] = ...
    TONE_DTMF_B: typing.ClassVar[int] = ...
    TONE_DTMF_C: typing.ClassVar[int] = ...
    TONE_DTMF_D: typing.ClassVar[int] = ...
    TONE_DTMF_P: typing.ClassVar[int] = ...
    TONE_DTMF_S: typing.ClassVar[int] = ...
    TONE_PROP_ACK: typing.ClassVar[int] = ...
    TONE_PROP_BEEP2: typing.ClassVar[int] = ...
    TONE_PROP_BEEP: typing.ClassVar[int] = ...
    TONE_PROP_NACK: typing.ClassVar[int] = ...
    TONE_PROP_PROMPT: typing.ClassVar[int] = ...
    TONE_SUP_BUSY: typing.ClassVar[int] = ...
    TONE_SUP_CALL_WAITING: typing.ClassVar[int] = ...
    TONE_SUP_CONFIRM: typing.ClassVar[int] = ...
    TONE_SUP_CONGESTION: typing.ClassVar[int] = ...
    TONE_SUP_CONGESTION_ABBREV: typing.ClassVar[int] = ...
    TONE_SUP_DIAL: typing.ClassVar[int] = ...
    TONE_SUP_ERROR: typing.ClassVar[int] = ...
    TONE_SUP_INTERCEPT: typing.ClassVar[int] = ...
    TONE_SUP_INTERCEPT_ABBREV: typing.ClassVar[int] = ...
    TONE_SUP_PIP: typing.ClassVar[int] = ...
    TONE_SUP_RADIO_ACK: typing.ClassVar[int] = ...
    TONE_SUP_RADIO_NOTAVAIL: typing.ClassVar[int] = ...
    TONE_SUP_RINGTONE: typing.ClassVar[int] = ...
    def __init__(self, streamType: int | java.jint | java.lang.Integer, volume: int | java.jint | java.lang.Integer, /) -> None: ...
    def finalize(self) -> None: ...
    def getAudioSessionId(self) -> int: ...
    def release(self) -> None: ...
    @typing.overload
    def startTone(self, toneType: int | java.jint | java.lang.Integer, /) -> bool: ...
    @typing.overload
    def startTone(self, arg1: int | java.jint | java.lang.Integer, arg2: int | java.jint | java.lang.Integer, /) -> bool: ...
    def stopTone(self) -> None: ...

class UnsupportedSchemeException(MediaDrmException):
    def __init__(self, detailMessage: str | java.lang.String, /) -> None: ...

class VolumeAutomation(java.lang.Object):
    def createVolumeShaper(self, arg1: VolumeShaper.Configuration, /) -> VolumeShaper: ...

class VolumeProvider(java.lang.Object):
    VOLUME_CONTROL_ABSOLUTE: typing.ClassVar[int] = ...
    VOLUME_CONTROL_FIXED: typing.ClassVar[int] = ...
    VOLUME_CONTROL_RELATIVE: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self, volumeControl: int | java.jint | java.lang.Integer, maxVolume: int | java.jint | java.lang.Integer, currentVolume: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, volumeControl: int | java.jint | java.lang.Integer, maxVolume: int | java.jint | java.lang.Integer, currentVolume: int | java.jint | java.lang.Integer, volumeControlId: str | java.lang.String, /) -> None: ...
    def getCurrentVolume(self) -> int: ...
    def getMaxVolume(self) -> int: ...
    def getVolumeControl(self) -> int: ...
    def getVolumeControlId(self) -> str | None: ...
    def onAdjustVolume(self, direction: int | java.jint | java.lang.Integer, /) -> None: ...
    def onSetVolumeTo(self, volume: int | java.jint | java.lang.Integer, /) -> None: ...
    def setCurrentVolume(self, currentVolume: int | java.jint | java.lang.Integer, /) -> None: ...

class VolumeShaper(java.lang.AutoCloseable):
    def apply(self, operation: VolumeShaper.Operation, /) -> None: ...
    def close(self) -> None: ...
    def finalize(self) -> None: ...
    def getVolume(self) -> float: ...
    def replace(self, configuration: VolumeShaper.Configuration, operation: VolumeShaper.Operation, join: bool | java.jboolean | java.lang.Boolean, /) -> None: ...

    class Operation(android.os.Parcelable):
        CREATOR: typing.ClassVar[android.os.Parcelable.Creator[VolumeShaper.Operation]] = ...
        PLAY: typing.ClassVar[VolumeShaper.Operation] = ...
        REVERSE: typing.ClassVar[VolumeShaper.Operation] = ...
        def describeContents(self) -> int: ...
        def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
        def hashCode(self) -> int: ...
        def toString(self) -> str: ...
        def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

    class Configuration(android.os.Parcelable):
        CREATOR: typing.ClassVar[android.os.Parcelable.Creator[VolumeShaper.Configuration]] = ...
        CUBIC_RAMP: typing.ClassVar[VolumeShaper.Configuration] = ...
        INTERPOLATOR_TYPE_CUBIC: typing.ClassVar[int] = ...
        INTERPOLATOR_TYPE_CUBIC_MONOTONIC: typing.ClassVar[int] = ...
        INTERPOLATOR_TYPE_LINEAR: typing.ClassVar[int] = ...
        INTERPOLATOR_TYPE_STEP: typing.ClassVar[int] = ...
        LINEAR_RAMP: typing.ClassVar[VolumeShaper.Configuration] = ...
        SCURVE_RAMP: typing.ClassVar[VolumeShaper.Configuration] = ...
        SINE_RAMP: typing.ClassVar[VolumeShaper.Configuration] = ...
        def describeContents(self) -> int: ...
        def equals(self, o: java.lang.Object | int | bool | float | str, /) -> bool: ...
        def getDuration(self) -> int: ...
        def getInterpolatorType(self) -> int: ...
        @staticmethod
        def getMaximumCurvePoints() -> int: ...
        def getTimes(self) -> java.chaquopy.JavaArrayJFloat: ...
        def getVolumes(self) -> java.chaquopy.JavaArrayJFloat: ...
        def hashCode(self) -> int: ...
        def toString(self) -> str: ...
        def writeToParcel(self, dest: android.os.Parcel, flags: int | java.jint | java.lang.Integer, /) -> None: ...

        class Builder(java.lang.Object):
            @typing.overload
            def __init__(self) -> None: ...
            @typing.overload
            def __init__(self, configuration: VolumeShaper.Configuration, /) -> None: ...
            def build(self) -> VolumeShaper.Configuration: ...
            def invertVolumes(self) -> VolumeShaper.Configuration.Builder: ...
            def reflectTimes(self) -> VolumeShaper.Configuration.Builder: ...
            def scaleToEndVolume(self, volume: float | java.jfloat | java.lang.Float, /) -> VolumeShaper.Configuration.Builder: ...
            def scaleToStartVolume(self, volume: float | java.jfloat | java.lang.Float, /) -> VolumeShaper.Configuration.Builder: ...
            def setCurve(self, times: java.chaquopy.JavaArrayJFloat, volumes: java.chaquopy.JavaArrayJFloat, /) -> VolumeShaper.Configuration.Builder: ...
            def setDuration(self, durationMillis: int | java.jlong | java.lang.Long, /) -> VolumeShaper.Configuration.Builder: ...
            def setInterpolatorType(self, interpolatorType: int | java.jint | java.lang.Integer, /) -> VolumeShaper.Configuration.Builder: ...
