Condividi tramite


Implementazione di un codec MFT

Questo argomento fornisce alcune linee guida per l'implementazione di un decodificatore o di codificatore come trasformazione media foundation (MFT).

Codificatori

Negoziazione del formato codificatore

La procedura seguente viene usata per inizializzare un codificatore:

  1. Eseguire una query su MFT per l'interfaccia ICodecAPI .
  2. Chiamare ICodecAPI::SetValue per impostare le proprietà di codifica.
  3. Chiamare FMTransform::SetOutputType per impostare il formato di codifica.
  4. Chiamare FMTransform::GetInputAvailableType per ottenere un elenco di tipi di input compatibili. Questo passaggio potrebbe essere ignorato.
  5. Chiamare FMTransform::SetInputType per impostare il formato di input non compresso.

Dopo aver impostato il tipo di output nel passaggio 3, il metodo GetInputAvailableType deve restituire un elenco di tipi di input compatibili con il tipo di output corrente. In altre parole, tutti i tipi restituiti da GetInputAvailableType a questo punto devono essere validi per SetInputType.

Per i decodificatori, l'ordine in cui vengono impostati i tipi viene invertito: il tipo di input viene impostato prima, seguito dal tipo di output. Dopo aver impostato il tipo di input, il metodo IMFTransform::GetOutputAvailableType deve restituire un elenco di tipi che possono essere passati al metodo FMTransform::SetOutputType .

I codificatori e i decodificatori devono supportare NV12 come formato comune non compresso. Ciò garantisce che i componenti della pipeline possano interagire con conversioni minime di spazi di colore. Naturalmente, altri formati possono essere supportati anche.

Decoder

decodificatori Transcode-Only

Alcuni decodificatori sono ottimizzati per la trascodazione (decodifica e quindi ricrittura di un flusso) e non sono adatti per l'uso durante la riproduzione.

Se un decodificatore MFT è destinato solo alla transcodatura, impostare il flag di MFT_ENUM_FLAG_TRANSCODE_ONLY quando si registra il MFT. Vedere MFTRegister.

Per impostazione predefinita, i decodificatori transcode non vengono restituiti dalla funzione MFTEnumEx . Per enumerare i decodificatori transcode, chiamare MFTEnumEx e impostare il flag di MFT_ENUM_FLAG_TRANSCODE_ONLY nel parametro Flags . Se usato nella funzione MFTEnumEx , questo flag enumera sia decodificatori transcodice che altri decodificatori.

MFT_ENUM_FLAG_TRANSCODE_ONLY MFTRegister MFTEnumEx MFT_ENUM_FLAG_TRANSCODE_ONLY MFT è enumerato?
1 1
1 0 No
0 1
0 0

 

Attributi telecine

L'origine multimediale può collegare gli attributi di telecine seguenti agli esempi multimediali che fornisce.

Attributo Descrizione
MFSampleExtension_RepeatFirstField Equivalente al flag "ripeti primo campo" (RFF).
MFSampleExtension_BottomFieldFirst Inversa del flag "top field first" (TFF).

 

Questi flag forniscono un suggerimento per il renderer video avanzato (EVR) quando esegue la denterlacing. Un decodificatore deve propagare questi flag downstream copiandoli negli esempi di output, in modo che raggiungano l'EVR.

Scrittura di un MFT personalizzato