@UnstableApi
class MediaCodecInfo


Information about a MediaCodec for a given MIME type.

Summary

Constants

const Int

The value returned by getMaxSupportedInstances if the upper bound on the maximum number of supported instances is unknown.

const String!
TAG = "MediaCodecInfo"

Public functions

Point?
@RequiresApi(value = 21)
alignVideoSizeV21(width: Int, height: Int)

Returns the smallest video size greater than or equal to a specified size that also satisfies the MediaCodec's width and height alignment requirements.

DecoderReuseEvaluation!
canReuseCodec(oldFormat: Format!, newFormat: Format!)

Evaluates whether it's possible to reuse an instance of this decoder that's currently decoding oldFormat to decode newFormat instead.

Int

Returns an upper bound on the maximum number of supported instances, or MAX_SUPPORTED_INSTANCES_UNKNOWN if unknown.

Array<MediaCodecInfo.CodecProfileLevel!>!

The profile levels supported by the decoder.

Boolean
@RequiresApi(value = 21)
isAudioChannelCountSupportedV21(channelCount: Int)

Whether the decoder supports audio with a given channel count.

Boolean
@RequiresApi(value = 21)
isAudioSampleRateSupportedV21(sampleRate: Int)

Whether the decoder supports audio with a given sample rate.

Boolean

Returns whether the decoder may functionally support decoding the given format.

Boolean

Returns whether the decoder may support decoding the given format both functionally and performantly.

Boolean

Whether the codec handles HDR10+ out-of-band metadata.

Boolean

Returns whether it may be possible to adapt an instance of this decoder to playing a different format when the codec is configured to play media in the specified format.

Boolean
isSeamlessAdaptationSupported(
    oldFormat: Format!,
    newFormat: Format!,
    isNewFormatComplete: Boolean
)

This function is deprecated.

Use canReuseCodec.

Boolean
@RequiresApi(value = 21)
isVideoSizeAndRateSupportedV21(width: Int, height: Int, frameRate: Double)

Whether the decoder supports video with a given width, height and frame rate.

java-static MediaCodecInfo!
newInstance(
    name: String!,
    mimeType: String!,
    codecMimeType: String!,
    capabilities: MediaCodecInfo.CodecCapabilities?,
    hardwareAccelerated: Boolean,
    softwareOnly: Boolean,
    vendor: Boolean,
    forceDisableAdaptive: Boolean,
    forceSecure: Boolean
)

Creates an instance.

String!

Public properties

Boolean

Whether the decoder supports seamless resolution switches.

MediaCodecInfo.CodecCapabilities?

The capabilities of the decoder, like the profiles/levels it supports, or null if not known.

String!

The MIME type that the codec uses for media of type mimeType.

Boolean

Whether the codec is hardware accelerated.

String!

The MIME type handled by the codec.

String!

The name of the decoder.

Boolean

Whether the decoder is secure.

Boolean

Whether the codec is software only.

Boolean

Whether the decoder supports tunneling.

Boolean

Whether the codec is from the vendor.

Constants

MAX_SUPPORTED_INSTANCES_UNKNOWN

const val MAX_SUPPORTED_INSTANCES_UNKNOWN = -1: Int

The value returned by getMaxSupportedInstances if the upper bound on the maximum number of supported instances is unknown.

TAG

const val TAG = "MediaCodecInfo": String!

Public functions

alignVideoSizeV21

@RequiresApi(value = 21)
fun alignVideoSizeV21(width: Int, height: Int): Point?

Returns the smallest video size greater than or equal to a specified size that also satisfies the MediaCodec's width and height alignment requirements.

Must not be called if the device SDK version is less than 21.

Parameters
width: Int

Width in pixels.

height: Int

Height in pixels.

Returns
Point?

The smallest video size greater than or equal to the specified size that also satisfies the MediaCodec's width and height alignment requirements, or null if not a video codec.

canReuseCodec

fun canReuseCodec(oldFormat: Format!, newFormat: Format!): DecoderReuseEvaluation!

Evaluates whether it's possible to reuse an instance of this decoder that's currently decoding oldFormat to decode newFormat instead.

For adaptation to succeed, the codec must also be configured with maximum values that are compatible with the new format.

Parameters
oldFormat: Format!

The format being decoded.

newFormat: Format!

The new format.

Returns
DecoderReuseEvaluation!

The result of the evaluation.

getMaxSupportedInstances

fun getMaxSupportedInstances(): Int

Returns an upper bound on the maximum number of supported instances, or MAX_SUPPORTED_INSTANCES_UNKNOWN if unknown. Applications should not expect to operate more instances than the returned maximum.

getProfileLevels

fun getProfileLevels(): Array<MediaCodecInfo.CodecProfileLevel!>!

The profile levels supported by the decoder.

Returns
Array<MediaCodecInfo.CodecProfileLevel!>!

The profile levels supported by the decoder.

isAudioChannelCountSupportedV21

@RequiresApi(value = 21)
fun isAudioChannelCountSupportedV21(channelCount: Int): Boolean

Whether the decoder supports audio with a given channel count.

Must not be called if the device SDK version is less than 21.

Parameters
channelCount: Int

The channel count.

Returns
Boolean

Whether the decoder supports audio with the given channel count.

isAudioSampleRateSupportedV21

@RequiresApi(value = 21)
fun isAudioSampleRateSupportedV21(sampleRate: Int): Boolean

Whether the decoder supports audio with a given sample rate.

Must not be called if the device SDK version is less than 21.

Parameters
sampleRate: Int

The sample rate in Hz.

Returns
Boolean

Whether the decoder supports audio with the given sample rate.

isFormatFunctionallySupported

fun isFormatFunctionallySupported(format: Format!): Boolean

Returns whether the decoder may functionally support decoding the given format.

Parameters
format: Format!

The input media format.

Returns
Boolean

Whether the decoder may functionally support decoding the given format.

isFormatSupported

fun isFormatSupported(format: Format!): Boolean

Returns whether the decoder may support decoding the given format both functionally and performantly.

Parameters
format: Format!

The input media format.

Returns
Boolean

Whether the decoder may support decoding the given format.

Throws
androidx.media3.exoplayer.mediacodec.MediaCodecUtil.DecoderQueryException

Thrown if an error occurs while querying decoders.

isHdr10PlusOutOfBandMetadataSupported

fun isHdr10PlusOutOfBandMetadataSupported(): Boolean

Whether the codec handles HDR10+ out-of-band metadata.

isSeamlessAdaptationSupported

fun isSeamlessAdaptationSupported(format: Format!): Boolean

Returns whether it may be possible to adapt an instance of this decoder to playing a different format when the codec is configured to play media in the specified format.

For adaptation to succeed, the codec must also be configured with appropriate maximum values and isSeamlessAdaptationSupported must return true for the old/new formats.

Parameters
format: Format!

The format of media for which the decoder will be configured.

Returns
Boolean

Whether adaptation may be possible

isSeamlessAdaptationSupported

fun isSeamlessAdaptationSupported(
    oldFormat: Format!,
    newFormat: Format!,
    isNewFormatComplete: Boolean
): Boolean

Returns whether it is possible to adapt an instance of this decoder seamlessly from oldFormat to newFormat. If newFormat may not be completely populated, pass false for isNewFormatComplete.

For adaptation to succeed, the codec must also be configured with maximum values that are compatible with the new format.

Parameters
oldFormat: Format!

The format being decoded.

newFormat: Format!

The new format.

isNewFormatComplete: Boolean

Whether newFormat is populated with format-specific metadata.

Returns
Boolean

Whether it is possible to adapt the decoder seamlessly.

isVideoSizeAndRateSupportedV21

@RequiresApi(value = 21)
fun isVideoSizeAndRateSupportedV21(width: Int, height: Int, frameRate: Double): Boolean

Whether the decoder supports video with a given width, height and frame rate.

Parameters
width: Int

Width in pixels.

height: Int

Height in pixels.

frameRate: Double

Optional frame rate in frames per second. Ignored if set to NO_VALUE or any value less than or equal to 0.

Returns
Boolean

Whether the decoder supports video with the given width, height and frame rate.

newInstance

java-static fun newInstance(
    name: String!,
    mimeType: String!,
    codecMimeType: String!,
    capabilities: MediaCodecInfo.CodecCapabilities?,
    hardwareAccelerated: Boolean,
    softwareOnly: Boolean,
    vendor: Boolean,
    forceDisableAdaptive: Boolean,
    forceSecure: Boolean
): MediaCodecInfo!

Creates an instance.

Parameters
name: String!

The name of the MediaCodec.

mimeType: String!

A MIME type supported by the MediaCodec.

codecMimeType: String!

The MIME type that the codec uses for media of type #mimeType. Equal to mimeType unless the codec is known to use a non-standard MIME type alias.

capabilities: MediaCodecInfo.CodecCapabilities?

The capabilities of the MediaCodec for the specified MIME type, or null if not known.

hardwareAccelerated: Boolean

Whether the MediaCodec is hardware accelerated.

softwareOnly: Boolean

Whether the MediaCodec is software only.

vendor: Boolean

Whether the MediaCodec is provided by the vendor.

forceDisableAdaptive: Boolean

Whether adaptive should be forced to false.

forceSecure: Boolean

Whether secure should be forced to true.

Returns
MediaCodecInfo!

The created instance.

toString

fun toString(): String!

Public properties

adaptive

val adaptiveBoolean

Whether the decoder supports seamless resolution switches.

capabilities

val capabilitiesMediaCodecInfo.CodecCapabilities?

The capabilities of the decoder, like the profiles/levels it supports, or null if not known.

codecMimeType

val codecMimeTypeString!

The MIME type that the codec uses for media of type mimeType. Equal to mimeType unless the codec is known to use a non-standard MIME type alias.

hardwareAccelerated

val hardwareAcceleratedBoolean

Whether the codec is hardware accelerated.

This could be an approximation as the exact information is only provided in API levels 29+.

mimeType

val mimeTypeString!

The MIME type handled by the codec.

name

val nameString!

The name of the decoder.

May be passed to createByCodecName to create an instance of the decoder.

secure

val secureBoolean

Whether the decoder is secure.

softwareOnly

val softwareOnlyBoolean

Whether the codec is software only.

This could be an approximation as the exact information is only provided in API levels 29+.

See also
isSoftwareOnly

tunneling

val tunnelingBoolean

Whether the decoder supports tunneling.

vendor

val vendorBoolean

Whether the codec is from the vendor.

This could be an approximation as the exact information is only provided in API levels 29+.

See also
isVendor