次の方法で共有


IAsyncReader::Request メソッド (strmif.h)

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

メソッドは Request 、データの非同期要求をキューに入れます。

構文

HRESULT Request(
       IMediaSample *pSample,
  [in] DWORD_PTR    dwUser
);

パラメーター

pSample

呼び出し元によって提供されるメディア サンプルの IMediaSample インターフェイスへのポインター。

[in] dwUser

要求が完了したときに返される任意の値を指定します。

戻り値

HRESULT 値を返します。 使用可能な値は次のとおりです。

リターン コード 説明
S_OK
正常終了しました。
VFW_E_BADALIGN
バッファーが正しく配置されていません。
VFW_E_SAMPLE_TIME_NOT_SET
サンプルにタイム スタンプが設定されていませんでした。
VFW_E_WRONG_STATE
ピンがフラッシュ中です。
HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)
要求された開始位置は、ファイルの末尾を超えました。
E_OUTOFMEMORY
メモリ不足です。

注釈

このメソッドを呼び出す前に、ピンのアロケーターからメディア サンプルを取得します。 要求しているバイト オフセット (first と last を含む) に 10,000,000 を乗算したタイム スタンプをサンプルに設定します。 バイト オフセットは、ストリームの先頭に対する相対位置です。

開始位置と停止位置は、ピンが接続されたときに決定されたアラインメントと一致する必要があります。 それ以外の場合、メソッドはVFW_E_BADALIGNを返す可能性があります。 合意された配置がストリームの実際の配置よりも粗い場合、停止位置が実際の継続時間を超える可能性があります。 その場合、メソッドは停止位置を実際の配置に丸めます。

技術的には COM 規則違反ですが、呼び出し元はサンプルに未処理の参照カウントを残す必要があります。 メソッドは RequestAddRef または Release を呼び出さないので、サンプルをアクティブに保つために参照カウントが必要です。

メソッドは、要求が完了する前に を返します。 IAsyncReader::WaitForNext メソッドを呼び出して、要求を待機します。 要求が保留中の間は、元のメディア サンプルを再利用しないでください。 WaitForNext メソッドは、元のサンプルへのポインターを返します。 要求が成功した場合、サンプルには要求されたデータが含まれます。 WaitForNext メソッドは、dwUser パラメーターで指定された値も返します。 呼び出し元は、この値を使用してサンプルを識別できます。

次の例は、入力ピンで要求をキューに入れるヘルパー関数を示しています。

C++
CMyPin::QueueSample(long cbFirst, long cbLast, DWORD_PTR dwuser)
{
    IMediaSample* pSample = NULL;
    HRESULT hr = m_pAlloc->GetBuffer(&pSample, NULL, NULL, 0);
    if (FAILED(hr)) 
    { 
        return hr; 
    }

    LONGLONG tStart = cbFirst * 10000000, tStop = cbLast * 10000000;
    hr = pSample->SetTime(&tStart, &tStop);
    if (SUCCEEDED(hr))
    {
        hr = m_pReader->Request(pSample, dwuser);
    }

    if (FAILED(hr))
    {
        pSample->Release();
    }
    return hr;
}

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー strmif.h (Dshow.h を含む)
Library Strmiids.lib

こちらもご覧ください

エラーコードと成功コード

IAsyncReader インターフェイス