Informazioni sui tipi di media (Microsoft Media Foundation)
Un tipo di media descrive il formato di un flusso multimediale. In Microsoft Media Foundation, i tipi di supporti sono rappresentati dall'interfaccia IMFMediaType. Questa interfaccia eredita l'interfaccia IMFAttributes. I dettagli di un tipo di supporto vengono specificati come attributi.
Per creare un nuovo tipo di supporto, chiamare la funzione MFCreateMediaType. Questa funzione restituisce un puntatore all'interfacciaIMFMediaType. Il tipo di media inizialmente non ha attributi. Per impostare i dettagli del formato, impostare gli attributi pertinenti.
Per un elenco degli attributi del tipo di supporto, vedere attributi del tipo di supporto.
Tipi principali e sottotipi
Due informazioni importanti per qualsiasi tipo di supporto sono il tipo principale e il sottotipo.
- Il tipo principale è un GUID che definisce la categoria complessiva dei dati in un flusso multimediale. I tipi principali includono video e audio. Per specificare il tipo principale, impostare l'attributo MF_MT_MAJOR_TYPE. Il metodo IMFMediaType::GetMajorType restituisce il valore di questo attributo.
- Il sottotipo definisce ulteriormente il formato. Ad esempio, all'interno del tipo principale del video, esistono sottotipi per RGB-24, RGB-32, YUY2 e così via. Nell'audio esistono audio PCM, audio IEEE a virgola mobile e altri. Il sottotipo fornisce più informazioni rispetto al tipo principale, ma non definisce tutti gli elementi relativi al formato. Ad esempio, i sottotipi di video non definiscono le dimensioni dell'immagine o la frequenza dei fotogrammi. Per specificare il sottotipo, impostare l'attributo MF_MT_SUBTYPE.
Tutti i tipi di supporti devono avere un GUID di tipo principale e un GUID di sottotipo. Per un elenco dei GUID di tipo e sottotipo principali, vedere GUID di tipo multimediale.
Perché gli attributi?
Gli attributi presentano diversi vantaggi rispetto alle strutture di formato usate nelle tecnologie precedenti, ad esempio DirectShow e Windows Media Format SDK.
È più facile rappresentare i valori "non so" o "non mi interessa". Ad esempio, se stai scrivendo una trasformazione video, potresti sapere in anticipo quali formati RGB e YUV supportano la trasformazione, ma non le dimensioni del fotogramma video, fino a quando non le ottieni dall'origine video. Analogamente, potrebbe non interessarti di alcuni dettagli, come i colori primari del video. Con una struttura di formato, ogni membro deve essere riempito con un valore. Di conseguenza, è diventato comune usare zero per indicare un valore sconosciuto o predefinito. Questa procedura può causare errori se un altro componente considera zero come valore legittimo. Con gli attributi, è sufficiente omettere gli attributi sconosciuti o non pertinenti al componente.
Man mano che i requisiti sono cambiati nel tempo, le strutture di formato sono state estese aggiungendo dati aggiuntivi alla fine della struttura. Ad esempio, WAVEFORMATEXTENSIBLE estende la struttura WAVEFORMATEX. Questa pratica è probabile che contenga errori, perché i componenti devono convertire i puntatori di struttura in altri tipi di struttura. Gli attributi possono essere estesi in modo sicuro.
Sono state definite strutture di formato non compatibili a vicenda. Ad esempio, DirectShow definisce le strutture VIDEOINFOHEADER e VIDEOINFOHEADER2. Gli attributi vengono impostati indipendentemente l'uno dall'altro, quindi questo problema non si verifica.
Argomenti correlati