Condividi tramite


Metodo IAsyncReader::Request (strmif.h)

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Il Request metodo accoda una richiesta asincrona per i dati.

Sintassi

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

Parametri

pSample

Puntatore all'interfaccia IMediaSample di un esempio multimediale fornito dal chiamante.

[in] dwUser

Specifica un valore arbitrario restituito al termine della richiesta.

Valore restituito

Restituisce un valore HRESULT . Di seguito sono indicati alcuni valori possibili.

Codice restituito Descrizione
S_OK
Operazione completata.
VFW_E_BADALIGN
Il buffer non è allineato correttamente.
VFW_E_SAMPLE_TIME_NOT_SET
L'esempio non è stato contrassegnato come timestamp.
VFW_E_WRONG_STATE
Il pin sta scaricando.
HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)
La posizione iniziale richiesta è passata alla fine del file.
E_OUTOFMEMORY
Memoria insufficiente.

Commenti

Prima di chiamare questo metodo, recuperare un esempio multimediale dall'allocatore del pin. Timestamp dell'esempio con gli offset di byte richiesti, primo e ultimo inclusivo, moltiplicato per 10.000.000. Gli offset di byte sono relativi all'inizio del flusso.

Le posizioni di inizio e arresto devono corrispondere all'allineamento deciso quando i pin sono connessi. In caso contrario, il metodo potrebbe restituire VFW_E_BADALIGN. Se l'allineamento concordato è più grossolano rispetto all'allineamento effettivo del flusso, la posizione di arresto potrebbe superare la durata reale. In tal caso, il metodo arrotonda la posizione di arresto fino all'allineamento effettivo.

Sebbene sia tecnicamente una violazione delle regole COM, il chiamante deve lasciare un numero di riferimenti in sospeso sull'esempio. Il Request metodo non chiama AddRef o Release, quindi il conteggio dei riferimenti è necessario per mantenere attivo l'esempio.

Il metodo restituisce prima del completamento della richiesta. Chiamare il metodo IAsyncReader::WaitForNext per attendere la richiesta. Non riutilizzare l'esempio multimediale originale mentre la richiesta è in sospeso. Il metodo WaitForNext restituisce un puntatore all'esempio originale. Se la richiesta ha esito positivo, l'esempio contiene i dati richiesti. Il metodo WaitForNext restituisce anche qualsiasi valore specificato nel parametro dwUser . Il chiamante può usare questo valore per identificare l'esempio.

Esempio

Nell'esempio seguente viene illustrata una possibile funzione helper per un pin di input, per le richieste di coda:

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;
}

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione strmif.h (include Dshow.h)
Libreria Strmiids.lib

Vedi anche

Codici errore e esito positivo

Interfaccia IAsyncReader