Udostępnij przez


Kodowanie wideo z przeplotem (Microsoft Media Foundation)

Dane wideo przeznaczone do użycia z komputerami są zwykle progresywne, co oznacza, że każda ramka jest kodowana jako pojedynczy obraz. Niektóre urządzenia, takie jak telewizory, nie wyświetlają wszystkich klatek jednocześnie, lecz jako dwa obrazy. Jeden z obrazów lub pól zawiera wszystkie wiersze z numerami parzystymi. Drugie pole zawiera dane dotyczące wszystkich nieparzystych wierszy. Wideo zakodowane z więcej niż jednym polem na ramkę jest nazywane z przeplotem, ponieważ jest renderowane poprzez przełączanie między polem parzystym a nieparzystym.

W przeszłości zawartość wideo z przeplotem była zawsze przerywana przed kodowaniem za pomocą kodera codec usługi Windows Media Video. Począwszy od usługi Windows Media 9 Series, koder wideo obsługuje jednak kompresję zawartości przeplotowej bez uprzedniego konwertowania jej na progresywną. Utrzymywanie przeplotu w zakodowanym pliku jest ważne, jeśli zawartość jest kiedykolwiek renderowana na wyświetlaczu przeplotowym, takim jak telewizor. Ta funkcja ma coraz większe znaczenie, ponieważ obsługa zawartości opartej na nośnikach Windows Media rozprzestrzenia się na odtwarzacze DVD, set-top box i inne urządzenia domowe.

Najprostszym sposobem kodowania i dostarczania wideo z przeplotem jest opracowanie aplikacji przy użyciu zestawu SDK formatu Windows Media i przechowywanie zawartości w plikach ASF. Informacje przeplatane na temat ramek są przekazywane do kodera przy użyciu rozszerzeń jednostek danych, które działają dobrze w przypadku zawartości ASF, ale są nieco trudniejsze do obsługi w innych kontenerach. Aby uzyskać więcej informacji na temat rozszerzeń jednostek danych, zobacz Using Data Unit Extensions.

Obsługa kodowania z przeplotem obejmuje dwa główne kroki: przekazywanie informacji o ramce do kodera i dostarczanie informacji do aplikacji renderującej. Te kroki opisano w poniższych akapitach.

Przeplatane wideo i enkoder

Pierwszym krokiem kodowania wideo z zachowanym przeplotem jest skonfigurowanie kodera w celu zakodowania pól przeplatanych. W tym celu ustaw właściwość MFPKEY_INTERLACEDCODINGENABLED na wartość TRUE. To przygotowuje koder do odbierania próbek z przeplotem. Każdy przykład danych wejściowych musi zawierać oba pola.

Każda próbka, którą przetwarzasz za pomocą kodera po aktywowaniu kodowania przeplotowego, powinna mieć dołączone rozszerzenie danych. Przyjmuje się, że próbki bez oczekiwanego rozszerzenia jednostki danych są progresywne. Identyfikator GUID identyfikujący rozszerzenie jest D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC. Wartości przekazywane przez obiekty zestawu Windows Media Format SDK są zdefiniowane w poniższej tabeli.

Wartość Opis
0x00000020 Określa, że próbka jest zakodowana z najpierw dolnym polem. Ta wartość jest zrozumiała tylko w połączeniu z wartością przeplotu.
0x00000040 Określa, że przykład jest zakodowany z pierwszym polem u góry. Ta wartość ma sens jedynie w połączeniu z wartością przeplotową.
0x00000080 Określa, że próbka jest przeplatana. Jest to jedyna wartość, która ma znaczenie dla kodeków DMO.

 

Jedna z dwóch pierwszych wartości jest zawsze łączona z 0x80 przy użyciu bitowych LUB przed ustawieniem na przykładzie. Jednak koder sprawdza tylko 0x80 i ignoruje resztę rozszerzenia. Jeśli rozszerzenie identyfikuje próbkę jako przeplataną, koder utrzymuje przeplot próbki w skompresowanym strumieniu i osadza flagę wskazującą w strumieniu, aby dekoder mógł zidentyfikować przeplatane ramki. Każda próbka z przeplotem jest oznaczona, dzięki czemu zawartość źródłowa, która jest mieszanką progresywnej i z przeplotem, może być zakodowana razem w jednym strumieniu.

Obiekt zapisywania zestawu SDK formatu Windows Media zawiera rozszerzenia jednostek danych typu zawartości w przykładach zapisywanych w sekcji danych kontenera ASF do użycia w czasie renderowania.

Odczytywanie i renderowanie przeplatanego wideo

Dekoder identyfikuje próbki z przeplotem w oparciu o flagę ustawioną w strumieniu przez koder. Domyślnie dekoder rozdziela próbki i dostarcza progresywne dane wyjściowe. Aplikacja odtwarzacza może skonfigurować dekoder, aby przetwarzał dane wyjściowe przy zachowaniu przeplotu, poprzez ustawienie właściwości MFPKEY_DECODER_DEINTERLACING.

Trudności w odtwarzaniu wideo przeplotowym pojawiają się po dostarczaniu próbek przez dekoder. Program renderowany (karta wideo lub mikroukład na urządzeniu) nie może poprawnie wyświetlić zawartości wideo bez znajomości, które pole jest tym polem. W aplikacjach korzystających z zestawu Windows Media Format SDK rozszerzenie jednostki danych typu zawartości jest pobierane z nieskompresowanych próbek i może zostać przekazane do urządzenia.

W przypadku bezpośredniego używania obiektów koderów żaden z tych transferów danych nie jest automatyczny. Należy zaimplementować obsługę rozszerzenia jednostki danych zarówno w obiektach buforu, jak i w kontenerze używanym dla zakodowanej zawartości. Większość typowych typów kontenerów multimediów (takich jak AVI) nie obsługuje metadanych na poziomie próbki. Możesz zaimplementować własny system do przechowywania danych w pliku i skojarzyć je z poszczególnymi przykładami, ale tylko dostosowany czytelnik będzie mógł je pobrać.

Notatka

Ustawienie właściwości MFPKEY_INTERLACEDCODINGENABLED na TRUE, a następnie niewysyłanie żadnych próbek z załączoną rozszerzeniem jednostki danych typu zawartości może spowodować awarię kodera. Ustaw koder dla kodowania z przeplotem tylko wtedy, gdy próbki mają być dostarczane z przeplotem.

 

Praca z wideo