Compartilhar via


Filtro de wrapper de DMO

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture 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 wrapper de DMO permite que um aplicativo DirectShow use um DMO (DirectX Media Object) em um grafo de filtro. O filtro encapsula o DMO e manipula todos os detalhes do uso do DMO, como passar 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 expostas pelo DMO.

Etiqueta Valor
Interfaces de filtro IBaseFilter, IDMOWrapperFilter, IPersistStream
Tipos de mídia de pino de entrada Ver Comentários
Interfaces de pin 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
CLSID da página de propriedades Nenhuma página de propriedade
Executável Qasf.dll
de Mérito Ver Comentários
de categoria de filtro de Ver Comentários

 

Observações

Limitações

O Wrapper de DMO tem as seguintes limitações:

  • Ele não dá suporte a DMOs com zero entradas, várias entradas ou zero saídas. (Ele dá suporte a DMOs com uma entrada e várias saídas.)
  • Ele não dá suporte a transportes personalizados. Todo o transporte de dados é feito por meio da interface deIMemInputPin.
  • Ele não usa a interface de IMediaObjectInPlace; todo o processamento é feito usando métodosIMediaObject.

Pinos

Para cada fluxo de entrada no DMO, o filtro cria um pin de entrada correspondente. Para cada fluxo de saída, ele cria um pino de saída correspondente. Os tipos de mídia compatíveis com cada pin 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 exporá a interfaceIAMStreamConfig. Se o DMO for um codificador de vídeo, o pino de saída também exporá a interfaceIAMVideoCompression. Em ambos os casos, se o DMO der suporte à interface, o pin delega para o DMO. Caso contrário, o pin fornece sua própria implementação.

Streaming

O filtro usa a interface deIMemInputPinpara lidar com todo o streaming. Ele não dá suporte a conexões deIAsyncReader. O filtro chama IMediaObject::P rocessOutput no DMO somente quando recebe dados de upstream (incluindo notificações de fim de fluxo). Portanto, ele não dá suporte a DMOs sem fluxos de entrada.

Procurando

Todas as solicitações de busca são passadas para o filtro upstream, por meio do primeiro pin de entrada no Wrapper de DMO. Para DMOs de várias saídas, isso significa que o filtro upstream pode receber várias solicitações de busca quando o aplicativo busca o grafo.

Mérito

O DirectShow atribui a todos os DMOs um valor de mérito padrão de MERIT_NORMAL + 0x800. Esse valor fica entre MERIT_NORMAL e MERIT_PREFERRED. Os filtros de decodificador geralmente têm um valor de mérito de MERIT_NORMAL. Portanto, o gerenciador de grafo de filtro geralmente selecionará um decodificador DMO em um filtro de decodificador. Para substituir o valor de mérito padrão, adicione uma entrada do Registro à chave do Registro do DMO em HKEY_CLASSES_ROOT\CLSID. Inclua um valor DWORD chamado "Merit" cujo valor especifica o mérito.

Categoria

O filtro wrapper de DMO não aparece por si só em nenhuma categoria. Quando ele encapsula um DMO, ele aparece na categoria DirectShow que corresponde à categoria do DMO, sob o nome do DMO.

Buffers

O filtro Wrapper de DMO passa buffers de mídia para o DMO que expõem a interface deIMediaBuffer.

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 associado ao buffer. Use o identificador de serviço IID_IMediaSample. Um DMO de vídeo pode usar a interface deIMediaSample2 do exemplo de mídia para definir sinalizadores de entrelaçamento no exemplo. 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 exemplo, consulte AM_SAMPLE2_PROPERTIES Structure.

Controle de qualidade

Se o DMO expor a interface deIDMOQualityControl, o filtro converterá chamadas IQualityControl::Notify em seu pin de saída em chamadas IDMOQualityControl::SetNow no DMO. O parâmetro rtNow do SetNow é calculado como a soma dos membros TimeStamp e Late da estrutura dede Qualidade do.

Usando o Fiter no GraphEdit

No GraphEdit, o filtro wrapper de DMO não aparece em seu próprio nome. Em vez disso, cada DMO registrado é listado na categoria de filtro apropriada. Quando você adiciona um DMO por meio da caixa de diálogo Inserir Filtros, o GraphEdit cria o filtro de Wrapper de DMO e o configura para usar esse DMO.

de Filtros do DirectShow

de objetos de mídia DirectX