Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
[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.]
O filtro DMO Wrapper permite que um aplicativo DirectShow use um DirectX Media Object (DMO) dentro de um gráfico de filtro. O filtro envolve o DMO e lida com todos os detalhes do uso do DMO, como a passagem de dados de e para o DMO. Além disso, o filtro agrega o DMO, para que o aplicativo possa consultar o filtro para quaisquer interfaces COM que o DMO expõe.
| Rótulo | Valor |
|---|---|
| Interfaces de filtro | IBaseFilter, IDMOWrapperFilter, IPersistStream |
| Tipos de mídia de pino de entrada | Ver comentários |
| Interfaces de pino de entrada | IMemInputPin, IPin, IQualityControl |
| Tipos de mídia de pino de saída | Ver comentários |
| Interfaces de pino de saída | IAMStreamConfig, IAMVideoCompression, IMediaPosition, IMediaSeeking, IPin, IQualityControl |
| Filtrar CLSID | CLSID_DMOWrapperFilter |
| Página de propriedade CLSID | Nenhuma página de propriedade |
| Executável | Qasf.dll |
| Mérito | Ver comentários |
| Categoria de filtro | Ver comentários |
Comentários
Limitações
O DMO Wrapper tem as seguintes limitações:
- Ele não suporta DMOs com zero entradas, várias entradas ou zero saídas. (Ele suporta DMOs com uma entrada e várias saídas.)
- Não suporta transportes personalizados. Todo o transporte de dados é feito através da interfaceIMemInputPin.
- Ele não usa o IMediaObjectInPlace interface; todo o processamento é feito usando IMediaObject métodos.
Alfinetes
Para cada fluxo de entrada no DMO, o filtro cria um pino de entrada correspondente. Para cada fluxo de saída, ele cria um pino de saída correspondente. Os tipos de mídia suportados por cada pino dependem do DMO
Interfaces do codificador
Se o DMO for um codificador de vídeo ou um codificador de áudio, o pino de saída expõe o interface IAMStreamConfig. Se o DMO for um codificador de vídeo, o pino de saída também expõe a interfaceIAMVideoCompression . Em ambos os casos, se o DMO suportar a interface, o pino delega ao DMO. Caso contrário, o pino fornece sua própria implementação.
Transmissão
O filtro usa o IMemInputPin interface para lidar com todo o streaming. Ele não suporta conexões IAsyncReader. O filtro chama IMediaObject::P rocessOutput no DMO somente quando ele recebe dados do upstream (incluindo notificações de fim de fluxo). Portanto, ele não suporta DMOs com fluxo de entrada zero.
Procura
Todas as solicitações de busca são passadas para o filtro upstream, através do primeiro pino de entrada no DMO Wrapper. Para DMOs de várias saídas, isso significa que o filtro upstream pode receber várias solicitações de busca quando o aplicativo procura o gráfico.
Mérito
O DirectShow atribui a todos os DMOs um valor de mérito padrão de MERIT_NORMAL + 0x800. Este valor situa-se entre MERIT_NORMAL e MERIT_PREFERRED. Os filtros descodificadores têm geralmente um valor de mérito de MERIT_NORMAL. Portanto, o gerenciador de gráficos de filtro geralmente selecionará um decodificador DMO em vez de um filtro decodificador. Para substituir o valor de mérito padrão, adicione uma entrada do Registro à chave do Registro do DMO no HKEY_CLASSES_ROOT\CLSID. Inclua um DWORD valor chamado "Mérito" cujo valor especifica o mérito.
Categoria
O filtro DMO Wrapper não aparece sozinho em nenhuma categoria. Quando ele envolve um DMO, ele aparece na categoria DirectShow que corresponde à categoria do DMO, sob o nome do DMO.
Buffers
O filtro DMO Wrapper passa buffers de mídia para o DMO que expõem o IMediaBuffer interface.
No Windows Vista ou posterior, os buffers de mídia também expõem a interface IServiceProvider. O DMO pode usar essa interface para obter um ponteiro para o exemplo de mídia que está associado ao buffer. Use o identificador de serviço IID_IMediaSample. Um DMO de vídeo pode usar a interface deIMediaSample2amostra de mídia para definir sinalizadores de entrelaçamento na amostra. O código a seguir mostra como obter o ponteiro para o exemplo de mídia:
IServiceProvider *pSp = NULL;
IMediaSample2 *pSample2 = NULL;
HRESULT hr = S_OK;
hr = pBuffer->QueryInterface(IID_IServiceProvider, (void**)&pSp);
if (SUCCEEDED(hr))
{
hr = pSp->QueryService(
IID_IMediaSample, // Service identifier.
IID_IMediaSample2, // Interface identifier.
(void**)&pSample2
);
if (SUCCEEDED(hr))
{
// Set flags (not shown).
pSample2->Release();
}
pSp->Release();
}
Para obter mais informações sobre sinalizadores de entrelaçamento por amostra, consulte AM_SAMPLE2_PROPERTIES Structure.
Controlo de Qualidade
Se o DMO expõe o IDMOQualityControl interface, o filtro traduz IQualityControl::Notify chama seu pino de saída para IDMOQualityControl::SetNow chama o DMO. O parâmetro rtNow de SetNow é calculado como a soma dos TimeStamp e membros Late da estrutura Quality.
Usando o Fiter no GraphEdit
No GraphEdit, o filtro DMO Wrapper não aparece sob seu próprio nome. Em vez disso, cada DMO registrado é listado na categoria de filtro apropriada. Quando você adiciona um DMO através da caixa de diálogo Inserir Filtros, o GraphEdit cria o filtro DMO Wrapper e o configura para usar esse DMO.
Tópicos relacionados