MediaCodecInfo.java revision c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879
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
75ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber     * it is capable of providing the decoded data in.
76c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * <p>You can get an instance for a given {@link MediaCodecInfo} object with
77c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * {@link MediaCodecInfo#getCapabilitiesForType getCapabilitiesForType()}, passing a MIME type.
78ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber     */
7960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    public static final class CodecCapabilities {
80ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber        // Enumerates supported profile/level combinations as defined
81ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber        // by the type of encoded data. These combinations impose restrictions
82ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber        // on video resolution, bitrate... and limit the available encoder tools
83ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber        // such as B-frame support, arithmetic coding...
8460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public CodecProfileLevel[] profileLevels;
8560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
8660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_COLOR_FORMATTYPE
8760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatMonochrome              = 1;
8860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format8bitRGB332              = 2;
8960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format12bitRGB444             = 3;
9060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format16bitARGB4444           = 4;
9160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format16bitARGB1555           = 5;
9260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format16bitRGB565             = 6;
9360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format16bitBGR565             = 7;
9460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format18bitRGB666             = 8;
9560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format18bitARGB1665           = 9;
9660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format19bitARGB1666           = 10;
9760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format24bitRGB888             = 11;
9860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format24bitBGR888             = 12;
9960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format24bitARGB1887           = 13;
10060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format25bitARGB1888           = 14;
10160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format32bitBGRA8888           = 15;
10260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format32bitARGB8888           = 16;
10360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV411Planar            = 17;
10460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV411PackedPlanar      = 18;
10560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV420Planar            = 19;
10660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV420PackedPlanar      = 20;
10760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV420SemiPlanar        = 21;
10860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV422Planar            = 22;
10960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV422PackedPlanar      = 23;
11060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV422SemiPlanar        = 24;
11160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYCbYCr                  = 25;
11260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYCrYCb                  = 26;
11360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatCbYCrY                  = 27;
11460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatCrYCbY                  = 28;
11560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV444Interleaved       = 29;
11660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatRawBayer8bit            = 30;
11760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatRawBayer10bit           = 31;
11860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatRawBayer8bitcompressed  = 32;
11960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatL2                      = 33;
12060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatL4                      = 34;
12160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatL8                      = 35;
12260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatL16                     = 36;
12360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatL24                     = 37;
12460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatL32                     = 38;
12560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV420PackedSemiPlanar  = 39;
12660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_FormatYUV422PackedSemiPlanar  = 40;
12760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format18BitBGR666             = 41;
12860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format24BitARGB6666           = 42;
12960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_Format24BitABGR6666           = 43;
13060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
13160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_TI_FormatYUV420PackedSemiPlanar = 0x7f000100;
13234f17dd1f615c6285f4f344eb700923e2432e48eAndy McFadden        // COLOR_FormatSurface indicates that the data will be a GraphicBuffer metadata reference.
13334f17dd1f615c6285f4f344eb700923e2432e48eAndy McFadden        // In OMX this is called OMX_COLOR_FormatAndroidOpaque.
13434f17dd1f615c6285f4f344eb700923e2432e48eAndy McFadden        public final static int COLOR_FormatSurface                   = 0x7F000789;
13560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public final static int COLOR_QCOM_FormatYUV420SemiPlanar     = 0x7fa30c00;
13660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
13760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        /**
13860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         * Defined in the OpenMAX IL specs, color format values are drawn from
13960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         * OMX_COLOR_FORMATTYPE.
14060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         */
14160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public int[] colorFormats;
14260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    };
14360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
144c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main    /**
145c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * Encapsulates the profiles available for a codec component.
146c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * <p>You can get a set of {@link MediaCodecInfo.CodecProfileLevel} objects for a given
147c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * {@link MediaCodecInfo} object from the
148c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * {@link MediaCodecInfo.CodecCapabilities#profileLevels} field.
149c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     */
15060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    public static final class CodecProfileLevel {
15160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_VIDEO_AVCPROFILETYPE
15260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCProfileBaseline = 0x01;
15360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCProfileMain     = 0x02;
15460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCProfileExtended = 0x04;
15560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCProfileHigh     = 0x08;
15660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCProfileHigh10   = 0x10;
15760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCProfileHigh422  = 0x20;
15860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCProfileHigh444  = 0x40;
15960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
16060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_VIDEO_AVCLEVELTYPE
16160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel1       = 0x01;
16260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel1b      = 0x02;
16360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel11      = 0x04;
16460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel12      = 0x08;
16560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel13      = 0x10;
16660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel2       = 0x20;
16760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel21      = 0x40;
16860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel22      = 0x80;
16960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel3       = 0x100;
17060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel31      = 0x200;
17160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel32      = 0x400;
17260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel4       = 0x800;
17360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel41      = 0x1000;
17460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel42      = 0x2000;
17560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel5       = 0x4000;
17660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AVCLevel51      = 0x8000;
17760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
17860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_VIDEO_H263PROFILETYPE
17960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileBaseline             = 0x01;
18060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileH320Coding           = 0x02;
18160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileBackwardCompatible   = 0x04;
18260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileISWV2                = 0x08;
18360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileISWV3                = 0x10;
18460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileHighCompression      = 0x20;
18560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileInternet             = 0x40;
18660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileInterlace            = 0x80;
18760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263ProfileHighLatency          = 0x100;
18860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
18960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_VIDEO_H263LEVELTYPE
19060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level10      = 0x01;
19160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level20      = 0x02;
19260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level30      = 0x04;
19360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level40      = 0x08;
19460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level45      = 0x10;
19560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level50      = 0x20;
19660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level60      = 0x40;
19760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int H263Level70      = 0x80;
19860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
19960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_VIDEO_MPEG4PROFILETYPE
20060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileSimple              = 0x01;
20160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileSimpleScalable      = 0x02;
20260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileCore                = 0x04;
20360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileMain                = 0x08;
20460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileNbit                = 0x10;
20560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileScalableTexture     = 0x20;
20660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileSimpleFace          = 0x40;
20760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileSimpleFBA           = 0x80;
20860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileBasicAnimated       = 0x100;
20960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileHybrid              = 0x200;
21060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileAdvancedRealTime    = 0x400;
21160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileCoreScalable        = 0x800;
21260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileAdvancedCoding      = 0x1000;
21360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileAdvancedCore        = 0x2000;
21460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileAdvancedScalable    = 0x4000;
21560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4ProfileAdvancedSimple      = 0x8000;
21660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
21760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_VIDEO_MPEG4LEVELTYPE
21860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level0      = 0x01;
21960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level0b     = 0x02;
22060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level1      = 0x04;
22160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level2      = 0x08;
22260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level3      = 0x10;
22360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level4      = 0x20;
22460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level4a     = 0x40;
22560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int MPEG4Level5      = 0x80;
22660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
22760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        // from OMX_AUDIO_AACPROFILETYPE
22860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectMain       = 1;
22960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectLC         = 2;
23060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectSSR        = 3;
23160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectLTP        = 4;
23260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectHE         = 5;
23360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectScalable   = 6;
23460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectERLC       = 17;
23560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectLD         = 23;
23660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectHE_PS      = 29;
23760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public static final int AACObjectELD        = 39;
23860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
239e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin        // from OMX_VIDEO_VP8LEVELTYPE
240e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin        public static final int VP8Level_Version0 = 0x01;
241e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin        public static final int VP8Level_Version1 = 0x02;
242e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin        public static final int VP8Level_Version2 = 0x04;
243e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin        public static final int VP8Level_Version3 = 0x08;
244e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin
245e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin        // from OMX_VIDEO_VP8PROFILETYPE
246e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin        public static final int VP8ProfileMain = 0x01;
247e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin
248e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin
24960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        /**
25060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         * Defined in the OpenMAX IL specs, depending on the type of media
25160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         * this can be OMX_VIDEO_AVCPROFILETYPE, OMX_VIDEO_H263PROFILETYPE,
252e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin         * OMX_VIDEO_MPEG4PROFILETYPE or OMX_VIDEO_VP8PROFILETYPE.
25360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         */
25460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public int profile;
25560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
25660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        /**
25760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         * Defined in the OpenMAX IL specs, depending on the type of media
25860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         * this can be OMX_VIDEO_AVCLEVELTYPE, OMX_VIDEO_H263LEVELTYPE
259e72409fe779f620382c5bd0b82f4a32ac91d9fe4Kunter Gultekin         * OMX_VIDEO_MPEG4LEVELTYPE or OMX_VIDEO_VP8LEVELTYPE.
26060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber         */
26160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        public int level;
26260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    };
26360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
264ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber    /**
265ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber     * Enumerates the capabilities of the codec component. Since a single
266ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber     * component can support data of a variety of types, the type has to be
267ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber     * specified to yield a meaningful result.
268c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main     * @param type The MIME type to query
269ba9269a5855b6d9d581af09077caafbd45180b41Andreas Huber     */
27060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    public final CodecCapabilities getCapabilitiesForType(
27160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber            String type) {
27260d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        return MediaCodecList.getCodecCapabilities(mIndex, type);
27360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    }
27460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber}
275