Partilhar via


Arquitetura DMO

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Esta seção descreve a arquitetura geral de um DMO.

Streams

Um DMO é um objeto que leva m entradas e produz n saídas. As entradas e saídas são chamadas de fluxos . Cada DMO tem pelo menos um fluxo. Fluxos não são objetos; eles são simplesmente referenciados no DMO por número de índice. O número de fluxos é fixo em tempo de design.

tipos de mídia

Todos os dados são digitados usando um tipo de mídia , que define como interpretar o conteúdo dos dados. Por exemplo, o vídeo RGB de 24 bits de 320 x 240 é um tipo; O áudio PCM estéreo de 16 bits de 44,1 kilohertz (kHz) é outro tipo. Os tipos de mídia são descritos usando a estrutura DMO_MEDIA_TYPE. Antes que o cliente possa processar quaisquer dados, ele deve definir o tipo de mídia para cada fluxo no DMO.

Normalmente, um fluxo pode aceitar uma variedade de tipos de mídia. Alguns DMOs suportam uma gama mais ampla de tipos do que outros. As interfaces DMO definem métodos para o cliente descobrir os tipos suportados. Por exemplo, um DMO pode suportar vídeo RGB em qualquer profundidade de bits, enquanto outro pode suportar apenas RGB de 24 bits. Além disso, um DMO pode ser limitado a certas combinações de entradas e saídas. Por exemplo, se o tipo de entrada for vídeo de 16 bits, o fluxo de saída pode exigir a mesma profundidade de bits. O cliente pode enumerar os tipos preferidos de cada fluxo e, em seguida, testar combinações específicas.

Buffers

No modelo DMO padrão, o cliente aloca buffers de entrada e de saída separados. Ele preenche os buffers de entrada com dados e os entrega ao DMO, e o DMO grava novos dados nos buffers de saída.

Opcionalmente, um DMO pode suportar processamento "in-loco". Com o processamento in-loco, o DMO grava a saída diretamente no buffer de entrada, sobre os dados originais. O processamento in-loco elimina a necessidade de buffers separados. Por outro lado, altera os dados originais, o que pode não ser aceitável para algumas aplicações.

O modelo de buffer padrão (não in-loco) é suportado por meio da interfaceIMediaObject. Todos os DMOs devem implementar essa interface. Se um DMO suporta processamento in-loco, ele também expõe o IMediaObjectInPlace interface. O cliente é responsável por alocar todos os buffers, tanto de entrada quanto de saída.

Sobre os DMOs