CSource-Klasse
[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.]
Die CSource-Klasse ist eine Basisklasse zum Implementieren von Quellfiltern. Ein von CSource abgeleiteter Filter enthält einen oder mehrere Ausgabepins, die von der CSourceStream-Klasse abgeleitet sind. Jeder Ausgabepin erstellt einen Workerthread, der Medienbeispiele nach unten pusht.
Hinweis
Die CSource-Klasse wurde entwickelt, um das Pushmodell für den Datenfluss zu unterstützen. Diese Klasse wird nicht zum Erstellen von Dateilesefiltern empfohlen. Dateileser sollten das Pullmodell über die IAsyncReader-Schnittstelle unterstützen. Weitere Informationen finden Sie unter Datenfluss für Filterentwickler.
Geschützte Membervariablen | BESCHREIBUNG |
---|---|
m_iPins | Anzahl der Pins auf dem Filter. |
m_paStreams | Array von Pins. |
m_cStateLock | Kritisches Abschnittsobjekt, das den Filterzustand schützt. |
Öffentliche Methoden | BESCHREIBUNG |
CSource | Konstruktormethode. |
~CSource | Destruktormethode. |
GetPinCount | Ruft die Anzahl der Pins für den Filter ab. |
GetPin | Ruft eine Stecknadel ab. |
pStateLock | Ruft einen Zeiger auf das kritische Abschnittsobjekt des Filters ab. |
AddPin | Fügt dem Filter einen neuen Ausgabestift hinzu. |
RemovePin | Entfernt eine angegebene Pin aus dem Filter. |
FindPinNumber | Ruft die Nummer eines angegebenen Pins im Filter ab. |
IBaseFilter-Methoden | BESCHREIBUNG |
FindPin | Ruft die Pin mit dem angegebenen Bezeichner ab. |
Gehen Sie wie folgt vor, um einen Ausgabepin zu implementieren:
- Leiten Sie eine Klasse von CSourceStream ab.
- Überschreiben Sie die CSourceStream::GetMediaType-Methode und möglicherweise die CSourceStream::CheckMediaType-Methode , die Medientypen für die Pin überprüfen.
- Implementieren Sie die CBaseOutputPin::D ecideBufferSize-Methode , die die Pufferanforderungen des Pins zurückgibt.
- Implementieren Sie die CSourceStream::FillBuffer-Methode , die einen Medienbeispielpuffer mit Daten auffüllt.
Gehen Sie wie folgt vor, um den Filter zu implementieren:
- Leiten Sie eine Klasse von CSource ab.
- Erstellen Sie im Konstruktor einen oder mehrere Ausgabepins, die von CSourceStream abgeleitet sind. Die Pins fügen sich in ihren Konstruktormethoden automatisch dem Filter hinzu und entfernen sich selbst in ihren Destruktormethoden.
Um den Filterstatus zwischen mehreren Threads zu synchronisieren, rufen Sie die CSource::p StateLock-Methode auf. Diese Methode gibt einen Zeiger auf den abschnitt filter-state critical zurück. Verwenden Sie die CAutoLock-Klasse , um den kritischen Abschnitt zu speichern. Über eine Pin können Sie wie folgt über die CBasePin::m_pFilter-Membervariable des Pins auf pStateLock zugreifen:
CAutoLock lock(m_pFilter->pStateLock());
Anforderung | Wert |
---|---|
Header |
|
Bibliothek |
|