CPosPassThru 클래스

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

cpospassthru 기본 클래스 계층 구조

클래스 핸들은 CPosPassThru 다음 필터에 업스트림 전달하여 변환 필터에 대한 seek 명령을 처리합니다.

애플리케이션이 필터 그래프를 찾으면 Filter Graph Manager는 렌더러 필터에 seek 명령을 제공합니다. 명령은 명령을 실행할 수 있는 필터에 도달할 때까지 각 필터의 출력 핀을 통해 업스트림 전달됩니다(있는 경우). 자세한 내용은 검색을 참조하세요. 클래스는 CPosPassThru 다음 다이어그램과 같이 모든 seek 명령을 업스트림 필터의 출력 핀에 전달합니다.

cpospassthru 클래스는 업스트림 seek 명령을 보냅니다.

이 클래스는 기본 클래스 라이브러리에 제공되지만 DirectShow는 Quartz.dll 동일한 클래스도 제공합니다. Quartz.dll 버전을 사용하면 클래스가 DLL에서 런타임에 로드되기 때문에 필터의 코드 크기를 다소 줄일 수 있습니다. 해당 버전을 사용하려면 CreatePosPassThru 함수를 호출합니다.

다음 코드와 같이 출력 핀의 NonDelegatingQueryInterface 메서드에서 요청된 인터페이스가 IMediaSeeking 또는 IMediaPosition일 때마다 CPosPassThru 개체에 위임합니다.

// The following member variables are assumed:
IPin *m_pInput;    // Pointer to the input pin on your filter.
IUnknown *m_pPos;  // Pointer to the CPosPassThru object.

STDMETHODIMP CMyPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
{
    HRESULT hr
    if (riid == IID_IMediaPosition || riid == IID_IMediaSeeking) 
    {
        if (m_pPos == NULL) 
        {
            // We have not created the CPosPassThru object yet. Do so now.
            hr = CreatePosPassThru(GetOwner(), FALSE, m_pInput, &m_pPos);
            if (FAILED(hr)) return hr;
        }
        return m_pPos->QueryInterface(riid, ppv);
    } 
    else
    {
         // Other interfaces (not shown).
    }
}

~CMyPin::CMyPin() 
{
    // Release the CPosPassThruObject.
    if (m_pPos != NULL) m_pPos->Release();
}

언급된 경우를 제외하고 이 클래스의 모든 IMediaPositionIMediaSeeking 메서드는 연결된 핀에서 해당 메서드를 호출하고 결과를 반환합니다.

Public 메서드 Description
CPosPassThru 생성자 메서드입니다.
ForceRefresh 사용되지 않습니다.
GetMediaTime 현재 샘플에서 타임스탬프를 검색합니다. 가상.
IMediaPosition 메서드 Description
get_Duration 스트림의 기간을 검색합니다.
put_CurrentPosition 스트림의 총 기간을 기준으로 현재 위치를 설정합니다.
get_StopTime 스트림의 지속 시간을 기준으로 재생이 중지되는 시간을 검색합니다.
put_StopTime 스트림 기간을 기준으로 재생이 중지되는 시간을 설정합니다.
get_PrerollTime 시작 위치 전에 큐에 대기할 데이터의 양을 검색합니다.
put_PrerollTime 시작 위치 전에 큐에 대기할 데이터의 양을 설정합니다.
get_Rate 재생 속도를 검색합니다.
put_Rate 재생 속도를 설정합니다.
get_CurrentPosition 스트림의 총 기간을 기준으로 현재 위치를 검색합니다.
CanSeekForward 스트림을 뒤로 검색할 수 있는지 여부를 결정합니다.
CanSeekBackward 스트림을 앞으로 검색할 수 있는지 여부를 결정합니다.
IMediaSeeking 메서드 Description
CheckCapabilities 스트림이 검색 기능을 지정했는지 여부를 쿼리합니다.
ConvertTimeFormat 한 시간 형식에서 다른 형식으로 변환합니다.
GetAvailable 검색이 효율적인 시간 범위를 검색합니다.
GetCapabilities 스트림의 모든 검색 기능을 검색합니다.
GetCurrentPosition 스트림의 총 기간을 기준으로 현재 위치를 검색합니다.
GetDuration 스트림의 기간을 검색합니다.
GetPositions 스트림의 총 기간을 기준으로 현재 위치 및 중지 위치를 검색합니다.
GetPreroll 시작 위치 전에 큐에 대기할 데이터의 양을 검색합니다.
GetRate 재생 속도를 검색합니다.
GetStopPosition 스트림의 지속 시간을 기준으로 재생이 중지되는 시간을 검색합니다.
GetTimeFormat 현재 시간 형식을 검색합니다.
IsFormatSupported 지정된 시간 형식이 지원되는지 여부를 결정합니다.
IsUsingTimeFormat 지정된 시간 형식이 현재 사용 중인 형식인지 여부를 확인합니다.
QueryPreferredFormat 스트림의 기본 설정 시간 형식을 검색합니다.
SetPositions 현재 위치와 중지 위치를 설정합니다.
SetRate 재생 속도를 설정합니다.
SetTimeFormat 시간 형식을 설정합니다.
도우미 함수 Description
CreatePosPassThru CPosPassThru 또는 CRendererPosPassThru 개체를 만듭니다.

요구 사항

요구 사항
헤더
Ctlutil.h(Streams.h 포함)
라이브러리
Strmbase.lib(소매 빌드);
Strmbasd.lib(디버그 빌드)