Udostępnij przez


Implementowanie kodeka MFT

Ten temat zawiera wskazówki dotyczące implementowania dekodera lub kodera jako transformacji programu Media Foundation (MFT).

Enkodery

Negocjowanie formatu kodera

Poniższa procedura służy do inicjowania kodera:

  1. Zrób zapytanie dotyczące MFT dla interfejsu ICodecAPI.
  2. Wywołaj ICodecAPI::SetValue, aby ustawić właściwości kodowania.
  3. Wywołaj IMFTransform::SetOutputType, aby ustawić format kodowania.
  4. Wywołaj IMFTransform::GetInputAvailableType, aby uzyskać listę zgodnych typów danych wejściowych. (Ten krok może zostać pominięty).
  5. Wywołaj IMFTransform::SetInputType, aby ustawić nieskompresowany format wejściowy.

Po ustawieniu typu danych wyjściowych w kroku 3 metoda GetInputAvailableType musi zwrócić listę typów wejściowych, które są zgodne z bieżącym typem danych wyjściowych. Innymi słowy, wszystkie typy zwrócone przez GetInputAvailableType w tym momencie muszą być prawidłowe dla SetInputType.

W przypadku dekodatorów kolejność ustawiania typów jest odwrócona: typ danych wejściowych jest ustawiany jako pierwszy, a następnie typ danych wyjściowych. Po ustawieniu typu danych wejściowych metoda IMFTransform::GetOutputAvailableType musi zwrócić listę typów, które można przekazać do metody IMFTransform::SetOutputType.

Kodery i dekodatory powinny obsługiwać nv12 jako wspólny format nieskompresowany. Dzięki temu składniki potoku mogą współdziałać przy minimalnej liczbie konwersji przestrzeni kolorów. Oczywiście inne formaty mogą być również obsługiwane.

Dekodery

Transcode-Only Dekodery

Niektóre dekodatory są zoptymalizowane pod kątem transkodowania (dekodowania, a następnie ponownego kodowania strumienia) i nie są odpowiednie do użycia podczas odtwarzania.

Jeśli dekoder MFT jest przeznaczony tylko do transkodowania, ustaw flagę MFT_ENUM_FLAG_TRANSCODE_ONLY podczas rejestrowania MFT. (Zobacz MFTRegister.)

Domyślnie dekodatory transkodowania nie są zwracane przez funkcję MFTEnumEx. Aby wyliczyć dekodatory transkodowania, wywołaj MFTEnumEx i ustaw flagę MFT_ENUM_FLAG_TRANSCODE_ONLY w parametrze Flags. W przypadku użycia w funkcji MFTEnumEx ta flaga wyliczała zarówno transkodujące dekodery, jak i inne dekodery.

MFTRegister MFT_ENUM_FLAG_TRANSCODE_ONLY MFTEnumEx MFT_ENUM_FLAG_TRANSCODE_ONLY Czy MFT jest wyliczany?
1 1 Tak
1 0 Nie
0 1 Tak
0 0 Tak

 

Atrybuty telecine

Źródło multimediów może dołączać do dostarczanych próbek multimediów następujące atrybuty telecine.

Atrybut Opis
MFSampleExtension_RepeatFirstField Odpowiednik flagi "repeat first field" (RFF).
MFSampleExtension_BottomFieldFirst Odwrotność znacznika "top field first" (TFF).

 

Te flagi zawierają wskazówkę dla ulepszonego modułu renderowania wideo (EVR) podczas wykonywania deinterlacingu. Dekoder powinien propagować te flagi, kopiując je do próbek wyjściowych, tak aby dotarły do EVR.

Tworzenie niestandardowej MFT