Nozioni di base su DMO (Microsoft Media Foundation)

Questo argomento fornisce una breve panoramica delle DMO in relazione ai codec Di Windows Media. Per altre informazioni sulle DMO, vedere Oggetti multimediali DirectX.

Un oggetto DMO è un oggetto COM che trasforma i dati. I dati vengono passati e vengono restituiti i dati trasformati. Nel caso di un codificatore codec DMO, si inseriscono dati multimediali non compressi e DMO fornisce dati multimediali compressi. Il vantaggio principale dell'uso delle DMO è che tutti implementano la stessa interfaccia di base , IMediaObject, che semplifica l'uso con essi perché è possibile usare lo stesso oggetto, indipendentemente dal tipo di trasformazione in esecuzione.

Poiché esistono variabili coinvolte in qualsiasi tipo di trasformazione dei dati, la trasformazione audio e video deve tenere conto dell'ampia gamma di possibili configurazioni multimediali. I codec Audio e Video di Windows Media supportano anche una serie di funzionalità speciali che è necessario poter configurare tramite DMO.

In generale, le informazioni sulle variabili necessarie per i DMO codec per comprimere e decomprimere i supporti digitali vengono trasmesse in uno dei tre modi seguenti:

  • Impostare il tipo di input in DMO per trasmettere le caratteristiche dei supporti non compressi passati a un codificatore DMO e le caratteristiche dei supporti compressi passati a un decodificatore DMO.
  • Impostare il tipo di output nell'oggetto DMO per trasmettere le caratteristiche dei supporti compressi recapitati da un codificatore DMO e le caratteristiche dei supporti non compressi recapitati da un decodificatore DMO.
  • Usando i metodi dell'interfaccia IPropertyBag , configurare altre impostazioni che supportano le varie funzionalità delle DMO codec come proprietà. IPropertyBag è un'interfaccia COM standard supportata da tutte le DMO codec.

Inoltre, alcune funzionalità codec vengono gestite usando altre interfacce specifiche per le DMO codec. Queste interfacce sono elencate per ogni codec nella sezione Codec Objects.

I tipi di input e output sono specifici per i flussi di input e output. Ogni flusso rappresenta una rappresentazione discreta del contenuto. Ad esempio, il codificatore Windows Media Video DMO ha un singolo flusso di input e due flussi di output. Il flusso di input accetta esempi video non compressi. Il primo dei due flussi di output fornisce campioni compressi; l'altro fornisce esempi non compressi. I singoli esempi in un flusso di output rappresentano lo stesso contenuto degli esempi corrispondenti nell'altro flusso, ma ogni flusso fornisce tali esempi in un formato diverso.

Ogni flusso (input o output) supporta uno o più tipi di supporti. Un tipo di supporto o un formato è descritto da una struttura DMO_MEDIA_TYPE . È possibile eseguire una query su DMO per i tipi supportati da un flusso di output chiamando IMediaObject::GetOutputType. Questo metodo restituisce un tipo di output valido (anche se in alcuni casi parzialmente incompleto) per tale flusso. È possibile enumerare i tipi di supporti supportati per un flusso di output effettuando chiamate ripetute a GetOutputType, incrementando il parametro di tipo con ogni chiamata. Quando l'indice di tipo passato non è compreso nei limiti, il metodo restituisce DMO_E_NO_MORE_ITEMS. I formati di input possono essere enumerati nello stesso modo usando il metodo IMediaObject::GetInputType .

I tipi enumerati da DMO sono solo i tipi "preferiti", ma possono essere supportati altri tipi. È possibile convalidare un tipo di output chiamando IMediaObject::SetOutputType. Usare IMediaObject::SetInputType per convalidare un tipo di input. Entrambi i metodi restituiranno DMO_E_TYPE_NOT_ACCEPTED se la struttura DMO_MEDIA_TYPE passata non è valida. Alcune DMO richiedono di impostare un tipo di output prima di enumerare qualsiasi tipo di input. Le DMO codec audio e video di Windows Media hanno tutti input e output con convalida interdipendente. Ovvero, il tipo di output impostato imposterà i criteri di convalida per il tipo di input. Esistono anche alcune proprietà che, se impostate, modificano i tipi di input e output validi. Per questo motivo, è necessario impostare tutte le proprietà desiderate nell'oggetto DMO prima di enumerare i tipi.

Dopo aver impostato i tipi di output e di input per DMO, è possibile iniziare a elaborare gli esempi. Ogni esempio di input viene passato al codec usando una chiamata a IMediaObject::P rocessInput e ogni esempio di output viene recapitato dal codec quando si effettua una chiamata a IMediaObject::P rocessOutput.

Uso delle DMO codec