Как MediaCodec находит кодек внутри фреймворка в Android?

Я пытаюсь понять, как MediaCodec используется для аппаратного декодирования.

Мои знания в области Android очень ограничены.

Вот мои выводы:

Существует XML-файл, который представляет детали кодека в системе Android.

 device/ti/omap3evm/media_codecs.xml for an example. 

Это означает, что если мы создадим кодек из Java-приложения с Media Codec

MediaCodec codec = MediaCodec.createDecoderByType(type);

Нужно выяснить соответствующий кодер с помощью файла xml.

Что я делаю?

Я пытаюсь выяснить, какая часть кода читает xml, и найти кодек, основанный на заданном типе.

1) прикладной уровень:

   MediaCodec codec = MediaCodec.createDecoderByType(type);

2) MediaCodec.java -> [рамки / база / медиа / Java / Android / СМИ / MediaCodec.java ]

     public static MediaCodec createDecoderByType(String type) {

    return new MediaCodec(type, true /* nameIsType */, false /* encoder */);
}

3)

private MediaCodec(
        String name, boolean nameIsType, boolean encoder) {
    native_setup(name, nameIsType, encoder);    --> JNI Call.
}

4) Реализация JNI -> [рамки / база / СМИ / JNI / android_media_MediaCodec.cpp ]

static void android_media_MediaCodec_native_setup (..) {
        .......
    const char *tmp = env->GetStringUTFChars(name, NULL);
    sp<JMediaCodec> codec = new JMediaCodec(env, thiz, tmp, nameIsType, encoder);     ---> Here
}

из frameworks / base / media / jni / android_media_MediaCodec.cpp

    JMediaCodec::JMediaCodec( ..) { 
         .... 
          mCodec = MediaCodec::CreateByType(mLooper, name, encoder); //Call goes to libstagefright 
          .... }


    sp<MediaCodec> MediaCodec::CreateByType(
            const sp<ALooper> &looper, const char *mime, bool encoder) {
        sp<MediaCodec> codec = new MediaCodec(looper);
        if (codec->init(mime, true /* nameIsType */, encoder) != OK) {  --> HERE.
            return NULL;
        }    
    return codec;
   }



    status_t MediaCodec::init(const char *name, bool nameIsType, bool encoder) {
           // MediaCodec
    }

Я поражен этим потоком. Если кто-то укажет, как продвигаться вперед, это очень поможет.

Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос