So verwenden Sie Interlaced Video
[Das dieser Seite zugeordnete Feature Windows Media Format 11 SDK ist ein Legacyfeature. Es wurde von Source Reader und Sink Writer abgelöst. Source Reader und Sink Writer wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit quellleser und Senkenschreiber anstelle des Windows Media Format 11 SDK verwendet. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]
Es gibt zwei grundlegende Arten der Videocodierung: progressive und interlaced. Bei der progressiven Codierung ist jeder Frame eine codierte Darstellung eines Videoframes. Bei der Interlaced-Codierung ist jeder Frame eine codierte Darstellung aller geraden Pixelzeilen im Video oder aller ungeraden Zeilen. Jeder Interlaced-Frame wird als Feld bezeichnet, sodass ungerade Felder und gerade Felder vorhanden sind. Eine Interlaced-Anzeige (wie ein Fernseher) rendert die Felder einzeln, abwechselnd. Eine progressive Anzeige rendert Frames auf einmal.
Der Windows Media Video 9 Advanced Profile-Codec bietet Unterstützung für die Aufrechterhaltung von Interlacing in komprimierten Streams.
Verwendung von Interlaced Video
Das Codieren von Interlaced-Videos ist nur nützlich, wenn der Inhalt auf einem Interlac-Gerät angezeigt wird. Inhalte, die auf einem Fernseher (über eine Set-Top-Box oder ein anderes Gerät) angezeigt werden sollen, müssen möglicherweise interlaced sein. Inhalte, die ausschließlich auf einer Computeranzeige angezeigt werden sollen, sollten nicht als Interlaced codiert werden.
Um Interlaced Video als progressives Video zu codieren, müssen Sie Eingabeeinstellungen konfigurieren. Weitere Informationen finden Sie unter To Deinterlace Video( To Deinterlace Video).
Feldreihenfolge
Die meisten Quellen von Interlaced Video, z. B. Videoaufnahmekarten, liefern Videobeispiele, die beide miteinander verschachtelten Felder enthalten. Das Ergebnis ist wie ein vollständiger Videorahmen, mit der Ausnahme, dass die ungeraden und geraden Linien in der Zeit leicht verschoben werden. Es gibt keinen universellen Standard, welches Feld im verschachtelten Videobeispiel zum ersten Mal auftritt.
Sie sollten Es Benutzern ermöglichen, die Feldreihenfolge anzugeben, wenn Sie Beispiele mit Interlaces an Ihre Anwendung übergeben.
Video zum Codieren von Interlaced
Führen Sie die folgenden Schritte aus, um die Interlaced-Codierung zu verwenden:
- Konfigurieren Sie den Videostream im Profil für die Verwendung der Inhaltstyp-Dateneinheitserweiterung, indem Sie die IWMStreamConfig2::AddDataUnitExtension-Methode aufrufen. Die Beispielerweiterungs-GUID für die Inhaltstyperweiterung ist WM_SampleExtensionsGUID_ContentType.
- Legen Sie den Stream im Profil fest, und konfigurieren Sie den Writer mit dem Profil wie gewohnt.
- Rufen Sie vor dem Übergeben von Interlaced Samples an den Writer die IWMWriterAdvanced2::SetInputSetting-Methode auf, um die g_wszInterlacedCoding Eingabeeinstellung auf TRUE festzulegen.
- Rufen Sie für jedes Interlaced Sample, das Sie an den Writer übergeben, die INSSBuffer3::SetProperty-Methode auf, um den Inhaltstyp festzulegen. Inhaltstypwerte sind Kombinationen der Flags in der folgenden Tabelle.
Flag | Beschreibung |
---|---|
WM_CT_INTERLACED | Legen Sie dieses Flag beim Codieren von Interlaced Content immer fest. Wenn Sie dieses Flag verwenden, ohne ein Feldreihenfolgeflag (WM_CT_BOTTOM_FIELD_FIRST oder WM_CT_TOP_FIELD_FIRST) festzulegen, geht der Codec davon aus, dass das obere Feld zuerst ist. Wenn der Codec die falsche Feldreihenfolge verwendet, sollte dies keine Auswirkungen auf die Bildqualität haben, aber die Codierungseffizienz wird beeinträchtigt. |
WM_CT_BOTTOM_FIELD_FIRST | In Kombination mit dem flag WM_CT_INTERLACED gibt dieses Flag an, dass das untere Feld (das Feld, das mit der zweiten Zeile im Beispiel beginnt) zum ersten Mal auftritt. |
WM_CT_TOP_FIELD_FIRST | In Kombination mit dem flag WM_CT_INTERLACED gibt dieses Flag an, dass das oberste Feld (das Feld, das mit der ersten Zeile im Beispiel beginnt) zum ersten Mal auftritt. |
WM_CT_REPEAT_FIRST_FIELD | Gibt an, dass das erste Feld im Beispiel bei der Wiedergabe wiederholt werden soll. Dieses Flag wird für Videos verwendet, die durch den Telecine-Prozess aus Film erstellt wurden. Wenn kein Feldreihenfolgeflag in Verbindung mit diesem Flag festgelegt wird, wird angenommen, dass das oberste Feld zuerst auftritt. |
Hinweis
Wenn das flag WM_CT_INTERLACED nicht festgelegt ist, wird davon ausgegangen, dass das Beispiel einen progressiven Videoframe enthält.
Interlaced-Decodierungsvideo
Beim Decodieren von Interlaced-Videos müssen Sie die einstellung g_wszAllowInterlacedOutput mithilfe der IWMReaderAdvanced2::SetOutputSetting-Methode auf TRUE festlegen. Andernfalls liefert der Codec progressive Frames.
Die Inhaltstyp-Dateneinheitserweiterung wird für die Ausgabebeispiele beibehalten. Sie sollten die Feldausrichtung an das Renderinggerät übergeben, um eine ordnungsgemäße Wiedergabe sicherzustellen.