This topic has not yet been rated - Rate this topic

IAsyncReader::Request method

The Request method queues an asynchronous request for data.

Syntax


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

Parameters

pSample

Pointer to the IMediaSample interface of a media sample provided by the caller.

dwUser [in]

Specifies an arbitrary value that is returned when the request completes.

Return value

Returns an HRESULT value. Possible values include the following.

Return codeDescription
S_OK

Success.

VFW_E_BADALIGN

The buffer is not aligned correctly.

VFW_E_SAMPLE_TIME_NOT_SET

The sample was not time stamped.

VFW_E_WRONG_STATE

The pin is flushing.

HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)

The requested start position is past the end of the file.

E_OUTOFMEMORY

Insufficient memory.

 

Remarks

Before calling this method, retrieve a media sample from the pin's allocator. Time stamp the sample with the byte offsets you are requesting, first and last inclusive, multiplied by 10,000,000. Byte offsets are relative to the start of the stream.

The start and stop positions should match the alignment that was decided when the pins connected. Otherwise, the method might return VFW_E_BADALIGN. If the agreed alignment is coarser than the actual alignment of the stream, the stop position might exceed the real duration. If so, the method rounds the stop position down to the actual alignment.

Although it is technically a violation of COM rules, the caller must leave an outstanding reference count on the sample. The Request method does not call AddRef or Release, so the reference count is needed to keep the sample active.

The method returns before the request completes. Call the IAsyncReader::WaitForNext method to wait for the request. Do not reuse the original media sample while the request is pending. The WaitForNext method returns a pointer to the original sample. If the request succeeded, the sample contains the requested data. The WaitForNext method also returns whatever value is specified in the dwUser parameter. The caller can use this value to identify the sample.

Examples

The following example shows a possible helper function for an input pin, to queue requests:



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


Requirements

Minimum supported client

Windows 2000 Professional [desktop apps only]

Minimum supported server

Windows 2000 Server [desktop apps only]

Header

Strmif.h (include Dshow.h)

Library

Strmiids.lib

See also

Error and Success Codes
IAsyncReader Interface

 

 

Send comments about this topic to Microsoft

Build date: 11/21/2012

Did you find this helpful?
(1500 characters remaining)

Community Additions

ADD
© 2013 Microsoft. All rights reserved.