Compartir a través de


Método IAsyncReader::Request (strmif.h)

[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 Request método pone en cola una solicitud asincrónica de datos.

Sintaxis

HRESULT Request(
       IMediaSample *pSample,
  [in] DWORD_PTR    dwUser
);

Parámetros

pSample

Puntero a la interfaz IMediaSample de un ejemplo multimedia proporcionado por el autor de la llamada.

[in] dwUser

Especifica un valor arbitrario que se devuelve cuando se completa la solicitud.

Valor devuelto

Devuelve un valor HRESULT . Estos son algunos de los valores posibles.

Código devuelto Descripción
S_OK
Correcto.
VFW_E_BADALIGN
El búfer no está alineado correctamente.
VFW_E_SAMPLE_TIME_NOT_SET
El ejemplo no tenía marca de tiempo.
VFW_E_WRONG_STATE
El pin está vaciado.
HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)
La posición de inicio solicitada ha pasado el final del archivo.
E_OUTOFMEMORY
Memoria insuficiente.

Comentarios

Antes de llamar a este método, recupere un ejemplo multimedia del asignador del pin. Marca de tiempo la muestra con los desplazamientos de bytes que solicita, primero y último inclusive, multiplicado por 10 000 000. Los desplazamientos de bytes son relativos al inicio de la secuencia.

Las posiciones de inicio y detención deben coincidir con la alineación que se decidió cuando se conectaron las patillas. De lo contrario, el método podría devolver VFW_E_BADALIGN. Si la alineación acordada es más gruesa que la alineación real de la secuencia, la posición de detención podría superar la duración real. Si es así, el método redondea la posición de detención hacia abajo hasta la alineación real.

Aunque técnicamente es una infracción de las reglas COM, el autor de la llamada debe dejar un recuento de referencias pendiente en el ejemplo. El Request método no llama a AddRef o Release, por lo que el recuento de referencias es necesario para mantener el ejemplo activo.

El método devuelve antes de que se complete la solicitud. Llame al método IAsyncReader::WaitForNext para esperar a la solicitud. No reutilice el ejemplo de medios original mientras la solicitud está pendiente. El método WaitForNext devuelve un puntero al ejemplo original. Si la solicitud se realizó correctamente, el ejemplo contiene los datos solicitados. El método WaitForNext también devuelve cualquier valor especificado en el parámetro dwUser . El autor de la llamada puede usar este valor para identificar el ejemplo.

Ejemplos

En el ejemplo siguiente se muestra una posible función auxiliar para un pin de entrada, para poner en cola las solicitudes:

C++
CMyPin::QueueSample(long cbFirst, long cbLast, DWORD_PTR dwuser)
{
    IMediaSample* pSample = NULL;
    HRESULT hr = m_pAlloc->GetBuffer(&pSample, NULL, NULL, 0);
    if (FAILED(hr)) 
    { 
        return hr; 
    }

    LONGLONG tStart = cbFirst * 10000000, tStop = cbLast * 10000000;
    hr = pSample->SetTime(&tStart, &tStop);
    if (SUCCEEDED(hr))
    {
        hr = m_pReader->Request(pSample, dwuser);
    }

    if (FAILED(hr))
    {
        pSample->Release();
    }
    return hr;
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado strmif.h (incluya Dshow.h)
Library Strmiids.lib

Consulte también

Códigos de error y éxito

IAsyncReader (interfaz)