Share via


キャプチャ フィルタのピン要件

ピン名

ピンには任意の名前を付けられる。ピンの名前がチルダ (~) 文字で始まる場合、アプリケーションが IGraphBuilder::RenderFile を呼び出しても、フィルタ グラフはそのピンに対して自動的なレンダリングを行わない。たとえば、フィルタにキャプチャ ピンとプレビュー ピンがあり、それぞれ "~ Capture" と "Preview" という名前を付けたとする。アプリケーションがグラフでそのフィルタをレンダリングする場合、プレビュー ピンはデフォルト レンダラに接続し、キャプチャ ピンには何も接続しない。これは適切なデフォルト動作である。また、レンダリングする予定がない情報提供用データを送信するピン、またはカスタム プロパティ セットを必要とするピンにも適用できる。チルダ (~) プレフィックスが付いたピンはアプリケーションで手動接続もできる点に注意すること。

ピン カテゴリ

キャプチャ フィルタには常にキャプチャ ピンがあり、場合によってはプレビュー ピンもある。一部のキャプチャ フィルタは、制御情報など他のタイプのデータを送信するため、他の出力ピンを持つことがある。各出力ピンは IKsPropertySet インターフェイスを公開する必要がある。アプリケーションはこのインターフェイスを使って、ピン カテゴリを判別する。通常、ピンは PIN_CATEGORY_CAPTURE または PIN_CATEGORY_PREVIEW を返す。詳細については、「ピン プロパティ セット」を参照すること。

次の例は、キャプチャ ピンのピン カテゴリを返す IKsPropertySet を実装する方法を示している。

// Set: プロパティを設定できない。
HRESULT CMyCapturePin::Set(REFGUID guidPropSet, DWORD dwID,
    void *pInstanceData, DWORD cbInstanceData, void *pPropData, 
    DWORD cbPropData)
{
    return E_NOTIMPL;
}

// Get: ピン カテゴリを返す (唯一のプロパティ)。 
HRESULT CMyCapturePin::Get(
   REFGUID guidPropSet,    // どのプロパティ セットか。
    DWORD dwPropID,        // そのセットの中でどのプロパティか。
    void *pInstanceData,   // インスタンス データ (無視)。
    DWORD cbInstanceData,  // インスタンス データのサイズ (無視)。
    void *pPropData,       // プロパティ データを受け取るバッファ。
    DWORD cbPropData,      // バッファのサイズ。
    DWORD *pcbReturned     // プロパティのサイズを返す。
)
{
    if (guidPropSet != AMPROPSETID_Pin) 
        return E_PROP_SET_UNSUPPORTED;
    if (dwPropID != AMPROPERTY_PIN_CATEGORY)
        return E_PROP_ID_UNSUPPORTED;
    if (pPropData == NULL && pcbReturned == NULL)
        return E_POINTER;
    if (pcbReturned)
        *pcbReturned = sizeof(GUID);
    if (pPropData == NULL)  // 呼び出し元はサイズだけ知りたい。
        return S_OK;
    if (cbPropData < sizeof(GUID)) // バッファが小さすぎる。
        return E_UNEXPECTED;
    *(GUID *)pPropData = PIN_CATEGORY_CAPTURE;
    return S_OK;
}

// QuerySupported: 指定されたプロパティをピンがサポートしているかどうか問い合わせる。
HRESULT CMyCapturePin::QuerySupported(REFGUID guidPropSet, DWORD dwPropID,
    DWORD *pTypeSupport)
{
    if (guidPropSet != AMPROPSETID_Pin)
        return E_PROP_SET_UNSUPPORTED;
    if (dwPropID != AMPROPERTY_PIN_CATEGORY)
        return E_PROP_ID_UNSUPPORTED;
    if (pTypeSupport)
        // このプロパティの取得はサポートしているが、設定はサポートしていない。
        *pTypeSupport = KSPROPERTY_SUPPORT_GET; 
    return S_OK;
}