MediaCodec.QueueInputBuffer メソッド

定義

指定したインデックスにある入力バッファーの範囲を入力した後、コンポーネントに送信します。

[Android.Runtime.Register("queueInputBuffer", "(IIIJI)V", "")]
public void QueueInputBuffer (int index, int offset, int size, long presentationTimeUs, Android.Media.MediaCodecBufferFlags flags);
[<Android.Runtime.Register("queueInputBuffer", "(IIIJI)V", "")>]
member this.QueueInputBuffer : int * int * int * int64 * Android.Media.MediaCodecBufferFlags -> unit

パラメーター

index
Int32

への呼び出し #dequeueInputBufferで以前に返されたクライアント所有の入力バッファーのインデックス。

offset
Int32

データが開始される入力バッファーへのバイト オフセット。

size
Int32

有効な入力データのバイト数。

presentationTimeUs
Int64

このバッファーのプレゼンテーション タイムスタンプ (マイクロ秒単位)。 これは通常、このバッファーを表示 (レンダリング) するメディア時間です。 出力サーフェスを使用すると、フレームの として SurfaceTexture#getTimestamp timestamp 伝達されます (ナノ秒への変換後)。

flags
MediaCodecBufferFlags

フラグ #BUFFER_FLAG_CODEC_CONFIG#BUFFER_FLAG_END_OF_STREAMのビットマスク。 禁止されていませんが、ほとんどのコーデックでは入力バッファーに フラグが #BUFFER_FLAG_KEY_FRAME 使用されません。

属性

例外

が実行中の状態でない場合は 。

コーデック エラーが発生した場合。

注釈

指定したインデックスにある入力バッファーの範囲を入力した後、コンポーネントに送信します。 入力バッファーをコーデックにキューに入れると、後で戻り値またはコールバックに応答して によって#getInputBuffer取得されるまで、入力バッファーを#dequeueInputBufferCallback#onInputBufferAvailable使用することはできません。

多くのデコーダーでは、実際の圧縮データ ストリームの前に "コーデック固有のデータ" が必要です。つまり、vorbis オーディオの場合は、AVC ビデオまたはコード テーブルの場合に PPS/SPS などのコーデックを初期化するために使用されるセットアップ データが必要です。 クラス android.media.MediaExtractor は、"csd-0"、"csd-1" という名前のエントリで、返されるトラック形式の一部としてコーデック固有のデータを提供します。

これらのバッファーは、 フラグ #BUFFER_FLAG_CODEC_CONFIGを指定して、 の直後または#flush直後#startに送信できます。 ただし、これらのキーを含む コーデックを MediaFormat 構成すると、開始直後に MediaCodec によって自動的に送信されます。 そのため、フラグの #BUFFER_FLAG_CODEC_CONFIG 使用はお勧めしません。上級ユーザーにのみお勧めします。

これが入力データの最後の部分であることを示すには (デコーダーが後でフラッシュされない限り、これ以上入力データが続かない)、 フラグ #BUFFER_FLAG_END_OF_STREAMを指定します。 <p class=note><厳密な>Note:</strong> の前にandroid.os.Build.VERSION_CODES#MpresentationTimeUs、 が (レンダリングされた) Surface 出力バッファーのフレーム タイムスタンプに反映されず、結果のフレーム タイムスタンプが未定義でした。 特定のフレーム タイムスタンプが設定されていることを確認するには、 を使用 #releaseOutputBuffer(int, long) します。 同様に、フレーム タイムスタンプはレンダリング同期のために変換先サーフェスで使用できるため、 <システム時刻と間違えないように presentationTimeUs を正規化するには、細心>の注意を払う必要があります。 (#releaseOutputBuffer(int, long) SurfaceView の詳細を参照してください)。</強い>

android.media.MediaCodec.queueInputBuffer(int, int, int, long, int)Java ドキュメント。

このページの一部は、によって作成および共有された作業に基づく変更であり、に記載されている条件に従って使用されます。

適用対象