Я хочу кодировать с помощью 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. Так как я должен это исправить.