Package com.google.android.exoplayer2.transformer

## Class EncoderUtil

- java.lang.Object
- - com.google.android.exoplayer2.transformer.EncoderUtil

-     public final class EncoderUtil
      extends Object

  Utility methods for `MediaCodec` encoders.

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static int` | `LEVEL_UNSET` | A value to indicate the encoding level is not set.

  - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `static String` | `findCodecForFormat​(MediaFormat format, boolean isDecoder)` | Finds a `MediaCodec` that supports the `MediaFormat`, or `null` if none is found.
    `static int` | `findHighestSupportedEncodingLevel​(MediaCodecInfo encoderInfo, String mimeType, int profile)` | Finds the highest supported encoding level given a profile.
    `static ImmutableSet<Integer>` | `findSupportedEncodingProfiles​(MediaCodecInfo encoderInfo, String mimeType)` | Returns a `set` of supported encoding profiles for the given encoder and MIME type.
    `static ImmutableList<Integer>` | `getCodecProfilesForHdrFormat​(String mimeType, @com.google.android.exoplayer2.C.ColorTransfer int colorTransfer)` | Returns the profile constants that can be used to encode the given HDR format, if supported by the device (this method does not check device capabilities).
    `static int` | `getMaxSupportedInstances​(MediaCodecInfo encoderInfo, String mimeType)` | Returns the number of max number of the supported concurrent codec instances.
    `static Range<Integer>` | `getSupportedBitrateRange​(MediaCodecInfo encoderInfo, String mimeType)` | Returns the range of supported bitrates for the given MIME type.
    `static ImmutableList<Integer>` | `getSupportedColorFormats​(MediaCodecInfo encoderInfo, String mimeType)` | Returns a `list` of supported color formats for the given encoder and MIME type.
    `static ImmutableList<String>` | `getSupportedEncoderNamesForHdrEditing​(String mimeType, ColorInfo colorInfo)` | Returns the names of encoders that support HDR editing for the given format, or an empty list if the format is unknown or not supported for HDR encoding.
    `static ImmutableList<MediaCodecInfo>` | `getSupportedEncoders​(String mimeType)` | Returns a list of encoders that support the given `mimeType`, or an empty list if there is none.
    `static Range<Integer>` | `getSupportedHeights​(MediaCodecInfo encoderInfo, String mimeType, int width)` | Returns a `Range` of supported heights for the given `encoder`, MIME type and `width`.
    `static Size` | `getSupportedResolution​(MediaCodecInfo encoderInfo, String mimeType, int width, int height)` | Finds an encoder's supported resolution from a given resolution.
    `static Pair<Range<Integer>,​Range<Integer>>` | `getSupportedResolutionRanges​(MediaCodecInfo encoderInfo, String mimeType)` | Returns a `Pair` of supported width and height `ranges` for the given `encoder` and MIME type.
    `static ImmutableSet<String>` | `getSupportedVideoMimeTypes()` | Returns a list of video MIME types that can be encoded.
    `static boolean` | `isBitrateModeSupported​(MediaCodecInfo encoderInfo, String mimeType, int bitrateMode)` | Returns whether the bitrate mode is supported by the encoder.
    `static boolean` | `isFeatureSupported​(MediaCodecInfo encoderInfo, String mimeType, String featureName)` | Returns whether a given feature is supported.
    `static boolean` | `isHardwareAccelerated​(MediaCodecInfo encoderInfo, String mimeType)` | Checks if a codec is hardware-accelerated.
    `static boolean` | `isSizeSupported​(MediaCodecInfo encoderInfo, String mimeType, int width, int height)` | Returns whether the encoder supports the given resolution.

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

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

- - ### Field Detail

    - #### LEVEL_UNSET

          public static final int LEVEL_UNSET

      A value to indicate the encoding level is not set.
      See Also:
        Constant Field Values

  - ### Method Detail

    - #### getSupportedEncoders

          public static ImmutableList<MediaCodecInfo> getSupportedEncoders​(String mimeType)

      Returns a list of encoders that support the given `mimeType`, or an empty list if there is none.

    - #### getSupportedVideoMimeTypes

          public static ImmutableSet<String> getSupportedVideoMimeTypes()

      Returns a list of video MIME types that can be encoded.

    - #### getSupportedEncoderNamesForHdrEditing

          public static ImmutableList<String> getSupportedEncoderNamesForHdrEditing​(String mimeType,
                                                                                    @Nullable
                                                                                    ColorInfo colorInfo)

      Returns the names of encoders that support HDR editing for the given format, or an empty list if the format is unknown or not supported for HDR encoding.

    - #### getCodecProfilesForHdrFormat

          public static ImmutableList<Integer> getCodecProfilesForHdrFormat​(String mimeType,
                                                                            @com.google.android.exoplayer2.C.ColorTransfer int colorTransfer)

      Returns the profile constants that can be used to encode the given HDR format, if supported by the device (this method does not check device capabilities). If multiple profiles are returned, they are ordered by expected level of compatibility, with the most widely compatible profile first.

    - #### isSizeSupported

          public static boolean isSizeSupported​(MediaCodecInfo encoderInfo,
                                                String mimeType,
                                                int width,
                                                int height)

      Returns whether the encoder supports the given resolution.

    - #### getSupportedHeights

          public static Range<Integer> getSupportedHeights​(MediaCodecInfo encoderInfo,
                                                           String mimeType,
                                                           int width)

      Returns a `Range` of supported heights for the given `encoder`, MIME type and `width`.
      Throws:
        `IllegalArgumentException` - When the width is not in the range of supported widths.

    - #### getSupportedResolutionRanges

          public static Pair<Range<Integer>,​Range<Integer>> getSupportedResolutionRanges​(MediaCodecInfo encoderInfo,
                                                                                               String mimeType)

      Returns a `Pair` of supported width and height `ranges` for the given `encoder` and MIME type.

    - #### getSupportedResolution

          @Nullable
          public static Size getSupportedResolution​(MediaCodecInfo encoderInfo,
                                                    String mimeType,
                                                    int width,
                                                    int height)

      Finds an encoder's supported resolution from a given resolution.

      The input resolution is returned, if it (after aligning to the encoder's requirement) is supported by the encoder.

      The resolution will be adjusted to be within the encoder's range of supported resolutions, and will be aligned to the encoder's alignment requirement. The adjustment process takes into account the original aspect ratio. But the fixed resolution may not preserve the original aspect ratio, depending on the encoder's required size alignment.

      Parameters:
        `encoderInfo` - The `MediaCodecInfo` of the encoder.
        `mimeType` - The output MIME type.
        `width` - The original width.
        `height` - The original height.
      Returns:
        A supported resolution, or `null` if unable to find a fallback.

    - #### findSupportedEncodingProfiles

          public static ImmutableSet<Integer> findSupportedEncodingProfiles​(MediaCodecInfo encoderInfo,
                                                                            String mimeType)

      Returns a `set` of supported encoding profiles for the given encoder and MIME type.

    - #### findHighestSupportedEncodingLevel

          public static int findHighestSupportedEncodingLevel​(MediaCodecInfo encoderInfo,
                                                              String mimeType,
                                                              int profile)

      Finds the highest supported encoding level given a profile.
      Parameters:
        `encoderInfo` - The `encoderInfo`.
        `mimeType` - The MIME type.
        `profile` - The encoding profile.
      Returns:
        The highest supported encoding level, as documented in `MediaCodecInfo.CodecProfileLevel`, or `LEVEL_UNSET` if the profile is not supported.

    - #### findCodecForFormat

          @Nullable
          public static String findCodecForFormat​(MediaFormat format,
                                                  boolean isDecoder)

      Finds a `MediaCodec` that supports the `MediaFormat`, or `null` if none is found.

    - #### getSupportedBitrateRange

          public static Range<Integer> getSupportedBitrateRange​(MediaCodecInfo encoderInfo,
                                                                String mimeType)

      Returns the range of supported bitrates for the given MIME type.

    - #### isBitrateModeSupported

          public static boolean isBitrateModeSupported​(MediaCodecInfo encoderInfo,
                                                       String mimeType,
                                                       int bitrateMode)

      Returns whether the bitrate mode is supported by the encoder.

    - #### getSupportedColorFormats

          public static ImmutableList<Integer> getSupportedColorFormats​(MediaCodecInfo encoderInfo,
                                                                        String mimeType)

      Returns a `list` of supported color formats for the given encoder and MIME type.

    - #### isHardwareAccelerated

          public static boolean isHardwareAccelerated​(MediaCodecInfo encoderInfo,
                                                      String mimeType)

      Checks if a codec is hardware-accelerated.

    - #### isFeatureSupported

          public static boolean isFeatureSupported​(MediaCodecInfo encoderInfo,
                                                   String mimeType,
                                                   String featureName)

      Returns whether a given feature is supported.

    - #### getMaxSupportedInstances

          @RequiresApi(23)
          public static int getMaxSupportedInstances​(MediaCodecInfo encoderInfo,
                                                     String mimeType)

      Returns the number of max number of the supported concurrent codec instances.