Я пишу плагин для Unity, который декодирует и берет кадры из видеофайла с помощью Media Extractor и перекодирует в новый видеофайл. Однако кадры декодируются в массив неправильного размера (на андроид 4.2.2), так как кодек считает, высота 736, когда он на самом деле 720.Media Extractor: Декодер дает неправильную ширину на Android 4.2
for (int i = 0; i < numTracks; ++i)
{
MediaFormat format = extractor.getTrackFormat(i);
String mime = format .getString(MediaFormat.KEY_MIME);
if(mime.startsWith("video/"))
{
extractor.selectTrack(i);
//Decoder
decoder = MediaCodec.createDecoderByType(mime);
decoder.configure(format, null, null, 0);
break;
}
}
Индекс выходного буфера возвращает INFO_OUTPUT_BUFFERS_CHANGED, а затем INFO_OUTPUT_FORMAT_CHANGED , Logging это сообщает мне, что декодер думает, что есть высота 736 вместо правильного 720.
decoder.queueInputBuffer(inputBufIndex, 0, sampleSize, extractor.getSampleTime(), 0);
//Get Outputbuffer Index
int outIndex = decoder.dequeueOutputBuffer(info, 10000);
Это прекрасно работает на устройстве под управлением 4.4, проблема присутствует только на старом 4.2 устройства. У кого-нибудь есть мысли?
Я бы предположил, что что-то заполняет высоту до кратного 32. Можете ли вы показать дамп MediaFormat из logcat? Возможно, можно восстановить фактическую высоту, изучив другие поля. – fadden