160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber/*
260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber * Copyright (C) 2012 The Android Open Source Project
360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber *
460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber * you may not use this file except in compliance with the License.
660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber * You may obtain a copy of the License at
760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber *
860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber *
1060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber * Unless required by applicable law or agreed to in writing, software
1160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
1260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber * See the License for the specific language governing permissions and
1460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber * limitations under the License.
1560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber */
1660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
1760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huberpackage android.media;
1860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
19c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main/**
20c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main * Provides information about a given media codec available on the device. You can
21c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main * iterate through all codecs available by querying {@link MediaCodecList}. For example,
22c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main * here's how to find an encoder that supports a given MIME type:
23c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main * <pre>
24c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main * private static MediaCodecInfo selectCodec(String mimeType) {
25c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *     int numCodecs = MediaCodecList.getCodecCount();
26c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *     for (int i = 0; i &lt; numCodecs; i++) {
27c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *         MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
28c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *
29c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *         if (!codecInfo.isEncoder()) {
30c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *             continue;
31c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *         }
32c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *
33c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *         String[] types = codecInfo.getSupportedTypes();
34c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *         for (int j = 0; j &lt; types.length; j++) {
35c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *             if (types[j].equalsIgnoreCase(mimeType)) {
36c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *                 return codecInfo;
37c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *             }
38c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *         }
39c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *     }
40c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *     return null;
41c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main * }</pre>
42c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main *
43c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main */
4460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huberpublic final class MediaCodecInfo {
4560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    private int mIndex;
4660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
4760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    /* package private */ MediaCodecInfo(int index) {
4860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        mIndex = index;
4960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    }
5060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
5160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    /**
5260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber     * Retrieve the codec name.
5360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber     */
5460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    public final String getName() {
5560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        return MediaCodecList.getCodecName(mIndex);
5660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    }
5760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
5860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    /**
5960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber     * Query if the codec is an encoder.
6060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber     */
6160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    public final boolean isEncoder() {
6260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        return MediaCodecList.isEncoder(mIndex);
6360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    }
6460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
6560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    /**
6660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber     * Query the media types supported by the codec.
6760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber     */
6860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    public final String[] getSupportedTypes() {
6960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        return MediaCodecList.getSupportedTypes(mIndex);
7060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    }
7160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
72ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber    /**
73c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * Encapsulates the capabilities of a given codec component.
74c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * For example, what profile/level combinations it supports and what colorspaces
7580c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar     * it is capable of providing the decoded data in, as well as some
7680c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar     * codec-type specific capability flags.
77c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * <p>You can get an instance for a given {@link MediaCodecInfo} object with
78c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * {@link MediaCodecInfo#getCapabilitiesForType getCapabilitiesForType()}, passing a MIME type.
79ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber     */
8060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    public static final class CodecCapabilities {
81ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber        // Enumerates supported profile/level combinations as defined
82ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber        // by the type of encoded data. These combinations impose restrictions
83ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber        // on video resolution, bitrate... and limit the available encoder tools
84ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber        // such as B-frame support, arithmetic coding...
8560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public CodecProfileLevel[] profileLevels;
8660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
8760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_COLOR_FORMATTYPE
8860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatMonochrome              = 1;
8960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format8bitRGB332              = 2;
9060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format12bitRGB444             = 3;
9160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format16bitARGB4444           = 4;
9260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format16bitARGB1555           = 5;
9360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format16bitRGB565             = 6;
9460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format16bitBGR565             = 7;
9560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format18bitRGB666             = 8;
9660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format18bitARGB1665           = 9;
9760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format19bitARGB1666           = 10;
9860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format24bitRGB888             = 11;
9960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format24bitBGR888             = 12;
10060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format24bitARGB1887           = 13;
10160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format25bitARGB1888           = 14;
10260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format32bitBGRA8888           = 15;
10360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format32bitARGB8888           = 16;
10460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV411Planar            = 17;
10560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV411PackedPlanar      = 18;
10660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV420Planar            = 19;
10760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV420PackedPlanar      = 20;
10860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV420SemiPlanar        = 21;
10960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV422Planar            = 22;
11060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV422PackedPlanar      = 23;
11160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV422SemiPlanar        = 24;
11260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYCbYCr                  = 25;
11360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYCrYCb                  = 26;
11460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatCbYCrY                  = 27;
11560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatCrYCbY                  = 28;
11660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV444Interleaved       = 29;
11760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatRawBayer8bit            = 30;
11860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatRawBayer10bit           = 31;
11960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatRawBayer8bitcompressed  = 32;
12060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatL2                      = 33;
12160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatL4                      = 34;
12260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatL8                      = 35;
12360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatL16                     = 36;
12460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatL24                     = 37;
12560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatL32                     = 38;
12660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV420PackedSemiPlanar  = 39;
12760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV422PackedSemiPlanar  = 40;
12860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format18BitBGR666             = 41;
12960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format24BitARGB6666           = 42;
13060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format24BitABGR6666           = 43;
13160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
13260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_TI_FormatYUV420PackedSemiPlanar = 0x7f000100;
13334f17dd1f615c6285f4f344eb700923e2432e48eAndy McFadden        // COLOR_FormatSurface indicates that the data will be a GraphicBuffer metadata reference.
13434f17dd1f615c6285f4f344eb700923e2432e48eAndy McFadden        // In OMX this is called OMX_COLOR_FormatAndroidOpaque.
13534f17dd1f615c6285f4f344eb700923e2432e48eAndy McFadden        public final static int COLOR_FormatSurface                   = 0x7F000789;
13660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_QCOM_FormatYUV420SemiPlanar     = 0x7fa30c00;
13760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
13860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        /**
13960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         * Defined in the OpenMAX IL specs, color format values are drawn from
14060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         * OMX_COLOR_FORMATTYPE.
14160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         */
14260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public int[] colorFormats;
14380c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar
14480c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar        private final static int FLAG_SupportsAdaptivePlayback       = (1 << 0);
14580c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar        private int flags;
14680c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar
14780c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar        /**
14880c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar         * <b>video decoder only</b>: codec supports seamless resolution changes.
14980c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar         */
15080c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar        public final static String FEATURE_AdaptivePlayback       = "adaptive-playback";
15180c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar
15280c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar        /**
15380c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar         * Query codec feature capabilities.
15480c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar         */
15580c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar        public final boolean isFeatureSupported(String name) {
15680c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar            if (name.equals(FEATURE_AdaptivePlayback)) {
15780c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar                return (flags & FLAG_SupportsAdaptivePlayback) != 0;
15880c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar            }
15980c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar            return false;
16080c4437ebfe3e679267a64e4c9d7bdd585b7afceLajos Molnar        }
16160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    };
16260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
163c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main    /**
164c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * Encapsulates the profiles available for a codec component.
165c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * <p>You can get a set of {@link MediaCodecInfo.CodecProfileLevel} objects for a given
166c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * {@link MediaCodecInfo} object from the
167c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * {@link MediaCodecInfo.CodecCapabilities#profileLevels} field.
168c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     */
16960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    public static final class CodecProfileLevel {
17060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_VIDEO_AVCPROFILETYPE
17160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCProfileBaseline = 0x01;
17260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCProfileMain     = 0x02;
17360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCProfileExtended = 0x04;
17460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCProfileHigh     = 0x08;
17560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCProfileHigh10   = 0x10;
17660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCProfileHigh422  = 0x20;
17760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCProfileHigh444  = 0x40;
17860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
17960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_VIDEO_AVCLEVELTYPE
18060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel1       = 0x01;
18160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel1b      = 0x02;
18260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel11      = 0x04;
18360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel12      = 0x08;
18460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel13      = 0x10;
18560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel2       = 0x20;
18660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel21      = 0x40;
18760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel22      = 0x80;
18860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel3       = 0x100;
18960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel31      = 0x200;
19060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel32      = 0x400;
19160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel4       = 0x800;
19260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel41      = 0x1000;
19360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel42      = 0x2000;
19460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel5       = 0x4000;
19560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel51      = 0x8000;
19660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
19760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_VIDEO_H263PROFILETYPE
19860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileBaseline             = 0x01;
19960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileH320Coding           = 0x02;
20060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileBackwardCompatible   = 0x04;
20160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileISWV2                = 0x08;
20260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileISWV3                = 0x10;
20360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileHighCompression      = 0x20;
20460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileInternet             = 0x40;
20560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileInterlace            = 0x80;
20660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileHighLatency          = 0x100;
20760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
20860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_VIDEO_H263LEVELTYPE
20960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level10      = 0x01;
21060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level20      = 0x02;
21160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level30      = 0x04;
21260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level40      = 0x08;
21360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level45      = 0x10;
21460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level50      = 0x20;
21560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level60      = 0x40;
21660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level70      = 0x80;
21760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
21860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_VIDEO_MPEG4PROFILETYPE
21960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileSimple              = 0x01;
22060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileSimpleScalable      = 0x02;
22160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileCore                = 0x04;
22260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileMain                = 0x08;
22360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileNbit                = 0x10;
22460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileScalableTexture     = 0x20;
22560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileSimpleFace          = 0x40;
22660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileSimpleFBA           = 0x80;
22760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileBasicAnimated       = 0x100;
22860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileHybrid              = 0x200;
22960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileAdvancedRealTime    = 0x400;
23060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileCoreScalable        = 0x800;
23160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileAdvancedCoding      = 0x1000;
23260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileAdvancedCore        = 0x2000;
23360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileAdvancedScalable    = 0x4000;
23460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileAdvancedSimple      = 0x8000;
23560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
23660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_VIDEO_MPEG4LEVELTYPE
23760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level0      = 0x01;
23860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level0b     = 0x02;
23960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level1      = 0x04;
24060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level2      = 0x08;
24160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level3      = 0x10;
24260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level4      = 0x20;
24360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level4a     = 0x40;
24460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level5      = 0x80;
24560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
24660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_AUDIO_AACPROFILETYPE
24760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectMain       = 1;
24860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectLC         = 2;
24960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectSSR        = 3;
25060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectLTP        = 4;
25160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectHE         = 5;
25260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectScalable   = 6;
25360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectERLC       = 17;
25460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectLD         = 23;
25560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectHE_PS      = 29;
25660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectELD        = 39;
25760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
258e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin        // from OMX_VIDEO_VP8LEVELTYPE
259e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin        public static final int VP8Level_Version0 = 0x01;
260e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin        public static final int VP8Level_Version1 = 0x02;
261e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin        public static final int VP8Level_Version2 = 0x04;
262e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin        public static final int VP8Level_Version3 = 0x08;
263e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin
264e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin        // from OMX_VIDEO_VP8PROFILETYPE
265e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin        public static final int VP8ProfileMain = 0x01;
266e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin
267e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin
26860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        /**
26960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         * Defined in the OpenMAX IL specs, depending on the type of media
27060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         * this can be OMX_VIDEO_AVCPROFILETYPE, OMX_VIDEO_H263PROFILETYPE,
271e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin         * OMX_VIDEO_MPEG4PROFILETYPE or OMX_VIDEO_VP8PROFILETYPE.
27260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         */
27360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public int profile;
27460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
27560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        /**
27660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         * Defined in the OpenMAX IL specs, depending on the type of media
27760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         * this can be OMX_VIDEO_AVCLEVELTYPE, OMX_VIDEO_H263LEVELTYPE
278e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin         * OMX_VIDEO_MPEG4LEVELTYPE or OMX_VIDEO_VP8LEVELTYPE.
27960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         */
28060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public int level;
28160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    };
28260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
283ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber    /**
284ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber     * Enumerates the capabilities of the codec component. Since a single
285ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber     * component can support data of a variety of types, the type has to be
286ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber     * specified to yield a meaningful result.
287c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * @param type The MIME type to query
288ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber     */
28960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    public final CodecCapabilities getCapabilitiesForType(
29060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber            String type) {
29160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        return MediaCodecList.getCodecCapabilities(mIndex, type);
29260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    }
29360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber}
294