MediaCodecInfo


public final class MediaCodecInfo
extends Object

java.lang.Object
   ↳ android.media.MediaCodecInfo


Provides information about a given media codec available on the device. You can iterate through all codecs available by querying MediaCodecList. For example, here's how to find an encoder that supports a given MIME type:

 private static MediaCodecInfo selectCodec(String mimeType) {
     int numCodecs = MediaCodecList.getCodecCount();
     for (int i = 0; i < numCodecs; i++) {
         MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);

         if (!codecInfo.isEncoder()) {
             continue;
         }

         String[] types = codecInfo.getSupportedTypes();
         for (int j = 0; j < types.length; j++) {
             if (types[j].equalsIgnoreCase(mimeType)) {
                 return codecInfo;
             }
         }
     }
     return null;
 }

Summary

Nested classes

class MediaCodecInfo.AudioCapabilities

A class that supports querying the audio capabilities of a codec. 

class MediaCodecInfo.CodecCapabilities

Encapsulates the capabilities of a given codec component. 

class MediaCodecInfo.CodecProfileLevel

Encapsulates the profiles available for a codec component. 

class MediaCodecInfo.EncoderCapabilities

A class that supports querying the encoding capabilities of a codec. 

class MediaCodecInfo.VideoCapabilities

A class that supports querying the video capabilities of a codec. 

Constants

int SECURITY_MODEL_MEMORY_SAFE

In this model the codec is not running in a sandboxed process, but written in a memory-safe way.

int SECURITY_MODEL_SANDBOXED

In this model the codec is running in a sandboxed process.

Public methods

String getCanonicalName()

Retrieve the underlying codec name.

MediaCodecInfo.CodecCapabilities getCapabilitiesForType(String type)

Enumerates the capabilities of the codec component.

String getName()

Retrieve the codec name.

int getSecurityModel()

Query the security model of the codec.

String[] getSupportedTypes()

Query the media types supported by the codec.

boolean isAlias()

Query if the codec is an alias for another underlying codec.

boolean isEncoder()

Query if the codec is an encoder.

boolean isHardwareAccelerated()

Query if the codec is hardware accelerated.

boolean isSoftwareOnly()

Query if the codec is software only.

boolean isVendor()

Query if the codec is provided by the Android platform (false) or the device manufacturer (true).

Inherited methods

Constants

SECURITY_MODEL_MEMORY_SAFE

public static final int SECURITY_MODEL_MEMORY_SAFE

In this model the codec is not running in a sandboxed process, but written in a memory-safe way. It typically means that the software implementation of the codec is written in a memory-safe language such as Rust.

Constant Value: 1 (0x00000001)

SECURITY_MODEL_SANDBOXED

public static final int SECURITY_MODEL_SANDBOXED

In this model the codec is running in a sandboxed process. Even if a malicious content was fed to the codecs in this model, the impact will be contained in the sandboxed process.

Constant Value: 0 (0x00000000)

Public methods

getCanonicalName

Added in API level 29
public String getCanonicalName ()

Retrieve the underlying codec name. Device implementations may provide multiple aliases (codec names) for the same underlying codec to maintain backward app compatibility. This method returns the name of the underlying codec name, which must not be another alias. For non-aliases this is always the name of the codec.

Returns
String This value cannot be null.

getCapabilitiesForType

Added in API level 16
public MediaCodecInfo.CodecCapabilities getCapabilitiesForType (String type)

Enumerates the capabilities of the codec component. Since a single component can support data of a variety of types, the type has to be specified to yield a meaningful result.

Parameters
type String: The MIME type to query

Returns
MediaCodecInfo.CodecCapabilities

getName

Added in API level 16
public String getName ()

Retrieve the codec name. Note: Implementations may provide multiple aliases (codec names) for the same underlying codec, any of which can be used to instantiate the same underlying codec in MediaCodec.createByCodecName. Applications targeting SDK < Build.VERSION_CODES.Q, cannot determine if the multiple codec names listed in MediaCodecList are in-fact for the same codec.

Returns
String This value cannot be null.

getSecurityModel

public int getSecurityModel ()

Query the security model of the codec.

Returns
int Value is SECURITY_MODEL_SANDBOXED, SECURITY_MODEL_MEMORY_SAFE, or android.media.MediaCodecInfo.SECURITY_MODEL_TRUSTED_CONTENT_ONLY

getSupportedTypes

Added in API level 16
public String[] getSupportedTypes ()

Query the media types supported by the codec.

Returns
String[]

isAlias

Added in API level 29
public boolean isAlias ()

Query if the codec is an alias for another underlying codec.

Returns
boolean

isEncoder

Added in API level 16
public boolean isEncoder ()

Query if the codec is an encoder.

Returns
boolean

isHardwareAccelerated

Added in API level 29
public boolean isHardwareAccelerated ()

Query if the codec is hardware accelerated. This attribute is provided by the device manufacturer. Note that it cannot be tested for correctness.

Returns
boolean

isSoftwareOnly

Added in API level 29
public boolean isSoftwareOnly ()

Query if the codec is software only. Software-only codecs are more secure as they run in a tighter security sandbox. On the other hand, software-only codecs do not provide any performance guarantees.

Returns
boolean

isVendor

Added in API level 29
public boolean isVendor ()

Query if the codec is provided by the Android platform (false) or the device manufacturer (true).

Returns
boolean