2013-08-24 19 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