Condividi tramite


Negoziazione del tipo di supporto nel codificatore

In Microsoft Media Foundation i codificatori vengono implementati come trasformazioni media foundation (MFT) con un input e un output. Prima di una sessione di codifica, un codificatore deve conoscere le caratteristiche del flusso che riceverà come input e il formato del flusso che produrrà come output. È necessario impostare i tipi di supporti di input e di output e le caratteristiche correlate prima di passare i dati attraverso il codificatore. È necessario specificare i formati di input e output specificando i GUID del tipo di supporto appropriati e impostare le caratteristiche del flusso di output impostando gli attributi del tipo di supporto pertinenti nel tipo di supporto di output. Un nuovo codificatore di cui è stata creata un'istanza non dispone di alcun tipo di supporto impostato.

Il tipo di supporto di input è un formato non compresso, ad esempio audio PCM o video RGB. I tipi di formato utilizzati dal codificatore sono limitati a quelli descritti dalle strutture VIDEOINFOHEADER e WAVEFORMATEX . Per altre informazioni su queste strutture, vedere la documentazione di Windows SDK. Media Foundation fornisce funzioni helper per creare tipi di supporti da strutture di formato. Ad esempio, la funzione MFInitMediaTypeFromVideoInfoHeader inizializza un tipo di video da una struttura VIDEOINFOHEADER e la funzione MFInitMediaTypeFromWaveFormatEx inizializza un tipo di video da una struttura WAVEFORMATEX o WAVEFORMATEXTENSIBLE . Per altre informazioni, vedere Conversioni dei tipi di supporto. È necessario impostare il tipo di supporto di input nel codificatore chiamando IMFTransform::SetInputType.

Il tipo di supporto di output è il formato di compressione usato nel flusso o nel file di origine finale. È possibile impostare il tipo di supporto di output disponibile solo dopo aver impostato il tipo di supporto di input. È possibile recuperare i tipi di output supportati chiamando IMFTransform::GetOutputAvailableType in un ciclo fino a quando il codificatore non restituisce MF_E_NO_MORE_TYPES. Incrementare l'indice del tipo con ogni iterazione. Quando si trova un tipo di supporto appropriato, impostare il tipo di supporto di output chiamando IMFTransform::SetOutputType.

Il fattore decisivo nella scelta del tipo di supporto di output dipende dal tipo di codifica e dai requisiti di codifica. Ad esempio, per i flussi audio con codifica CBR, si vuole trovare un tipo di supporto corrispondente all'input e una velocità di bit più vicina possibile a un valore di destinazione.

Se si vuole usare una modalità di codifica diversa da CBR, è necessario impostare la modalità e quindi enumerare i tipi di output per tale modalità, perché il codificatore modifica i tipi di output supportati a seconda del set di modalità. Le proprietà che controllano la modalità di codifica sono MFPKEY_VBRENABLED e MFPKEY_PASSESUSED. Ad esempio, se si enumerano i tipi di output per la codifica di qualità VBR, il tipo di supporto dipende dal valore di qualità che si decide di usare. Per informazioni sull'impostazione di queste proprietà, vedere Proprietà di codifica.

Creazione di un'istanza di un codificatore MFT

Codificatori Windows Media