7

Nexus を使用して、Mediacodec API でエンコードをテストしようとしています。エンコーダーによって提供される inputBuffers が 119040 であることを確認できます (inputBuffers.capacity のログによる)。しかし、フレームのサイズ、つまり入力は 460800 です。 inputBuffer.putwith でエラー メッセージが表示されました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);}
4

2 に答える 2

2

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

これは完全に簡単ではありませんが、実行可能です。例については、CTS EncodeDecodeTestの buffer-to-buffer テストを参照してください。このテストでは、コーデックにクエリを実行して、サポートされている色形式を確認し、その形式でフレームを生成してエンコーダーに送信し、ビデオをデコードして、出力されるものが入力されたものと同じであることを確認します。

テストには通常、API 18 (Android 4.3) が必要ですが、バッファ間コードは API 16 で動作します。CTS テストは API まで存在しなかったため、特定のデバイスで動作するかどうかは別の問題です。 18.4.3 より前のデバイスでは、これが間違っている可能性があります。

于 2013-07-24T22:52:15.707 に答える