다음을 통해 공유


IAsyncReader::Request 메서드(strmif.h)

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

메서드는 Request 데이터에 대한 비동기 요청을 큐에 대기합니다.

구문

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

매개 변수

pSample

호출자가 제공하는 미디어 샘플의 IMediaSample 인터페이스에 대한 포인터입니다.

[in] dwUser

요청이 완료되면 반환되는 임의의 값을 지정합니다.

반환 값

HRESULT 값을 반환합니다. 가능한 값은 다음과 같습니다.

반환 코드 Description
S_OK
성공.
VFW_E_BADALIGN
버퍼가 올바르게 정렬되지 않았습니다.
VFW_E_SAMPLE_TIME_NOT_SET
샘플에 타임스탬프를 지정하지 않았습니다.
VFW_E_WRONG_STATE
핀이 플러시되고 있습니다.
HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)
요청된 시작 위치가 파일의 끝을 지났습니다.
E_OUTOFMEMORY
메모리가 부족합니다.

설명

이 메서드를 호출하기 전에 핀의 할당자에서 미디어 샘플을 검색합니다. 요청하는 바이트 오프셋이 있는 샘플 타임스탬프(첫 번째 및 마지막 포함)에 10,000,000을 곱합니다. 바이트 오프셋은 스트림의 시작을 기준으로 합니다.

시작 및 중지 위치는 핀이 연결되었을 때 결정된 맞춤과 일치해야 합니다. 그렇지 않으면 메서드가 VFW_E_BADALIGN 반환할 수 있습니다. 합의된 맞춤이 스트림의 실제 맞춤보다 거친 경우 중지 위치가 실제 기간을 초과할 수 있습니다. 이 경우 메서드는 중지 위치를 실제 맞춤으로 반올림합니다.

기술적으로는 COM 규칙을 위반하지만 호출자는 샘플에 미해결 참조 횟수를 남겨 두어야 합니다. 메서드는 RequestAddRef 또는 Release를 호출하지 않으므로 샘플을 활성 상태로 유지하려면 참조 수가 필요합니다.

메서드는 요청이 완료되기 전에 를 반환합니다. IAsyncReader::WaitForNext 메서드를 호출하여 요청을 기다립니다. 요청이 보류 중인 동안에는 원래 미디어 샘플을 다시 사용하지 마세요. WaitForNext 메서드는 원래 샘플에 대한 포인터를 반환합니다. 요청이 성공하면 샘플에 요청된 데이터가 포함됩니다. 또한 WaitForNext 메서드는 dwUser 매개 변수에 지정된 값을 반환합니다. 호출자는 이 값을 사용하여 샘플을 식별할 수 있습니다.

예제

다음 예제에서는 큐 요청에 대한 입력 핀에 대한 가능한 도우미 함수를 보여 줍니다.

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

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 strmif.h(Dshow.h 포함)
라이브러리 Strmiids.lib

추가 정보

오류 및 성공 코드

IAsyncReader 인터페이스