2015-02-25 4 views
0

Для одного из моих приложений, которое сохраняет предварительный просмотр камеры в буфер, я использую функцию Mediacodec.createInputSurface(), и все работает отлично, поскольку я использовал API 19 и выше. Теперь я хочу, чтобы тот же код работал для api 17 и ниже, а также для некоторых других устройств, где этого api не существует. Может кто-нибудь помочь мне, рассказывая, какую альтернативу я могу использовать?Какая альтернатива использованию createInputSurface() в API 17 и ниже

здесь кусок моего кода:

private Surface mInputSurface; 
private MediaCodec mEncoder; 
mInputSurface = mEncoder.createInputSurface(); 

Спасибо за любую помощь.

ответ

1

В API нет альтернативы. Эта функция не была введена до API 18 (JB-MR2).

Ближайшим, который вы можете получить, является частный родной класс под названием SurfaceMediaSource (source in JB-MR1), который был использован внутри с той же целью. Если вы используете Google, вы можете найти примеры людей, которые напрямую использовали libstagefright (например, this), но использование внутренних классов не рекомендуется, так как ваш код может не работать на разных устройствах или более ранних/более поздних версиях.

Pre-API 18 вы можете перемещать данные с помощью программных буферов. Для этого требуется color format conversion, так как камера и MediaCodec не имеют каких-либо цветовых форматов. Вы также должны бороться с ошибками или сломанными реализациями MediaCodec в API 16/17.

Смежные вопросы