Как Android MediaCodec создает декодер? - PullRequest
0 голосов
/ 10 мая 2019

Я заметил, что java/android/media имеет метод с именем createDecoderByType(), который должен возвращать объект MediaCodec. Однако, когда я смотрю на исходный код MediaCodec.java в GoogleGit , я не могу понять, как генерируется настоящий декодер. Вот код для этого метода:

    public static MediaCodec createDecoderByType(String type) {
    return new MediaCodec(type, true /* nameIsType */, false /* encoder */);
}

Затем, когда я смотрю на конструктор, чтобы увидеть, что возвращается, вот что я вижу:

    private MediaCodec(
        String name, boolean nameIsType, boolean encoder) {
    native_setup(name, nameIsType, encoder);
}

Хорошо, отлично. Давайте посмотрим на native_setup(). Вот определение:

    private native final void native_setup(
        String name, boolean nameIsType, boolean encoder);

У этой функции нет тела!

Сначала я предположил, что это означает, что метод будет определен в дочернем классе. Но я вижу, что этот метод вызывается непосредственно на MediaCodec в другом действующем исходном коде.

Итак, мой вопрос: есть ли способ отследить и увидеть, как Android создает декодер заданного типа в зависимости от среды и параметров? Кажется, я зашел в тупик, и никакое количество Google не дает мне никаких полезных результатов.

1 Ответ

1 голос
/ 10 мая 2019

Только что нашел ответ на этот вопрос через минуту после того, как я его опубликовал ... конечно.Проблема связана с ключевым словом native.От GeeksforGeeks:

К методу применяется собственное ключевое слово, указывающее, что метод реализован в собственном коде с использованием JNI (собственный интерфейс Java).

Это означает, что он может быть написан на другом языке, таком как C или C ++, или вызывать аппаратные средства.Код MediaCodec JNI, который я искал, это здесь .

...