Compartilhar via


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

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

O Request método enfileira uma solicitação assíncrona de 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 que é 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
A amostra não tinha carimbo de data/hora.
VFW_E_WRONG_STATE
O pino está sendo liberado.
HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)
A posição inicial solicitada está além 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 de início e parada devem corresponder ao alinhamento que foi decidido quando os pinos se conectaram. Caso contrário, o método poderá 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ência é 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 for 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 para um pin 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

Requisito Valor
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