2015-02-26 4 views
1

Я передаю выход MediaExtractor в декодер MediaCodec, а затем передаю выходной буфер декодера во входной буфер кодировщика. Проблема в том, что мне нужно уменьшить разрешение от выхода 1920x1080 от декодера до 1280x720 к моменту выхода из кодировщика. Я могу сделать это с помощью Surface, но я пытаюсь настроить таргетинг на Android 4.1, поэтому нужно будет достичь этого по-другому. Кто-нибудь знает, как изменить разрешение видеофайла с помощью MediaCodec, но таким образом, который совместим с 4.1?Изменение разрешения MediaCodec Android

+0

Без поверхностного ввода вам необходимо сделать это в программном обеспечении. MediaCodec несколько нестабилен до 4.3 (API 18). Если вы используете ffmpeg, возможно, через NDK, у вас будет программное обеспечение, которое работает практически на любом устройстве Android. – fadden

+0

Я надеюсь избежать ffmpeg из-за лицензирования GPL. Из того, что я видел, маловероятно, что я смогу настроить таргетинг <4.3 – user3265561

+0

FFmpeg - это LGPL 2.1 или новее, если вы не используете параметр configure для изменения лицензии, такой как '--enable-gpl'. – LordNeckbeard

ответ

1

Вы можете использовать libswscale из libav/ffmpeg или libyuv или любую другую библиотеку обработки YUV или написать свою собственную программу масштабирования - на самом деле это не очень сложно.

В принципе, когда вы подаете выходной сигнал из выходного буфера декодера в буфер ввода кодера, вы уже не можете предположить, что вы можете сделать обычную копию, потому что они могут использовать разные цветовые форматы. Чтобы быть гибким, ваш код для копирования данных уже должен иметь возможность конвертировать любой поддерживаемый формат выходного сигнала декодера в любой поддерживаемый формат входного сигнала кодировщика. На этом этапе копирования вы можете просто уменьшить данные. Тривиальный ближайший соседний масштаб очень прост в реализации; более качественное масштабирование требует немного больше работы.

Вам не нужно делать полный SW-декодирование/кодирование, вы можете просто использовать SW для настройки данных на промежуточном этапе копирования. Но, как отметил Фэдден, MediaCodec не полностью стабилен до 4.3 в любом случае, поэтому он все равно не может работать на всех устройствах.