Método CBaseInputPin.Receive
[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 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 |
---|---|
|
Correcto. |
|
El pin está vacíando actualmente; se rechazó el ejemplo. |
|
Argumento de puntero NULL. |
|
Tipo de medio no válido. |
|
Error en tiempo de ejecución. |
|
El pin se detiene. |
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. Después de que el método vuelva, la patilla ascendente libera el ejemplo. Cuando el recuento de referencias del ejemplo alcanza cero, el ejemplo vuelve al asignador para su reutilización.
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:
- Llama al método CBaseInputPin::CheckStreaming para comprobar que el pin puede procesar ejemplos ahora. Si no puede, por ejemplo, si se detiene el pin, se produce un error en el método.
- Recupera las propiedades de ejemplo y comprueba si el formato ha cambiado (consulte a continuación).
- Si el formato ha cambiado, el método llama al método CBasePin::CheckMediaType para determinar si el nuevo formato es aceptable.
- Si el nuevo formato no es aceptable, el método llama al método CBasePin::EndOfStream , publica un evento de EC_ERRORABORT y devuelve un código de error.
- Suponiendo que no hubo errores, el método devuelve S_OK.
Pruebe un cambio de formato de la siguiente manera:
- 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 |
|
Biblioteca |
|