Share via


Filtro contenedor DMO

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

El filtro contenedor DMO permite que una aplicación DirectShow use un objeto multimedia (DMO) de DirectX dentro de un gráfico de filtros. El filtro ajusta el DMO y controla todos los detalles del uso de DMO, como pasar datos hacia y desde DMO. Además, el filtro agrega el DMO, por lo que la aplicación puede consultar el filtro para cualquier interfaz COM que exponga el DMO.

Etiqueta Value
Interfaces de filtro IBaseFilter, IDMOWrapperFilter, IPersistStream
Tipos de medios de patillas de entrada Ver comentarios
Interfaces de patillas de entrada IMemInputPin, IPin, IQualityControl
Tipos de medios de anclaje de salida Ver comentarios
Interfaces de pin de salida IAMStreamConfig, IAMVideoCompression, IMediaPosition, IMediaSeeking, IPin, IQualityControl
Filtrar CLSID CLSID_DMOWrapperFilter
CLSID de página de propiedades No hay página de propiedades
Executable Qasf.dll
Mérito Ver comentarios
Categoría de filtro Ver comentarios

 

Observaciones

Limitaciones

El contenedor DMO tiene las siguientes limitaciones:

  • No admite DPO con cero entradas, varias entradas o cero salidas. (Admite DPO con una entrada y varias salidas).
  • No admite transportes personalizados. Todo el transporte de datos se realiza a través de la interfaz IMemInputPin .
  • No usa la interfaz IMediaObjectInPlace ; todo el procesamiento se realiza mediante métodos IMediaObject .

Chinchetas

Para cada flujo de entrada en DMO, el filtro crea un pin de entrada correspondiente. Para cada flujo de salida, crea un pin de salida correspondiente. Los tipos de medios que admite cada patilla dependen del DMO.

Interfaces de codificador

Si DMO es un codificador de vídeo o un codificador de audio, el pin de salida expone la interfaz IAMStreamConfig . Si DMO es un codificador de vídeo, el pin de salida también expone la interfaz IAMVideoCompression . En ambos casos, si el DMO admite la interfaz, el pin delega en el DMO. De lo contrario, el pin proporciona su propia implementación.

Streaming

El filtro usa la interfaz IMemInputPin para controlar todo el streaming. No admite conexiones IAsyncReader . El filtro llama a IMediaObject::P rocessOutput en el DMO solo cuando recibe datos de nivel superior (incluidas las notificaciones de fin de secuencia). Por lo tanto, no admite DPO con cero flujos de entrada.

Buscando

Todas las solicitudes de búsqueda se pasan al filtro ascendente, a través del primer pin de entrada del contenedor DMO. En el caso de las DPO de varias salidas, esto significa que el filtro ascendente puede recibir varias solicitudes de búsqueda cuando la aplicación busca el gráfico.

Mérito

DirectShow asigna a todas las DPO un valor de mérito predeterminado de MERIT_NORMAL + 0x800. Este valor se encuentra entre MERIT_NORMAL y MERIT_PREFERRED. Los filtros de descodificador suelen tener un valor de mérito de MERIT_NORMAL. Por lo tanto, el administrador de gráficos de filtros normalmente seleccionará un descodificador DMO en un filtro de descodificador. Para invalidar el valor de mérito predeterminado, agregue una entrada del Registro a la clave del Registro de DMO en HKEY_CLASSES_ROOT\CLSID. Incluya un valor DWORD denominado "Merit" cuyo valor especifique el mérito.

Category

El filtro contenedor DMO no aparece por sí mismo en ninguna categoría. Cuando encapsula un DMO, aparece en la categoría DirectShow que corresponde a la categoría de DMO, bajo el nombre de DMO.

Búferes

El filtro contenedor DMO pasa búferes multimedia a la DMO que expone la interfaz IMediaBuffer .

En Windows Vista o versiones posteriores, los búferes multimedia también exponen la interfaz IServiceProvider. DMO puede usar esta interfaz para obtener un puntero al ejemplo multimedia asociado al búfer. Use el identificador de servicio IID_IMediaSample. Un DMO de vídeo puede usar la interfaz IMediaSample2 del ejemplo multimedia para establecer marcas de interlace en el ejemplo. En el código siguiente se muestra cómo obtener el puntero al ejemplo multimedia:

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 obtener más información sobre las marcas de interlace por ejemplo, vea AM_SAMPLE2_PROPERTIES Structure.

Control de calidad

Si el DMO expone la interfaz IDMOQualityControl , el filtro traduce las llamadas IQualityControl::Notify en su pin de salida a las llamadas IDMOQualityControl::SetNow en el DMO. El parámetro rtNow de SetNow se calcula como la suma de los miembros TimeStamp y Late de la estructura Quality .

Uso de Fiter en GraphEdit

En GraphEdit, el filtro contenedor DMO no aparece bajo su propio nombre. En su lugar, cada DMO registrado aparece en la categoría de filtro adecuada. Al agregar un DMO a través del cuadro de diálogo Insertar filtros , GraphEdit crea el filtro contenedor DMO y lo configura para usar ese DMO.

Filtros directShow

Objetos multimedia de DirectX