的Android MediaCodec编码器 - 三星设备怪异的结果

问题描述:

编辑:的Android MediaCodec编码器 - 三星设备怪异的结果

看来,问题是这种设备不需要16个尺寸的多......但32的东西多的是,我仍然不知道如何以确定什么量化为有问题的设备。这看起来似乎使用qcom(我已经看到在Android 4.X上有问题,但这是Android 5.1.1)。


我在我的Android应用程序中编码视频。我使用Android MediaCodec来完成这项工作,将每帧的RGB转换为YUV并传递像素。

我使用的代码已经存在了一段时间,并且适用于我遇到过的任何设备。

一位用户问我一个错误报告,他们的MP4出奇怪的。该设备是一个三星T337A(Galaxy Tab 4)。

这里有什么MP4出口样子:

enter image description here

注 - 不管什么奇怪的原因,它不会在所有分辨率下发生的。它确定发生在768x432和1280x720,但不会发生在640x352例如(我的应用程序确保所有分辨率默认可以被16整除)。

Nexus 5X(它使用相同的半平面YUV格式)输出在所有分辨率下工作。

所以这是这个设备的东西,也许其他设备,我不知道?


我看所有输出,和它看起来正常和相同于的Nexus 5X我上面提到的(工作的时间的100%)。

正在使用的MediaCodecInfo是OMX.qcom.video.encoder.avc,使用的颜色格式是2135033992(它是COLOR_FormatYUV420Flexible)。所以基本上,没有什么奇怪的。代码有点膨胀,我会在必要时发布,但只是寻找为什么发生这种情况的一般想法。我会理解它是否更常见,但相同的代码适用于大量其他设​​备,所以有些奇怪的事情正在进行...

确保您使用正确的步幅和缓冲区偏移值

+0

嗯,我抓住了'Image'对象的'Planes []'被渲染到'inputImage.getPlanes()',然后抓住每个单独的y,u,v平面。然后,我从u平面'平面[1] .getPixelStride'获取步幅,它是1或2(平面或半平面),并且两者都被考虑并准确地适用于所有类型的设备。这个有2个步幅,但不能像其他的一样工作?但是,如果你没有详细说明,那么**缓冲区偏移值**是什么意思?可能是我需要的,谢谢! – FTLRalph

+0

似乎问题是这个设备不需要16维的功率......但是32的功率。事情是,我仍然不知道如何确定什么量化为有问题的设备。这看起来似乎使用qcom(我已经看到在Android 4.X上有问题,但这是Android 5.1.1)。 – FTLRalph