Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[Das dieser Seite zugeordnete Feature DirectShow-ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngineund Audio/Video Capture in Media Foundationersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code MediaPlayer-, IMFMediaEngine und Audio-/Videoaufnahme in Media Foundation anstelle von DirectShow-verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, um die neuen APIs zu verwenden, falls möglich umgeschrieben werden.]
Die IAMStreamConfig::GetStreamCaps--Methode stellt Videofunktionen in einer Reihe von Paaren von AM_MEDIA_TYPE und VIDEO_STREAM_CONFIG_CAPS Strukturen dar. Sie können dies verwenden, um alle Formate und Auflösungen verfügbar zu machen, die auf einem Pin unterstützt werden, wie unten beschrieben.
Audiobezogene Beispiele für GetStreamCaps-finden Sie unter Audiofunktionen.
Angenommen, Ihre Aufnahmekarte unterstützt das JPEG-Format bei allen Auflösungen zwischen 160 x 120 Pixel und 320 x 240 Pixel einschließlich. Der Unterschied zwischen unterstützten Auflösungen besteht in diesem Fall darin, dass Sie ein Pixel von jeder unterstützten Auflösung addieren oder subtrahieren, um die nächste unterstützte Auflösung zu erhalten. Dieser Unterschied bei unterstützten Auflösungen wird als Granularität bezeichnet.
Angenommen, Ihre Karte unterstützt auch die Größe 640 x 480. Im Folgenden wird diese einzelne Auflösung und der oben genannte Auflösungsbereich veranschaulicht (alle Größen zwischen 160 x 120 Pixel und 320 x 240 Pixel).
Angenommen, es unterstützt 24-Bit-Farb-RGB-Format bei Auflösungen zwischen 160 x 120 und 320 x 240, aber mit einer Granularität von 8. Die folgende Abbildung zeigt einige der gültigen Größen in diesem Fall.
Um es auf eine andere Weise zu platzieren und weitere Auflösungen aufzulisten, gehören alle zur Liste der gültigen Auflösungen.
- 160 x 120
- 168 x 120
- 168 x 128
- 176 x 128
- 176 x 136
- ... zusätzliche Auflösungen ...
- 312 x 232
- 320 x 240
Verwenden Sie GetStreamCaps-, um diese Farbformat- und Bemaßungsfunktionen verfügbar zu machen, indem Sie einen Medientyp von 320 x 240 JPEG (wenn dies Ihre Standard- oder bevorzugte Größe ist) zusammen mit minimalen Funktionen von 160 x 120, maximalen Funktionen von 320 x 240 und einer Granularität von 1 bereitstellen. Das nächste paar, das Sie mit GetStreamCaps verfügbar machen, ist ein Medientyp von 640 x 480 JPEG gekoppelt mit mindestens 640 x 480 und maximal 640 x 480 und einer Granularität von 0. Das dritte Paar enthält einen Medientyp von 320 x 240, 24-Bit RGB mit minimalen Funktionen von 160 x 120, maximal 320 x 240 und eine Granularität von 8. Auf diese Weise können Sie fast jedes Format und jede Funktion veröffentlichen, die Ihre Karte möglicherweise unterstützt. Eine Anwendung, die wissen muss, welche Komprimierungsformate Sie bereitstellen, können alle Paare abrufen und eine Liste aller eindeutigen Untertypen der Medientypen erstellen.
Ein Filter ruft seine Medientypquelle und Zielrechtecke aus der VIDEOINFOHEADER- Struktur rcSource- bzw. rcTarget- Member ab. Filter müssen keine Quell- und Zielrechtecke unterstützen.
Das im gesamten IAMStreamConfig Dokumentation beschriebene Zuschneiderechteck entspricht dem VIDEOINFOHEADER--Struktur-rcSource- Rechteck für den Ausgabenadel.
Das in der IAMStreamConfig Dokumentation beschriebene Ausgaberechteck entspricht der biWidth- und biHeight Member der BITMAPINFOHEADER- Struktur des Ausgabenadels (siehe DV-Daten im AVI-Dateiformat.).
Wenn die Ausgabe-Pin eines Filters mit einem Medientyp mit nicht entflechtlichen Quell- und Zielrechtecken verbunden ist, ist Ihr Filter erforderlich, um das Quellunterrectangle des Eingabeformats in das Zielobjekt des Ausgabeformats zu dehnen. Das Quellunterrectangle wird im VIDEO_STREAM_CONFIG_CAPSInputSize-Element der VIDEO_STREAM_CONFIG_CAPS Struktur gespeichert.
Betrachten Sie beispielsweise das folgende Videokompressorszenario: Das Eingabebild ist im RGB-Format und hat eine Größe von 160 x 120 Pixel. Die obere linke Ecke des Quellrechtecks befindet sich an der Koordinate (20,20), und die untere rechte Ecke liegt bei (30,30). Das Ausgabebild ist im MPEG-Format mit einer Größe von 320 x 240. Die obere linke Ecke des Zielrechtecks liegt bei (0,0) und die untere rechte Ecke liegt bei (100.100). In diesem Fall sollte der Filter ein 10 x 10 Stück der 160 x 120 RGB-Quellbitmap aufnehmen und den oberen 100 x 100-Bereich einer 320 x 240-Bitmap füllen, sodass der Rest der 320 x 240 Bitmap unverändert bleibt. Die folgende Abbildung zeigt dieses Szenario.
Ein Filter unterstützt dies möglicherweise nicht und kann keine Verbindung mit einem Medientyp herstellen, bei dem rcSource- und rcTarget- nicht leer sind.
Die VIDEOINFOHEADER- Struktur macht Informationen zu den Datenratenfunktionen eines Filters verfügbar. Angenommen, Sie haben ihren Ausgabehefter mit dem nächsten Filter mit einem bestimmten Medientyp verbunden (entweder direkt oder mithilfe des Medientyps, der von der CMediaType::SetFormat Funktion übergeben wird). Sehen Sie sich die dwBitRate- Mitglied des VIDEOINFOHEADER Formatstruktur dieses Medientyps an, um zu sehen, auf welche Datenrate Sie das Video komprimieren sollten. Wenn Sie die Anzahl der Zeiteinheiten pro Frame in der VIDEOINFOHEADER Struktur AvgTimePerFrame Element mit der Datenrate im dwBitRate Member multiplizieren und durch 10.000.000 (die Anzahl der Einheiten pro Sekunde) dividieren, können Sie ermitteln, wie viele Byte jeder Frame sein soll. Sie können einen kleineren Rahmen erstellen, aber nie ein größeres. Verwenden Sie AvgTimePerFrame- aus dem Medientyp der Ausgabenadel, um die Bildfrequenz für einen Videokompressor oder einen Aufnahmefilter zu ermitteln.