Package com.google.android.exoplayer2.mediacodec

## Class MediaCodecInfo

- java.lang.Object
- - com.google.android.exoplayer2.mediacodec.MediaCodecInfo

-     public final class MediaCodecInfo
      extends Object

  Information about a `MediaCodec` for a given mime type.

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `boolean` | `adaptive` | Whether the decoder supports seamless resolution switches.
    `MediaCodecInfo.CodecCapabilities` | `capabilities` | The capabilities of the decoder, like the profiles/levels it supports, or `null` if not known.
    `String` | `codecMimeType` | The MIME type that the codec uses for media of type `mimeType`.
    `boolean` | `hardwareAccelerated` | Whether the codec is hardware accelerated.
    `static int` | `MAX_SUPPORTED_INSTANCES_UNKNOWN` | The value returned by `getMaxSupportedInstances()` if the upper bound on the maximum number of supported instances is unknown.
    `String` | `mimeType` | The MIME type handled by the codec.
    `String` | `name` | The name of the decoder.
    `boolean` | `secure` | Whether the decoder is secure.
    `boolean` | `softwareOnly` | Whether the codec is software only.
    `static String` | `TAG` |
    `boolean` | `tunneling` | Whether the decoder supports tunneling.
    `boolean` | `vendor` | Whether the codec is from the vendor.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `Point` | `alignVideoSizeV21​(int width, int height)` | 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​(Format oldFormat, Format newFormat)` | Evaluates whether it's possible to reuse an instance of this decoder that's currently decoding `oldFormat` to decode `newFormat` instead.
    `int` | `getMaxSupportedInstances()` | Returns an upper bound on the maximum number of supported instances, or `MAX_SUPPORTED_INSTANCES_UNKNOWN` if unknown.
    `MediaCodecInfo.CodecProfileLevel[]` | `getProfileLevels()` | The profile levels supported by the decoder.
    `boolean` | `isAudioChannelCountSupportedV21​(int channelCount)` | Whether the decoder supports audio with a given channel count.
    `boolean` | `isAudioSampleRateSupportedV21​(int sampleRate)` | Whether the decoder supports audio with a given sample rate.
    `boolean` | `isCodecSupported​(Format format)` | Whether the decoder supports the codec of the given `format`.
    `boolean` | `isFormatSupported​(Format format)` | Returns whether the decoder may support decoding the given `format`.
    `boolean` | `isHdr10PlusOutOfBandMetadataSupported()` | Whether the codec handles HDR10+ out-of-band metadata.
    `boolean` | `isSeamlessAdaptationSupported​(Format format)` | 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​(Format oldFormat, Format newFormat, boolean isNewFormatComplete)` | Deprecated. Use `canReuseCodec(com.google.android.exoplayer2.Format, com.google.android.exoplayer2.Format)`.
    `boolean` | `isVideoSizeAndRateSupportedV21​(int width, int height, double frameRate)` | Whether the decoder supports video with a given width, height and frame rate.
    `static MediaCodecInfo` | `newInstance​(String name, String mimeType, String codecMimeType, MediaCodecInfo.CodecCapabilities capabilities, boolean hardwareAccelerated, boolean softwareOnly, boolean vendor, boolean forceDisableAdaptive, boolean forceSecure)` | Creates an instance.
    `String` | `toString()` |

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### TAG

          public static final String TAG

      See Also:
        Constant Field Values

    - #### MAX_SUPPORTED_INSTANCES_UNKNOWN

          public static final int MAX_SUPPORTED_INSTANCES_UNKNOWN

      The value returned by `getMaxSupportedInstances()` if the upper bound on the maximum number of supported instances is unknown.
      See Also:
        Constant Field Values

    - #### name

          public final String name

      The name of the decoder.

      May be passed to `MediaCodec.createByCodecName(String)` to create an instance of the decoder.

    - #### mimeType

          public final String mimeType

      The MIME type handled by the codec.

    - #### codecMimeType

          public final String codecMimeType

      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

          @Nullable
          public final MediaCodecInfo.CodecCapabilities capabilities

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

    - #### adaptive

          public final boolean adaptive

      Whether the decoder supports seamless resolution switches.
      See Also:
        `MediaCodecInfo.CodecCapabilities.isFeatureSupported(String)`, `MediaCodecInfo.CodecCapabilities.FEATURE_AdaptivePlayback`

    - #### tunneling

          public final boolean tunneling

      Whether the decoder supports tunneling.
      See Also:
        `MediaCodecInfo.CodecCapabilities.isFeatureSupported(String)`, `MediaCodecInfo.CodecCapabilities.FEATURE_TunneledPlayback`

    - #### secure

          public final boolean secure

      Whether the decoder is secure.
      See Also:
        `MediaCodecInfo.CodecCapabilities.isFeatureSupported(String)`, `MediaCodecInfo.CodecCapabilities.FEATURE_SecurePlayback`

    - #### hardwareAccelerated

          public final boolean hardwareAccelerated

      Whether the codec is hardware accelerated.

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

      See Also:
        `MediaCodecInfo.isHardwareAccelerated()`

    - #### softwareOnly

          public final boolean softwareOnly

      Whether the codec is software only.

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

      See Also:
        `MediaCodecInfo.isSoftwareOnly()`

    - #### vendor

          public final boolean vendor

      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:
        `MediaCodecInfo.isVendor()`

  - ### Method Detail

    - #### newInstance

          public static MediaCodecInfo newInstance​(String name,
                                                   String mimeType,
                                                   String codecMimeType,
                                                   @Nullable
                                                   MediaCodecInfo.CodecCapabilities capabilities,
                                                   boolean hardwareAccelerated,
                                                   boolean softwareOnly,
                                                   boolean vendor,
                                                   boolean forceDisableAdaptive,
                                                   boolean forceSecure)

      Creates an instance.
      Parameters:
        `name` - The name of the `MediaCodec`.
        `mimeType` - A mime type supported by the `MediaCodec`.
        `codecMimeType` - 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` - The capabilities of the `MediaCodec` for the specified mime type, or `null` if not known.
        `hardwareAccelerated` - Whether the `MediaCodec` is hardware accelerated.
        `softwareOnly` - Whether the `MediaCodec` is software only.
        `vendor` - Whether the `MediaCodec` is provided by the vendor.
        `forceDisableAdaptive` - Whether `adaptive` should be forced to `false`.
        `forceSecure` - Whether `secure` should be forced to `true`.
      Returns:
        The created instance.

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Object`

    - #### getProfileLevels

          public MediaCodecInfo.CodecProfileLevel[] getProfileLevels()

      The profile levels supported by the decoder.
      Returns:
        The profile levels supported by the decoder.

    - #### getMaxSupportedInstances

          public int getMaxSupportedInstances()

      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.
      See Also:
        `MediaCodecInfo.CodecCapabilities.getMaxSupportedInstances()`

    - #### isFormatSupported

          public boolean isFormatSupported​(Format format)
                                    throws MediaCodecUtil.DecoderQueryException

      Returns whether the decoder may support decoding the given `format`.
      Parameters:
        `format` - The input media format.
      Returns:
        Whether the decoder may support decoding the given `format`.
      Throws:
        `MediaCodecUtil.DecoderQueryException` - Thrown if an error occurs while querying decoders.

    - #### isCodecSupported

          public boolean isCodecSupported​(Format format)

      Whether the decoder supports the codec of the given `format`. If there is insufficient information to decide, returns true.
      Parameters:
        `format` - The input media format.
      Returns:
        True if the codec of the given `format` is supported by the decoder.

    - #### isHdr10PlusOutOfBandMetadataSupported

          public boolean isHdr10PlusOutOfBandMetadataSupported()

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

    - #### isSeamlessAdaptationSupported

          public boolean isSeamlessAdaptationSupported​(Format format)

      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(Format, Format, boolean)` must return `true` for the old/new formats.

      Parameters:
        `format` - The format of media for which the decoder will be configured.
      Returns:
        Whether adaptation may be possible

    - #### isSeamlessAdaptationSupported

          @Deprecated
          public boolean isSeamlessAdaptationSupported​(Format oldFormat,
                                                       Format newFormat,
                                                       boolean isNewFormatComplete)

      Deprecated.
      Use `canReuseCodec(com.google.android.exoplayer2.Format, com.google.android.exoplayer2.Format)`.
      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` - The format being decoded.
        `newFormat` - The new format.
        `isNewFormatComplete` - Whether `newFormat` is populated with format-specific metadata.
      Returns:
        Whether it is possible to adapt the decoder seamlessly.

    - #### canReuseCodec

          public DecoderReuseEvaluation canReuseCodec​(Format oldFormat,
                                                      Format newFormat)

      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` - The format being decoded.
        `newFormat` - The new format.
      Returns:
        The result of the evaluation.

    - #### isVideoSizeAndRateSupportedV21

          @RequiresApi(21)
          public boolean isVideoSizeAndRateSupportedV21​(int width,
                                                        int height,
                                                        double frameRate)

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

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

      Parameters:
        `width` - Width in pixels.
        `height` - Height in pixels.
        `frameRate` - Optional frame rate in frames per second. Ignored if set to `Format.NO_VALUE` or any value less than or equal to 0.
      Returns:
        Whether the decoder supports video with the given width, height and frame rate.

    - #### alignVideoSizeV21

          @Nullable
          @RequiresApi(21)
          public Point alignVideoSizeV21​(int width,
                                         int height)

      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` - Width in pixels.
        `height` - Height in pixels.
      Returns:
        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.

    - #### isAudioSampleRateSupportedV21

          @RequiresApi(21)
          public boolean isAudioSampleRateSupportedV21​(int sampleRate)

      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` - The sample rate in Hz.
      Returns:
        Whether the decoder supports audio with the given sample rate.

    - #### isAudioChannelCountSupportedV21

          @RequiresApi(21)
          public boolean isAudioChannelCountSupportedV21​(int channelCount)

      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` - The channel count.
      Returns:
        Whether the decoder supports audio with the given channel count.