Несовместимое качество видео при кодировании кадров предварительного просмотра камеры с помощью MediaCodec на Xperia Z1

Я кодируюNV21 кадры из предварительного просмотра камеры. По какой-то причине схема, которая работает нормально на других устройствах, работает некорректно наSony Xperia Z1 сAndroid 4.3, Он отправляет обратно закодированные кадры с неправильным (низким) качеством. '

MediaCodecформат сCOLOR_FormatYUV420SemiPlanar которыйNV12 (Я конвертируюNV21 вNV12 путем замены компонентов U и V). Выходные буферы отправлены мнеMediaCodec с очень низким размером, который нет соответствует разрешению (1280x720) и битрейт (1000000) Я использую. Первые кадры идут с хорошим качеством, но потомзначительно снижается:

int encoderStatus = mMediaCodec.dequeueOutputBuffer(mBufferInfo, TIMEOUT_USEC);
// a few encoderStatus checks skipped
ByteBuffer encodedData = outputBuffers[encoderStatus];
Log.i(Constants.TAG, "Buffer size " + mBufferInfo.size);

Который дает мне следующий журнал на Xperia Z1:

Buffer size 26
Buffer size 52172
Buffer size 23650
Buffer size 14394
Buffer size 3591
Buffer size 1849
Buffer size 3908

...

Buffer size 1043
Buffer size 248
Buffer size 836
Buffer size 518
Buffer size 1112

Пример журнала отSony Xperia ZR на котором это работает правильно:

Buffer size 21
Buffer size 51048
Buffer size 21063
Buffer size 24228
Buffer size 28040
...
Buffer size 44959
Buffer size 44972
Buffer size 44957
Buffer size 45004
Buffer size 44999
Buffer size 44957

Любой совет будет принят во внимание.

Ответы на вопрос(1)

Ваш ответ на вопрос