Freigeben über


Bereitstellen einer benutzerdefinierten Videoänderung

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

[Diese API wird nicht unterstützt und kann in Zukunft geändert oder nicht mehr verfügbar sein.]

Hinweis

Für dieses Feature ist DirectX 9.0 oder höher erforderlich.

 

Wenn DirectShow Editing Services (DES) die Größe eines Videoquellclips ändert, ist das Standardverhalten ein StretchBlt, das schnell, aber nicht antialiasiert ist. Sie können das Größenänderungsverhalten ändern, indem Sie eine benutzerdefinierte Größenänderung als DirectShow-Transformationsfilter implementieren. Der Filter muss die IResize-Schnittstelle verfügbar machen, sodass DES die Größe des Ein- und Ausgabevideos angeben kann. Informationen zum Schreiben eines Transformationsfilters finden Sie unter Schreiben von Transformationsfiltern. Als Ausgangspunkt wird die CTransformFilter-Basisklasse empfohlen. Beachten Sie beim Implementieren des Filters Folgendes:

  • Unterstützen Sie die IResize-Schnittstelle für den Filter (nicht die Pins).
  • Der Filter sollte nur VIDEOINFOHEADER-Formate (FORMAT_VideoInfo) akzeptieren. Andere Formattypen ablehnen.
  • Das Videoformat von DES kann ein beliebiger nicht komprimierter RGB-Typ sein, einschließlich 32-Bit-RGB mit Alpha (MEDIASUBTYPE_ARGB32). Ihr Filter kann Formate mit biHeight< 0 sicher ablehnen.
  • Bevor die Render-Engine den Ausgabenadel des Filters verbindet, ruft sie IResize::p ut_MediaType auf, um den Ausgabetyp festzulegen. Sie kann auch IResize::p ut_Size aufrufen, um die Ausgabegröße anzupassen. Es kann diese beiden Methoden in beliebiger Reihenfolge und beliebig oft aufrufen, bevor der Ausgabenadel verbunden wird.
  • Nachdem die Render-Engine den Ausgabenadel verbunden hat, wird möglicherweise put_Size erneut aufgerufen. Der Filter zum Wiederherstellen sollte seinen Ausgabenadel erneut mit der neuen Größe verbinden.
  • Strecken Sie das Eingabevideo innerhalb der CTransformFilter::Transform-Methode des Filters auf die Ausgabegröße.
  • Ihr Filter sollte niemals das Diskontinuitätsflag für das Ausgabebeispiel festlegen oder dem Ausgabebeispiel einen Medientyp anfügen.
  • Um den Status des Filters in einer GraphEdit-Datei (GRF) zu speichern, implementieren Sie die IPersistStream-Schnittstelle . (Dies ist optional, aber für Tests nützlich.)

Um den Filter zur Wiederverwendung verwenden zu können, muss der Filter als COM-Objekt im System des Benutzers registriert werden. Bevor die Anwendung das Videoprojekt rendert, fragen Sie die Render-Engine für die IRenderEngine2-Schnittstelle ab, und rufen Sie IRenderEngine2::SetResizerGUID mit der CLSID des Resizerfilters auf.

Rendern eines Projekts