MediaCodec.QueueInputBuffer メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定したインデックス位置にある入力バッファーの範囲を入力した後、それをコンポーネントに送信します。
[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>
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。