Método CBaseInputPin.Receive

El Receive método recibe el siguiente ejemplo multimedia en la secuencia. Este método implementa el método IMemInputPin::Receive .

Sintaxis

HRESULT Receive(
   IMediaSample *pSample
);

Parámetros

pSample

Puntero a la interfaz IMediaSample del ejemplo.

Valor devuelto

Devuelve un valor HRESULT . Entre los valores posibles se incluyen los enumerados en la tabla siguiente.

Código devuelto Descripción
S_OK
Correcto.
S_FALSE
El pin está vaciado actualmente; se rechazó el ejemplo.
E_POINTER
Argumento de puntero NULL.
VFW_E_INVALIDMEDIATYPE
Tipo de medio no válido.
VFW_E_RUNTIME_ERROR
Error en tiempo de ejecución.
VFW_E_WRONG_STATE
El pin está detenido.

Observaciones

El pin de salida ascendente llama a este método para entregar un ejemplo al pin de entrada. El pin de entrada debe realizar una de las siguientes acciones:

  • Procese el ejemplo antes de devolverlo.
  • Devuelve y procesa el ejemplo en un subproceso de trabajo.
  • Rechace el ejemplo.

Si el pin usa un subproceso de trabajo para procesar el ejemplo, agregue un recuento de referencias al ejemplo dentro de este método. Una vez devuelto el método, la patilla ascendente libera el ejemplo. Cuando el recuento de referencias del ejemplo alcanza cero, el ejemplo vuelve al asignador para volver a usar.

Este método es sincrónico y puede bloquearse. Si el método puede bloquearse, el método CBaseInputPin::ReceiveCanBlock del pin debe devolver S_OK.

En la clase base, este método realiza los pasos siguientes:

  1. Llama al método CBaseInputPin::CheckStreaming para comprobar que el pin puede procesar muestras ahora. Si no puede, por ejemplo, si la patilla se detiene, se produce un error en el método.
  2. Recupera las propiedades de ejemplo y comprueba si el formato ha cambiado (consulte a continuación).
  3. Si el formato ha cambiado, el método llama al método CBasePin::CheckMediaType para determinar si el nuevo formato es aceptable.
  4. Si el nuevo formato no es aceptable, el método llama al método CBasePin::EndOfStream , publica un evento EC_ERRORABORT y devuelve un código de error.
  5. Suponiendo que no se produjeron errores, el método devuelve S_OK.

Pruebe un cambio de formato como se indica a continuación:

  • Si el ejemplo admite la interfaz IMediaSample2 , compruebe el miembro dwSampleFlags de la estructura AM_SAMPLE2_PROPERTIES . Si la marca AM_SAMPLE_TYPECHANGED está presente, el formato ha cambiado.
  • De lo contrario, si el ejemplo no admite IMediaSample2, llame al método IMediaSample::GetMediaType . Si el método devuelve un valor distinto de NULL , el formato ha cambiado.

En la clase base, este método no procesa el ejemplo. La clase derivada debe invalidar este método para realizar el procesamiento. (Lo que esto implica depende completamente del filtro). La clase derivada debe llamar al método de clase base para comprobar los errores descritos anteriormente.

Requisitos

Requisito Value
Encabezado
Amfilter.h (incluir Secuencias.h)
Biblioteca
Strmbase.lib (compilaciones comerciales);
Strmbasd.lib (compilaciones de depuración)

Consulte también

CBaseInputPin (clase)