IAsyncReader ::Request, méthode (strmif.h)

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

La Request méthode met en file d’attente une demande asynchrone de données.

Syntaxe

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

Paramètres

pSample

Pointeur vers l’interface IMediaSample d’un exemple de média fourni par l’appelant.

[in] dwUser

Spécifie une valeur arbitraire qui est retournée à la fin de la demande.

Valeur retournée

Retourne une valeur HRESULT . Les valeurs possibles sont les suivantes.

Code de retour Description
S_OK
Réussite.
VFW_E_BADALIGN
La mémoire tampon n’est pas alignée correctement.
VFW_E_SAMPLE_TIME_NOT_SET
L’échantillon n’a pas été horodaté.
VFW_E_WRONG_STATE
La broche est en cours de vidage.
HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)
La position de début demandée est au-delà de la fin du fichier.
E_OUTOFMEMORY
Mémoire insuffisante.

Remarques

Avant d’appeler cette méthode, récupérez un exemple de média à partir de l’allocateur de la broche. Horodatage de l’échantillon avec les décalages d’octets que vous demandez, premier et dernier inclus, multipliés par 10 000 000. Les décalages d’octets sont relatifs au début du flux.

Les positions de début et d’arrêt doivent correspondre à l’alignement qui a été décidé lors de la connexion des broches. Sinon, la méthode peut retourner VFW_E_BADALIGN. Si l’alignement convenu est plus grosseur que l’alignement réel du flux, la position d’arrêt peut dépasser la durée réelle. Si c’est le cas, la méthode arrondit la position d’arrêt à l’alignement réel.

Bien qu’il s’agisse techniquement d’une violation des règles COM, l’appelant doit laisser un nombre de références en suspens sur l’échantillon. La Request méthode n’appelle pas AddRef ou Release. Le nombre de références est donc nécessaire pour maintenir l’exemple actif.

La méthode retourne avant la fin de la requête. Appelez la méthode IAsyncReader ::WaitForNext pour attendre la demande. Ne réutilisez pas l’exemple de média d’origine pendant que la demande est en attente. La méthode WaitForNext retourne un pointeur vers l’exemple d’origine. Si la demande a réussi, l’exemple contient les données demandées. La méthode WaitForNext retourne également la valeur spécifiée dans le paramètre dwUser . L’appelant peut utiliser cette valeur pour identifier l’exemple.

Exemples

L’exemple suivant montre une fonction d’assistance possible pour une broche d’entrée, pour mettre en file d’attente les demandes :

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête strmif.h (include Dshow.h)
Bibliothèque Strmiids.lib

Voir aussi

Codes d’erreur et de réussite

IAsyncReader, interface