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

O Request método enfileira uma solicitação assíncrona para dados.

Sintaxe

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

Parâmetros

pSample

Ponteiro para a interface IMediaSample de um exemplo de mídia fornecido pelo chamador.

[in] dwUser

Especifica um valor arbitrário retornado quando a solicitação é concluída.

Retornar valor

Retorna um valor HRESULT . Os possíveis valores incluem os seguintes.

Código de retorno Descrição
S_OK
Êxito.
VFW_E_BADALIGN
O buffer não está alinhado corretamente.
VFW_E_SAMPLE_TIME_NOT_SET
O exemplo não estava carimbado.
VFW_E_WRONG_STATE
O pino está liberando.
HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)
A posição inicial solicitada já passou do final do arquivo.
E_OUTOFMEMORY
Memória insuficiente.

Comentários

Antes de chamar esse método, recupere um exemplo de mídia do alocador do pino. Carimbo de data/hora do exemplo com os deslocamentos de bytes que você está solicitando, primeiro e último inclusivo, multiplicado por 10.000.000. Os deslocamentos de bytes são relativos ao início do fluxo.

As posições iniciar e parar devem corresponder ao alinhamento que foi decidido quando os pinos estão conectados. Caso contrário, o método pode retornar VFW_E_BADALIGN. Se o alinhamento acordado for mais grosseiro do que o alinhamento real do fluxo, a posição de parada poderá exceder a duração real. Nesse caso, o método arredonda a posição de parada para baixo até o alinhamento real.

Embora seja tecnicamente uma violação das regras COM, o chamador deve deixar uma contagem de referência pendente no exemplo. O Request método não chama AddRef ou Release, portanto, a contagem de referências é necessária para manter o exemplo ativo.

O método retorna antes da conclusão da solicitação. Chame o método IAsyncReader::WaitForNext para aguardar a solicitação. Não reutilize o exemplo de mídia original enquanto a solicitação estiver pendente. O método WaitForNext retorna um ponteiro para o exemplo original. Se a solicitação tiver sido bem-sucedida, o exemplo conterá os dados solicitados. O método WaitForNext também retorna qualquer valor especificado no parâmetro dwUser . O chamador pode usar esse valor para identificar o exemplo.

Exemplos

O exemplo a seguir mostra uma possível função auxiliar de um pino de entrada para solicitações de fila:

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

   
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho strmif.h (inclua Dshow.h)
Biblioteca Strmiids.lib

Confira também

Códigos de erro e êxito

IAsyncReader Interface