次の方法で共有


IKsPin::KsQueryMediums メソッド

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

メソッドは KsQueryMediums 、ピンでサポートされているメディアを取得します。

構文

HRESULT KsQueryMediums(
  [out] KSMULTIPLE_ITEM **ppmi
);

パラメーター

ppmi [out]

KSMULTIPLE_ITEM構造体へのポインターのアドレス。

戻り値

メソッドが成功した場合は、S_OK を返します。 失敗した場合は、 HRESULT エラー コードが返されます。

解説

このメソッドは、タスクによって割り当てられた KSMULTIPLE_ITEM 構造体を返します。その後に 0 個以上の REGPINMEDIUM 構造体が続きます。 KSMULTIPLE_ITEM構造体の Count メンバーは、REGPINMEDIUM 構造体の数を指定します。 各 REGPINMEDIUM 構造体は、ピンでサポートされるメディアを定義します。

呼び出し元は、 CoTaskMemFree 関数を使用して、返された構造体を解放する必要があります。

Ksproxy.h の前に Ks.h を含める必要があります。

次のヘルパー関数は、指定されたメディアに対してピンの照合を試みます。

HRESULT FindMatchingMedium(
    IPin *pPin, 
    REGPINMEDIUM *pMedium, 
    bool *pfMatch)
{
    IKsPin* pKsPin = NULL;
    KSMULTIPLE_ITEM *pmi;

    *pfMatch = false;
    HRESULT hr = pPin->QueryInterface(IID_IKsPin, (void **)&pKsPin);
    if (FAILED(hr)) 
        return hr;  // Pin does not support IKsPin.

    hr = pKsPin->KsQueryMediums(&pmi);
    pKsPin->Release();
    if (FAILED(hr))
        return hr;  // Pin does not support mediums.

    if (pmi->Count) 
    {
        // Use pointer arithmetic to reference the first medium structure.
        REGPINMEDIUM *pTemp = (REGPINMEDIUM*)(pmi + 1);
        for (ULONG i = 0; i < pmi->Count; i++, pTemp++) 
        {
            if (pMedium->clsMedium == pTemp->clsMedium) 
            {
                *pfMatch = true;
                break;
            }
        }
    }        
    CoTaskMemFree(pmi);
    return S_OK;
}

要件

要件
サポートされている最小のクライアント
Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows 2000 Server [デスクトップ アプリのみ]
ヘッダー
Ksproxy.h
ライブラリ
Strmiids.lib

関連項目

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

IKsPin インターフェイス

WDM クラス ドライバー フィルター