Share via


IAsyncReader::Request-Methode (strmif.h)

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Die Request -Methode stellt eine asynchrone Anforderung für Daten in die Warteschlange.

Syntax

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

Parameter

pSample

Zeiger auf die IMediaSample-Schnittstelle eines vom Aufrufer bereitgestellten Medienbeispiels.

[in] dwUser

Gibt einen beliebigen Wert an, der zurückgegeben wird, wenn die Anforderung abgeschlossen ist.

Rückgabewert

Gibt einen HRESULT-Wert zurück. Die folgenden Werte sind möglich.

Rückgabecode BESCHREIBUNG
S_OK
Erfolg.
VFW_E_BADALIGN
Der Puffer ist nicht ordnungsgemäß ausgerichtet.
VFW_E_SAMPLE_TIME_NOT_SET
Das Beispiel war nicht zeitstempelt.
VFW_E_WRONG_STATE
Der Stift wird geleert.
HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)
Die angeforderte Startposition befindet sich am Ende der Datei.
E_OUTOFMEMORY
Nicht genügend Arbeitsspeicher.

Hinweise

Rufen Sie vor dem Aufrufen dieser Methode ein Medienbeispiel aus dem Zuteilungsgeber des Pins ab. Zeitstempel des Beispiels mit den Byteoffsets, die Sie anfordern, einschließlich erster und letzter, multipliziert mit 10.000.000. Byteoffsets sind relativ zum Anfang des Datenstroms.

Die Start- und Stopppositionen sollten mit der Ausrichtung übereinstimmen, die beim Verbinden der Pins festgelegt wurde. Andernfalls gibt die Methode möglicherweise VFW_E_BADALIGN zurück. Wenn die vereinbarte Ausrichtung gröber als die tatsächliche Ausrichtung des Streams ist, kann die Stoppposition die tatsächliche Dauer überschreiten. Wenn ja, rundet die Methode die Stoppposition auf die tatsächliche Ausrichtung ab.

Obwohl dies technisch eine Verletzung der COM-Regeln ist, muss der Aufrufer eine ausstehende Referenzanzahl für die Stichprobe hinterlassen. Die Request -Methode ruft weder AddRef noch Release auf, sodass die Verweisanzahl erforderlich ist, um das Beispiel aktiv zu halten.

Die -Methode gibt zurück, bevor die Anforderung abgeschlossen ist. Rufen Sie die IAsyncReader::WaitForNext-Methode auf, um auf die Anforderung zu warten. Verwenden Sie das originale Medienbeispiel nicht wieder, während die Anforderung aussteht. Die WaitForNext-Methode gibt einen Zeiger auf das ursprüngliche Beispiel zurück. Wenn die Anforderung erfolgreich war, enthält das Beispiel die angeforderten Daten. Die WaitForNext-Methode gibt auch den im dwUser-Parameter angegebenen Wert zurück. Der Aufrufer kann diesen Wert verwenden, um das Beispiel zu identifizieren.

Beispiele

Das folgende Beispiel zeigt eine mögliche Hilfsfunktion für einen Eingabenadel, um Anforderungen in die Warteschlange zu stellen:

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile strmif.h (include Dshow.h)
Bibliothek Strmiids.lib

Weitere Informationen

Fehler- und Erfolgscodes

IAsyncReader-Schnittstelle