Language

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 フラグは使用されません。

属性

例外

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

コーデック エラー時に発生します。

注釈

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

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

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

これが入力データの最後の部分であることを示すために (またはデコーダーが後でフラッシュされない限り、これ以上入力データが続かない)、フラグ #BUFFER_FLAG_END_OF_STREAMを指定します。

<strong>Note:</strong>android.os.Build.VERSION_CODES#Mより前は、presentationTimeUsは出力バッファーのフレーム タイムスタンプ (レンダリング) Surfaceに反映されず、結果のフレーム タイムスタンプは未定義でした。 #releaseOutputBuffer(int, long)を使用して、特定のフレーム タイムスタンプが設定されていることを確認します。 同様に、フレーム タイムスタンプはレンダリング同期のために宛先サーフェスで使用できるため、システム時刻と間違われないように、 <strong>care を使用して presentationTimeUs を正規化する必要があります。 (#releaseOutputBuffer(int, long) SurfaceView の詳細を参照してください)。</strong>

Javaドキュメント。

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

適用対象