Implementazione di un codec MFT
In questo argomento vengono fornite alcune linee guida per l'implementazione di un decodificatore o di un codificatore come MFT (Media Foundation Transform).
Encoder
Negoziazione del formato del codificatore
La procedura seguente viene usata per inizializzare un codificatore:
- Eseguire una query su MFT per l'interfaccia ICodecAPI.
- Chiamare ICodecAPI::SetValue per impostare le proprietà di codifica.
- Chiamare IMFTransform::SetOutputType per impostare il formato di codifica.
- Chiamare IMFTransform::GetInputAvailableType per ottenere un elenco di tipi di input compatibili. Questo passaggio potrebbe essere ignorato.
- Chiamare IMFTransform::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 per primo, 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 IMFTransform::SetOutputType.
I codificatori e i decodificatori devono supportare NV12 come formato comune non compresso. In questo modo, i componenti della pipeline possono interagire con conversioni minime di spazi di colore. Naturalmente, anche altri formati possono essere supportati.
Decoder
Transcode-Only Decodificatori
Alcuni decodificatori sono ottimizzati per la transcodifica (decodifica e quindi la ricodifica di un flusso) e non sono adatti per l'uso durante la riproduzione.
Se un decodificatore MFT è destinato solo alla transcodifica, impostare il flag MFT_ENUM_FLAG_TRANSCODE_ONLY quando si registra l'MFT. Vedere MFTRegister.
Per impostazione predefinita, i decodificatori transcodificati non vengono restituiti dalla funzione MFTEnumEx. Per enumerare i decoder di transcodifica, chiamare MFTEnumEx e impostare il flag MFT_ENUM_FLAG_TRANSCODE_ONLY nel parametro Flags. Se usato nella funzione MFTEnumEx, questo flag enumera sia i decoder di transcodifica che altri decoder.
MFTRegister MFT_ENUM_FLAG_TRANSCODE_ONLY | MFTEnumEx MFT_ENUM_FLAG_TRANSCODE_ONLY | MFT è stato enumerato? |
---|---|---|
1 | 1 | Sì |
1 | 0 | No |
0 | 1 | Sì |
0 | 0 | Sì |
Attributi di telecine
La sorgente multimediale può collegare i seguenti attributi di telecinema ai campioni multimediali che fornisce.
Attributo | Descrizione |
---|---|
MFSampleExtension_RepeatFirstField | Equivalente all'indicatore "Ripeti Primo Campo" (RFF). |
MFSampleExtension_BottomFieldFirst | Opposto della bandiera "top field first" (TFF). |
Questi flag forniscono un suggerimento al renderer video avanzato (EVR) quando esegue il deinterlacing. Un decodificatore deve propagare questi flag downstream copiandoli negli esempi di output, in modo che raggiungano l'EVR.
Argomenti correlati