Udostępnij za pośrednictwem


Przeplot wideo

W tym temacie opisano, jak źródła multimediów i dekodatory powinny obsługiwać zawartość wideo z przeplotem.

Aby poprawnie zdekodować i renderować przeplatane wideo, potrzebne są następujące informacje:

  • Progresywne lub przeplatane. Strumień wideo może zawierać ramki progresywne, ramki z przeplotem lub kombinację obu tych ramek.

  • Dominacja pola. Dominacja pola opisuje, które pole pojawia się jako pierwsze, górne pole lub dolne pole.

  • Powtórz pierwsze pole. Ta flaga jest używana w ściąganiu 3:2, gdy ramka jest progresywna, ale strumień jest przeplatany. W tym kontekście pierwszym polem może być górne lub dolne pole.

  • Przeplatane pola lub jedno pole. Przykład może zawierać jedno pole lub dwa przeplatane pola. Jeśli próbka zawiera jedno pole, wysokość próbki wynosi połowę wysokości ramki, ponieważ próbka zawiera tylko połowę linii skanowania dla ramki. Pola przeplatane są zalecane, chyba że właściwości zawartości źródłowej określają inaczej.

Każda z tych cech może ulec zmianie z jednej próbki na następną. Jednak składniki wideo muszą wiedzieć coś o ogólnej zawartości przed rozpoczęciem przesyłania strumieniowego. Jeśli na przykład wideo jest przeplatane, ulepszony moduł renderowania wideo (EVR) musi zarezerwować pamięć wideo na potrzeby usuwania przeplotu. Jeśli wideo jest całkowicie progresywne, z drugiej strony EVR może zoptymalizować potok renderowania. Dodanie kroku deinterlacingu do potoku zwiększa opóźnienie renderowania.

Informacje o przeplotach są przechowywane w dwóch miejscach:

  • Ogólne informacje o przeplotach w strumieniu są umieszczane w typie nośnika. Aby uzyskać więcej informacji na temat typów multimediów, zobacz Typy multimediów.

  • Informacje, które można zmienić przy użyciu każdej próbki, są umieszczane w przykładzie jako atrybut. Aby uzyskać więcej informacji na temat przykładów, zobacz Media Samples.

Informacje o przeplotu w typie nośnika

Atrybut MF_MT_INTERLACE_MODE w typie nośnika opisuje sposób przeplotu strumienia jako całości. Wartość tego atrybutu jest członkiem wyliczenia MFVideoInterlaceMode. Typ nośnika wideo powinien zawsze mieć ten atrybut.

  • Jeśli strumień zawiera tylko ramki progresywne, bez ramek przeplotowych, użyj MFVideoInterlace_Progressive.
  • Jeśli strumień zawiera tylko ramki z przeplotem, a każda próbka zawiera dwa przeplatane pola, użyj MFVideoInterlace_FieldInterleavedUpperFirst lub MFVideoInterlace_FieldInterleavedLowerFirst.
  • Jeśli strumień zawiera tylko ramki z przeplotem, a każda próbka zawiera jedno pole, użyj MFVideoInterlace_FieldSingleUpper lub MFVideoInterlace_FieldSingleLower. Jeśli pola są alternatywne między górnymi i dolnymi, nie ma znaczenia, która z tych dwóch wartości jest używana. Jeśli format zawiera tylko górne pola lub tylko dolne pola, ustaw wartość odpowiadającą zawartości.
  • Jeśli strumień zawiera mieszankę ramek przeplatanych i progresywnych lub jeśli przełączniki dominacji pola, ustaw typ nośnika na MFVideoInterlace_MixedInterlaceOrProgressive. Użyj przykładowych atrybutów, aby opisać każdą ramkę.

Poniższa tabela zawiera podsumowanie tego atrybutu.

MF_MT_INTERLACE_MODE Introligatorska? Próbki Pierwsze pole
MFVideoInterlace_Progressive Nie Ramka progresywna Nie dotyczy
MFVideoInterlace_FieldInterleavedUpperFirst Tak Pola przeplatane Pierwszy górny
MFVideoInterlace_FieldInterleavedLowerFirst Tak Pola przeplatane Pierwszy dolny
MFVideoInterlace_FieldSingleUpper Tak Jedno pole Pierwszy górny
MFVideoInterlace_FieldSingleLower Tak Jedno pole Pierwszy dolny
MFVideoInterlace_MixedInterlaceOrProgressive Może się różnić Przeplatane pola lub ramki progresywne Może się różnić

 

Nie można mieszać przeplatanych pól i pojedynczych pól. Przełączenie z jednego do drugiego wymaga zmiany typu nośnika.

Flagi przeplotu dla przykładów

Informacje, które mogą zmienić się z jednej próbki na następną, są wskazywane przy użyciu przykładowych atrybutów. Użyj interfejsuIMFSample, aby pobrać lub ustawić te atrybuty.

Wszystkie atrybuty przeplotu wymienione w tej sekcji mają wartości logiczne. W rzeczywistości każdy z tych atrybutów może mieć trzy wartości: true, FALSElub nie ustawiono. Jeśli atrybut nie jest ustawiony, wartość jest pobierana z typu nośnika. Jeśli atrybut jest ustawiony, wartość zastępuje typ nośnika. Niektóre kombinacje flag i typów multimediów są nieprawidłowe.

Atrybut Opis
MFSampleExtension_Interlaced Jeśli true, ramka jest przeplatana. Jeśli false, ramka jest progresywna.
Ustaw ten atrybut na każdym przykładzie, jeśli typ nośnika jest MFVideoInterlace_MixedInterlaceOrProgressive.
MFSampleExtension_BottomFieldFirst Znaczenie tej flagi zależy od tego, czy próbki zawierają przeplatane pola, czy pojedyncze pola.
  • Pola przeplatane: jeśli true, dolne pole jest najpierw. Jeśli false, górne pole jest najpierw.
  • Pojedyncze pola: jeśli true, przykład zawiera mniejsze pole. Jeśli false, przykład zawiera górne pole.
Ustaw ten atrybut na każdym przykładzie przeplotu, jeśli typ nośnika jest MFVideoInterlace_FieldSingleUpper, MFVideoInterlace_FieldSingleLower lub MFVideoInterlace_MixedInterlaceOrProgressive.
MFSampleExtension_RepeatFirstField Jeśli true, pierwsze pole zostanie powtórzone. Jeśli wartość FALSE lub nie jest ustawiona, pierwsze pole nie zostanie powtórzone.
MFSampleExtension_SingleField Jeśli true, przykład zawiera jedno pole. Jeśli false, przykład zawiera przeplatane pola.

 

W poniższej tabeli przedstawiono, które flagi są wymagane, opcjonalne lub zabronione, na podstawie typu nośnika.

Typ nośnika Flaga przeplotowa Flaga BottomFieldFirst RepeatFirstField Flaga Flaga pojedynczego pola
Postępowy Fakultatywny; w przypadku ustawienia musi mieć wartość FALSE. Nie ustawiaj. Nie ustawiaj. Nie ustawiaj.
Pola przeplatane Fakultatywny; w przypadku ustawienia musi mieć wartość TRUE. Fakultatywny; jeśli jest ustawiona, musi być zgodna z typem nośnika. Nie ustawiaj. Fakultatywny; w przypadku ustawienia musi mieć wartość FALSE.
Pojedyncze pola Fakultatywny; w przypadku ustawienia musi mieć wartość TRUE. Wymagane. Nie ustawiaj. Ustaw wartość true.
Mieszany Wymagane. Wymagane. Wymagane. Fakultatywny; w przypadku ustawienia musi mieć wartość FALSE.

 

W przypadkach, gdy atrybut jest opcjonalny, typ nośnika już definiuje informacje. Jest prawidłowy, aby ustawić atrybut do dopasowania, ale nie jest wymagany.

Na przykład jeśli typ nośnika jest MFVideoInterlace_Progressive, oznacza to, że wszystkie ramki w strumieniu są progresywne. W związku z tym można ustawić atrybut MFSampleExtension_Interlaced na wartość FALSElub pozostawić atrybut niezastawiony.

Zalecenia

Ta sekcja zawiera zalecenia dotyczące różnych typów zawartości.

  1. Wideo to wszystkie ramki progresywne.
  • Ustaw typ nośnika na MFVideoInterlace_Progressive.

  • Nie należy ustawiać atrybutu MFSampleExtension_Interlaced ani ustawiać go na wartość FALSE na każdej ramce.

  • Nie należy ustawiać atrybutów MFSampleExtension_BottomFieldFirst, MFSampleExtension_RepeatFirstFieldani MFSampleExtension_SingleField.

  1. Film jest wszystkimi polami przeplatanymi z tą samą dominacją pola. Przykłady zawierają przeplatane pola.
  • Ustaw typ nośnika na MFVideoInterlace_FieldInterleavedUpperFirst lub MFVideoInterlace_FieldInterleavedLowerFirst.

  • Nie należy ustawiać atrybutu MFSampleExtension_Interlaced ani ustawiać go na wartość true na każdej ramce.

  • Nie należy ustawiać atrybutu MFSampleExtension_BottomFieldFirst ani ustawiać wartości dla każdej ramki tak, aby odpowiadała typowi nośnika.

  • Nie należy ustawiać atrybutu MFSampleExtension_RepeatFirstField ani ustawiać go na wartość FALSE na każdej ramce.

  • Nie należy ustawiać atrybutu MFSampleExtension_SingleField ani ustawiać go na wartość FALSE na każdej ramce.

  1. Film zawiera mieszankę ramek przeplatanych i progresywnych, z powtarzającymi się polami i różną dominacją pola (na przykład wideo DVD).
  • Ustaw typ nośnika na MFVideoInterlace_MixedInterlaceOrProgressive.

  • Na każdej ramce ustaw atrybuty MFSampleExtension_Interlaced, MFSampleExtension_BottomFieldFirsti MFSampleExtension_RepeatFirstField.

  • Nie należy ustawiać atrybutu MFSampleExtension_SingleField ani ustawiać go na wartość FALSE na każdej ramce.

  1. Wideo jest przeplatane i przykłady zawierają pojedyncze pola.
  • Ustaw typ nośnika na MFVideoInterlace_FieldSingleUpper lub MFVideoInterlace_FieldSingleLower.

  • Na każdej ramce ustaw atrybut MFSampleExtension_BottomFieldFirst.

  • Nie należy ustawiać atrybutu MFSampleExtension_Interlaced ani ustawiać go na wartość true na każdej ramce.

  • Nie należy ustawiać atrybutu MFSampleExtension_RepeatFirstField ani ustawiać go na wartość FALSE na każdej ramce.

  • Nie należy ustawiać atrybutu MFSampleExtension_SingleField ani ustawiać go na wartość true na każdej ramce.

Większość zawartości wideo należy do jednej z tych kategorii.

Mapowania MPEG-2

W przypadku zawartości MPEG-2 użyj następujących mapowań, aby przekonwertować flagi MPEG-2 na przykładowe atrybuty programu Media Foundation.

picture_structure

Wartość Przykładowy atrybut
ramka MFSampleExtension_SingleField = FALSE
top_field MFSampleExtension_SingleField = true
MFSampleExtension_BottomFieldFirst = FALSE
bottom_field MFSampleExtension_SingleField = true
MFSampleExtension_BottomFieldFirst = true

 

progressive_frame

Wartość Przykładowy atrybut
0 MFSampleExtension_Interlaced = true
1 MFSampleExtension_Interlaced = FALSE

 

top_field_first

Wartość Przykładowy atrybut
0 MFSampleExtension_BottomFieldFirst = true
1 MFSampleExtension_BottomFieldFirst = FALSE

 

repeat_first_field

Wartość Przykładowy atrybut
0 MFSampleExtension_RepeatFirstField = FALSE
1 MFSampleExtension_RepeatFirstField = true

 

przykłady Single-Field

Jeśli typ nośnika jest MFVideoInterlace_FieldSingleUpper lub MFVideoInterlace_FieldSingleLower, oznacza to, że każda próbka zawiera jedno pole. Jednak typ nośnika opisuje całą ramkę. W związku z tym każdy bufor zawiera tylko połowę liczby wierszy pól podanych w typie nośnika. Jeśli na przykład typ nośnika opisuje wideo jako 720 × 480, każde pole zawiera 240 wierszy skanowania, a zatem każdy bufor zawiera tylko 240 wierszy pikseli. Jeśli piszesz składnik, który akceptuje typy multimediów z przykładami z pojedynczym polem, należy wziąć pod uwagę ten fakt podczas uzyskiwania dostępu do danych w buforze.

Ta sama zasada ma zastosowanie do przysłony geometrycznej (atrybutMF_MT_GEOMETRIC_APERTURE) i minimalnej przysłony wyświetlania (MF_MT_MINIMUM_DISPLAY_APERTURE atrybutu). Te regiony są określane pod względem całej ramki, a nie poszczególnych pól.

Mapowania directshow

W programie DirectShow informacje o przeplotach na próbkę znajdują się w dwTypeSpecificFlags składowej struktury AM_SAMPLE2_PROPERTIES. W poniższej tabeli przedstawiono równoważne atrybuty programu Media Foundation.

Przykładowa flaga DirectShow Przykładowy atrybut programu Media Foundation
AM_VIDEO_FLAG_INTERLEAVED_FRAME MFSampleExtension_SingleField = FALSE.
AM_VIDEO_FLAG_FIELD1 MFSampleExtension_Interlaced = true.
MFSampleExtension_SingleField = true.
MFSampleExtension_BottomFieldFirst = FALSE.
AM_VIDEO_FLAG_FIELD2 MFSampleExtension_Interlaced = true.
MFSampleExtension_SingleField = true.
MFSampleExtension_BottomFieldFirst = true.
AM_VIDEO_FLAG_WEAVE MFSampleExtension_Interlaced = false. (Ta flaga wskazuje, że sterownik nie powinien deinterlace dwóch pól).
AM_VIDEO_FLAG_FIELD1FIRST MFSampleExtension_BottomFieldFirst = FALSE. Jeśli zawartość jest przeplatana i flaga AM_VIDEO_FLAG_FIELD1FIRST nie jest obecna, ustaw ten atrybut na wartość true.
AM_VIDEO_FLAG_REPEAT_FIELD MFSampleExtension_RepeatFirstField = true. Jeśli flaga AM_VIDEO_FLAG_REPEAT_FIELD nie jest obecna, ustaw ten atrybut na wartość FALSE.

 

Jeśli przykład DirectShow nie zawiera przykładowych flag, użyj wartości dwInterlaceFlags ze struktury VIDEOINFOHEADER2:

Flaga przeplotu DirectShow Przykładowy atrybut programu Media Foundation
AMINTERLACE_IsInterlaced MFSampleExtension_Interlaced = true.
AMINTERLACE_1FieldPerSample MFSampleExtension_SingleField = true.
AMINTERLACE_Field1First MFSampleExtension_BottomFieldFirst = FALSE.

 

typy multimediów wideo

typy multimediów