簡體   English   中英

如何設置MediaCodec創建的編碼器緩沖區大小

[英]How to set encoder buffer size created by MediaCodec

我正在嘗試使用Nexus來測試Mediacodec API的編碼。 我可以看到編碼器提供的inputBuffers是119040(通過記錄inputBuffers.capacity)。 但框架的大小,即輸入,是460800.我在inputBuffer.put上收到錯誤消息, buffer overflow 所以我打算將輸入緩沖區設置為460800.我能找到的API是BufferInfo.set 但是,我找不到將此設置附加到編碼器的方法。 有人可以幫忙嗎? 謝謝!!!

encoder = MediaCodec.createByCodecName(codecInfo.getName());
ByteBuffer[] inputBuffers = encoder.getInputBuffers();
if (inputBufferIndex >= 0) {
    ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
    inputBuffer.clear();
    inputBuffer.put(input);
encoder.queueInputBuffer(inputBufferIndex, 0, input.length, 0, 0);}

我遲到了,但基於: Android MediaCodec文檔我認為更改緩沖區的正確方法是調整MAX_INPUT_SIZE,如:

int width=800;
int height=480;
encoder = MediaCodec.createByCodecName(codecInfo.getName());
format = MediaFormat.createVideoFormat ("video/avc", width, height);
format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE,655360); // 0.5MB but adjust it as you need.

您沒有設置輸入緩沖區的大小。 大小由MediaFormat確定,特別是寬度,高度和顏色格式。 如果輸入數據的大小不同,則需要將其轉換為編解碼器所期望的格式。

這並非完全無足輕重,但可行。 例如,請參閱CTS EncodeDecodeTest中的緩沖區到緩沖區測試。 測試查詢編解碼器以查看支持的顏色格式,以該格式生成幀,將它們提交給編碼器,然后對視頻進行解碼並確認出現的內容與進入的內容相同。

測試通常需要API 18(Android 4.3),但緩沖區到緩沖區代碼將在API 16中工作。它是否適用於任何給定設備是一個不同的問題 - 因為在API之前CTS測試不存在18,4.3之前的設備可能做錯了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM