Freigeben über


Pinanforderungen für Erfassungsfilter

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

In diesem Thema werden die Anforderungen für die Implementierung eines Ausgabepins in einem DirectShow-Erfassungsfilter beschrieben.

Pin-Name

Sie können einem Pin einen beliebigen Namen geben. Wenn der Pinname mit dem Tildezeichen (~) beginnt, rendert der Graphfilter-Manager diese Pin nicht automatisch, wenn eine Anwendung IGraphBuilder::RenderFile aufruft. Wenn der Filter beispielsweise über einen Aufnahmenadel und eine Vorschau-Pin verfügt, können Sie sie "~Capture" bzw. "Vorschau" nennen. Wenn eine Anwendung diesen Filter in einem Diagramm rendert, stellt der Vorschaupin eine Verbindung mit dem Standardrenderer her, und es wird keine Verbindung mit dem Aufnahmepin hergestellt. Dies ist ein vernünftiges Standardverhalten. Dies kann auch für Pins gelten, die Informationsdaten bereitstellen, die nicht gerendert werden sollen, oder Für Pins, für die benutzerdefinierte Eigenschaften festgelegt werden müssen. Beachten Sie, dass Pins mit dem Tildepräfix (~) weiterhin manuell von der Anwendung verbunden werden können.

Kategorie anheften

Ein Erfassungsfilter verfügt immer über einen Aufnahmenadel und kann über eine Vorschau-Pin verfügen. Einige Erfassungsfilter verfügen möglicherweise über andere Ausgabepins, um andere Datentypen bereitzustellen, z. B. Steuerungsinformationen. Jeder Ausgabepin muss die IKsPropertySet-Schnittstelle verfügbar machen. Anwendungen verwenden diese Schnittstelle, um die Pinkategorie zu bestimmen. Der Pin gibt in der Regel entweder PIN_CATEGORY_CAPTURE oder PIN_CATEGORY_PREVIEW zurück. Weitere Informationen finden Sie unter Anheften von Eigenschaften.

Im folgenden Beispiel wird gezeigt, wie IKsPropertySet implementiert wird, um die Pinkategorie für einen Erfassungspin zurückzugeben:

// Set: Cannot set any properties.
HRESULT CMyCapturePin::Set(REFGUID guidPropSet, DWORD dwID,
    void *pInstanceData, DWORD cbInstanceData, void *pPropData, 
    DWORD cbPropData)
{
    return E_NOTIMPL;
}

// Get: Return the pin category (our only property). 
HRESULT CMyCapturePin::Get(
    REFGUID guidPropSet,   // Which property set.
    DWORD dwPropID,        // Which property in that set.
    void *pInstanceData,   // Instance data (ignore).
    DWORD cbInstanceData,  // Size of the instance data (ignore).
    void *pPropData,       // Buffer to receive the property data.
    DWORD cbPropData,      // Size of the buffer.
    DWORD *pcbReturned     // Return the size of the property.
)
{
    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)  // Caller just wants to know the size.
        return S_OK;
    if (cbPropData < sizeof(GUID)) // The buffer is too small.
        return E_UNEXPECTED;
    *(GUID *)pPropData = PIN_CATEGORY_CAPTURE;
    return S_OK;
}

// QuerySupported: Query whether the pin supports the specified property.
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)
        // We support getting this property, but not setting it.
        *pTypeSupport = KSPROPERTY_SUPPORT_GET; 
    return S_OK;
}

Schreiben von Erfassungsfiltern