我想了解如何使用MediaCodec處理Surface-to-Surface方法。在僅有ByteBuffer的方法中,解碼數據被放置在OutputBuffers中。這個非編碼數據可以手動處理,然後傳遞給Encoder的InputBuffers。解碼器的輸出表面如何傳遞到編碼器的輸入表面?
如果我們看一下Android MediaCodec CTS中使用表面到曲面方法在解碼器和編碼器之間傳遞數據的示例,我們將解碼器配置爲將解碼數據輸出到名爲outputSurface的Surface上,然後配置編碼器接收Surface上稱爲inputSurface的數據。
在本文檔中,createInputSurface和該表面在編碼器的結構的使用被描述爲這樣:
createInputSurface():請求一個表面作爲輸入使用的編碼器,在輸入緩衝區的位置。
換句話說,這在ByteBuffers聲明中的CTS示例中是可見的:編碼器沒有InputBuffers。您有:
- DecoderInputBuffers(從MediaExtractor接收視頻軌道樣本)
- DecoderOutputBuffers(輸出到解碼拉YUV幀)
- 沒有。 (嗯...輸入表面。)
- EncoderOutputBuffers(輸出摳重新編碼的東西傳遞給複用器)
相反enqueu-ING數據的編碼器InputBuffers,你有這些線代碼:
解碼器的ouputSurface內容如何傳遞到編碼器的inputSurface?幕布背後究竟發生了什麼?
從這裏開始:https://source.android.com/devices/graphics/architecture.html – fadden