媒体提取器:Android 4.2上解码器给出的宽度错误

媒体提取器:Android 4.2上解码器给出的宽度错误,android,decoding,android-mediacodec,mediaextractor,Android,Decoding,Android Mediacodec,Mediaextractor,我正在为Unity编写一个插件,它使用媒体提取器解码并获取视频文件中的帧,然后重新编码为新的视频文件。然而,这些帧被解码成了错误大小的数组(在android 4.2.2上),因为编解码器认为高度是736,而实际上是720 for (int i = 0; i < numTracks; ++i) { MediaFormat format = extractor.getTrackFormat(i); String mime = format .getS

我正在为Unity编写一个插件,它使用媒体提取器解码并获取视频文件中的帧,然后重新编码为新的视频文件。然而,这些帧被解码成了错误大小的数组(在android 4.2.2上),因为编解码器认为高度是736,而实际上是720

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;
        }
     }

这在运行4.4的设备上运行良好,但问题仅出现在较旧的4.2设备上。有人有什么想法吗?

请记住,您还需要检查MediaFormat中的裁剪字段,高度字段是输出缓冲区的完整高度,包括可能的填充。例如,请参见-中的checkFrame函数,您将获得实际内容高度为
format.getInteger(“裁剪底部”)-format.getInteger(“裁剪顶部”)+1

,我想可能是有什么东西将高度填充到了32的倍数。您能从logcat显示MediaFormat转储吗?通过检查其他字段,可以恢复实际高度。
            decoder.queueInputBuffer(inputBufIndex, 0, sampleSize, extractor.getSampleTime(), 0);               
            //Get Outputbuffer Index
            int outIndex = decoder.dequeueOutputBuffer(info, 10000);