15a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber/*
25a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber * Copyright (C) 2012 The Android Open Source Project
35a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber *
45a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
55a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber * you may not use this file except in compliance with the License.
65a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber * You may obtain a copy of the License at
75a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber *
85a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
95a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber *
105a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber * Unless required by applicable law or agreed to in writing, software
115a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
125a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber * See the License for the specific language governing permissions and
145a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber * limitations under the License.
155a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber */
165a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber
175a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huberpackage android.media;
185a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber
1960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huberimport android.media.MediaCodecInfo;
2060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber
215a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber/**
22c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main * Allows you to enumerate available codecs, each specified as a {@link MediaCodecInfo} object,
235a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber * find a codec supporting a given format and query the capabilities
245a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber * of a given codec.
25c06bb7f5b9c6be9d121e3f5b4ee7cd31c99f6879Scott Main * <p>See {@link MediaCodecInfo} for sample usage.
2660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber */
275a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huberfinal public class MediaCodecList {
2860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    /**
2960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber     * Count the number of available codecs.
3060d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber     */
3160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    public static native final int getCodecCount();
3207ea426e3ae8915ca6bf67135f523f42cd920af0Andreas Huber
3360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    public static final MediaCodecInfo getCodecInfoAt(int index) {
3460d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        if (index < 0 || index > getCodecCount()) {
3560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber            throw new IllegalArgumentException();
3660d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        }
3707ea426e3ae8915ca6bf67135f523f42cd920af0Andreas Huber
3860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        return new MediaCodecInfo(index);
3960d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    }
405a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber
4160d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    /* package private */ static native final String getCodecName(int index);
4207ea426e3ae8915ca6bf67135f523f42cd920af0Andreas Huber
4360d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    /* package private */ static native final boolean isEncoder(int index);
445a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber
4560d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    /* package private */ static native final String[] getSupportedTypes(int index);
4607ea426e3ae8915ca6bf67135f523f42cd920af0Andreas Huber
4760d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber    /* package private */ static native final MediaCodecInfo.CodecCapabilities
4860d610bf103379277a4b29a7ead4f013f6128e4eAndreas Huber        getCodecCapabilities(int index, String type);
495a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber
5093077a2902a74256b7eb4795e1ef92bbc5c50f10Martin Storsjo    /* package private */ static native final int findCodecByName(String codec);
5193077a2902a74256b7eb4795e1ef92bbc5c50f10Martin Storsjo
525a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber    private static native final void native_init();
535a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber
545a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber    private MediaCodecList() {}
555a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber
565a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber    static {
575a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber        System.loadLibrary("media_jni");
585a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber        native_init();
595a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber    }
605a04bf395514a9342dd26af519b88f4b3e309eb9Andreas Huber}
61