Encoderimplementierung und -support
In Windows XP Service Pack 1 hat Microsoft drei Kernelstreamingeigenschaftensätze und eine Enumeration in ksmedia.h definiert, um nur Video-Encodergeräte zu unterstützen. Jeder Eigenschaftensatz enthält eine einzelne Eigenschaft. Anders ausgedrückt: Jede Eigenschaft erhält einen eigenen Eigenschaftssatz. Wenn Ihr Treiber get-Property- oder Set-Property-Aufrufe durchführt, geben Sie die GUID des Eigenschaftssatzes (wie in ksmedia.h definiert) im Element Set der KSPROPERTY-Struktur und null im Id-Member an, wenn Sie den Aufruf einrichten:
Eigenschaftensatz | BESCHREIBUNG |
---|---|
ENCAPIPARAM_BITRATE | Implementieren Sie diesen Eigenschaftssatz, um die vom Encodergerät unterstützten Codierungsbitraten anzugeben. Weitere Informationen finden Sie unter Encodercodebeispiele . |
ENCAPIPARAM_BITRATE_MODE | Implementieren Sie diesen Eigenschaftssatz, um die vom Gerät unterstützten Codierungsmodi anzugeben. Dieser Eigenschaftensatz verwendet die VIDEOENCODER_BITRATE_MODE-Enumeration , um die unterstützten Modi anzugeben. Weitere Informationen finden Sie unter Encodercodebeispiele . |
ENCAPIPARAM_PEAK_BITRATE | Implementieren Sie diesen Eigenschaftssatz, um die maximale Codierungsbitrate des Geräts anzugeben. |
Clients greifen auf diese Eigenschaften zu, indem sie die IVideoEncoder COM-Schnittstelle von der IEncoderAPI COM-Schnittstelle ableiten (beschrieben in der Dokumentation zum Windows Software Development Kit (SDK).
Ein Minidriver muss Standardwerte für jede ENCAPIPARAM_Xxx-Eigenschaften angeben. Das Thema Encodercodebeispiele veranschaulicht, wie Sie Standardwerte für Eigenschaften angeben. Während der Entwicklung und dem Debuggen eines Encoderfilters kann die aktuelle Eigenschaftenseite von einem Minidriver ausgelöst werden, der den ENCAPIPARAM_BITRATE Eigenschaftensatz unterstützt.
In DirectX 9.0 wurden sechs zusätzliche Eigenschaftensätze und ein Ereignissatz in ksmedia.h definiert, um eine bessere Unterstützung für eine größere Vielfalt von Encodern zu bieten, einschließlich nur Audio-Encodern. Wie bei ENCAPIPARAM_Xxx-Eigenschaften erhält jede Eigenschaft einen eigenen Eigenschaftensatz:
Eigenschaftensatz | BESCHREIBUNG |
---|---|
CODECAPI_VIDEO_ENCODER | Wenn Ihr Gerät die Codierung von Videostreams unterstützt (einschließlich zusätzlicher Audiowiedergabe wie TV-Audio), implementieren Sie die Unterstützung für diesen Eigenschaftssatz. |
CODECAPI_AUDIO_ENCODER | Wenn Ihr Gerät ein reines Audioencoder ist, implementieren Sie die Unterstützung für diesen Eigenschaftssatz anstelle von CODECAPI_VIDEO_ENCODER. |
CODECAPI_SETALLDEFAULTS | Implementieren Sie diesen Eigenschaftssatz, um alle internen Einstellungen des Encodergeräts, z. B. die Codierungsbitrate und den Codierungsmodus, auf ihre Standardwerte zurückzusetzen. |
CODECAPI_ALLSETTINGS | Implementieren Sie diesen Eigenschaftssatz, um die aktuellen Einstellungen des Encodergeräts zu kommunizieren. Dieser Eigenschaftssatz wird für die Kommunikation mit und von Clients verwendet. |
CODECAPI_SUPPORTSEVENTS | Wenn Ihr Gerät Ereignisse aus dem Benutzermodus unterstützt, z. B. zum Ändern des Codierungsmodus, der Bitrate oder anderer Einstellungen, implementieren Sie diesen Eigenschaftssatz. Wenn Sie diesen Eigenschaftssatz implementieren, müssen Sie auch Unterstützung für das CODECAPI_CHANGELISTS-Ereignis implementieren. |
CODECAPI_CURRENTCHANGELIST | Implementieren Sie diesen Eigenschaftssatz, um zu bestimmen, welche Encoderparameter in einem vorherigen Aufruf geändert wurden, um eine oder mehrere Encodereigenschaften festzulegen. |
Ereignissatz | BESCHREIBUNG |
---|---|
Wenn das Gerät die Reaktion auf Benutzermodusereignisse über den CODECAPI_SUPPORTSEVENTS-Eigenschaftssatz unterstützt, implementieren Sie diesen Ereignissatz, um eine Liste der Encodereinstellungen zurückzugeben, die sich als Ergebnis des vorherigen Aufrufs der Set-Eigenschaft eines Clients an CODECAPI_SETALLDEFAULTS oder CODECAPI_ALLSETTINGS geändert haben. |
Clients greifen auf diese Eigenschaften über die ICodecAPI COM-Schnittstelle zu (in der Windows SDK-Dokumentation beschrieben). Weitere Informationen zu den COM-Schnittstellen finden Sie unter Encoderinstallation und Registrierung , einschließlich der Angabe, welche Schnittstelle KsProxy verfügbar machen soll.
Ein Minidriver sollte Unterstützung für grundlegende get-Eigenschaftsabfragen implementieren. Das Thema Encodercodebeispiele veranschaulicht, wie Get-Eigenschaftsabfragen unterstützt werden.
Verschieben Sie beim Entwickeln eines Encoderfilters die Codierungsfunktionalität in einen separaten Filter von einem Videoaufnahmefilter. Definieren Sie Ihre eigenen privaten Medien, damit Graph-Generatoren Encoder- und Erfassungsfilter ordnungsgemäß verbinden können. Wenn Ihre Hardware in der Lage ist, nicht codierte Inhalte zu mastern, können Sie auch öffentliche Medien verfügbar machen. Wenn Sie sowohl öffentliche als auch private Medien implementieren, listen Sie zuerst die privaten Medien auf, da dadurch die Diagrammerstellungszeit reduziert wird. , um beim Erstellen eines Filterdiagramms den richtigen Filter zu finden.
Weitere Informationen zur Verwendung von Medien und mehreren Instanzen eines Filters (in separaten Filterdiagrammen) finden Sie unter Mediums und Kategorien.