2013-08-24 61 views
4

我正在使用Android MediaCodec库来解码存储在文件系统上的视频。我得到一个看起来合法的输出缓冲区(正确的bufferinfo.offsetsize)。它的格式似乎是256(这是JPEG)。我试图用BitmapFactory.decodeByteArray解码它,但结果是null解码来自MediaCodec的输出缓冲区

有谁知道确定输出缓冲区格式的正确方法吗?什么是开始解码输出字节数组的正确方法?

回答

2

MediaCodec颜色格式由MediaCodecInfo.CodecCapabilities类定义。 256在内部使用,通常并不意味着您有一个JPEG数据的缓冲区。这里的混淆可能是因为你正在查看ImageFormat类中的常量,但这些仅适用于相机输出。 (例如,ImageFormat.NV16是YCbCr格式,而COLOR_Format32bitARGB8888是RGB,但两者都具有数字值16)

,可以发现hereMediaCodec使用的一些例子,包括链接到锻炼MediaCodec CTS测试。在某些设备上,您将无法解码来自ByteBuffer输出的数据,而必须解码为Surface

+0

我其实已经想出了一点点。 MediaCodec有一个名为“输出格式改变”的“事件”。在这里,您可以访问应具有输出缓冲区颜色格式的新MediaFormat对象。在我的情况下,它不是256(JPEG数据)。它来自MediaCodecInfo.CodecCapabilities类 - http://developer.android.com/reference/android/media/MediaCodecInfo.CodecCapabilities.html#COLOR_TI_FormatYUV420PackedSemiPlanar –

+1

是的。如果你看看我链接的页面上的EncodeDecodeTest.java,它将获得第619行的格式,并将它传递给checkFrame()。在第966行,颜色格式与已知格式进行比较以决定如何进行。 – fadden