2013-03-04 47 views
5

Nexusを使用してMediacodec APIでエンコードをテストしようとしています。エンコーダによって提供されるinputBuffersが(inputBuffers.capacityを記録することによって)119040であることがわかります。しかし、フレームのサイズ、すなわち入力は460800です。inputBuffer.putにはエラーメッセージbuffer overflowがあります。だから私は入力バッファを460800に設定しようとしていました。私が見つけたAPIはBufferInfo.setです。しかし、私はこの設定をエンコーダに取り付ける方法を見つけることができません。助けてもらえますか?ありがとう!!!MediaCodecで作成されたエンコーダバッファサイズを設定する方法

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);} 

答えて

2

入力バッファのサイズは設定しません。サイズは、MediaFormatによって決定されます。具体的には、幅、高さ、および色の形式です。入力データのサイズが異なる場合は、コーデックが予期している形式に変換する必要があります。

これは完全に自明ではありませんが、実行可能です。例については、CTS EncodeDecodeTestのバッファー間テストを参照してください。このテストでは、サポートされているカラーフォーマットを調べるためにコーデックに照会し、そのフォーマットでフレームを生成し、エンコーダにそれらを提出し、ビデオをデコードし、何が入ったものと同じであることを確認します。

一般的なテストAPI 18(Android 4.3)が必要ですが、バッファからバッファへのコードはAPI 16で動作します。どのデバイスでも動作するかどうかは異なる質問です.CTSテストはAPI 18まで存在しないため、この問題を回避するには4.3以前のデバイスが可能です。

3

私はパーティーに遅れてんだけど、に基づいて:それは私の作品

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. 
+0

:私はバッファを変更する正しい方法はMAX_INPUT_SIZE、のようなものを調整することになると思うAndroid MediaCodec Documentation! –

関連する問題