Я хочу кодировать с помощью MediaCodec, установив цветовой формат COLOR_FormatYUV420Flexible
. Мой входной буфер - yuv420p. Когда я ввожу буфер следующим образом:
int inputBufferIndex = mEncoder.dequeueInputBuffer(-1);
mCurrentBufferIndex = inputBufferIndex;
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
//if(VERBOSE)
Log.i(TAG,"pos:"+inputBuffer.position()+"\tlimit:"+inputBuffer.limit());
inputBuffer.clear();
return inputBuffer;
}
Но некоторые устройства получают неправильный цвет. Итак, я пробую это:
int inputBufferIndex = mEncoder.dequeueInputBuffer(-1);
mCurrentBufferIndex = inputBufferIndex;
if (inputBufferIndex >= 0) {
Image img = mEncoder.getInputImage(inputBufferIndex);
if(img==null)
return null;
//mCurrentInputPlanes = img.getPlanes();
ByteBuffer buffers[]={img.getPlanes()[0].getBuffer(),
img.getPlanes()[1].getBuffer(),
img.getPlanes()[2].getBuffer()};
Я заполняю буфер для каналов YUV. Он работает на некоторых устройствах. Но moto X pro и huawei P7 получают null при вызове getInputImage. В документации говорится, что изображение не содержит необработанных данных. Но также упоминается, что COLOR_FormatYUV420Flexible
поддерживается, начиная с API 21. Итак, как мне это исправить.