DirectShow DirectShow 레퍼런스 DirectShow base class base class 레퍼런스 CPosPassThru   [목차열람] [주소복사] [슬롯비우기]
CPosPassThru 클래스
 
Microsoft DirectX 9.0

CPosPassThru 클래스

CPosPassThru Base 클래스의 계층

CPosPassThru 클래스는, 변환 필터에 대한 시크 커멘드를 업 스트림에 있는 다음의 필터에 건네주어 처리한다.

애플리케이션이 필터 그래프를 시크 할 때 필터 그래프 매니저는 시크 커멘드를 렌더러 필터에 건네준다. 커멘드는, 커멘드를 실행할 수 있는 필터 (만약 있으면)에 도달할 때까지, 각 필터의 출력 핀을 통해 업 스트림에게 건네진다. 더 자세한 정보는, 「시크」를 참조할것. 다음 그림이 나타내듯CPosPassThru 클래스는 모든 시크 커멘드를 업 스트림 필터의 출력 핀에 보낸다.

CPosPassThru 클래스는 시크 커멘드를 업 스트림에 보낸다

이 클래스는 base class 라이브러리에서 제공되고 있지만, DirectShow 에서는 Quartz.dll 에서도 같은 클래스를 제공하고 있다. Quartz.dll 버전을 사용하면 이 클래스는 실행시에 DLL 로부터 로드 되기 (위해)때문에, 필터의 코드 사이즈를 약간 삭감할 수 있다. 그 버전을 사용하려면 ,CreatePosPassThru 함수를 호출한다.

출력 핀의 NonDelegatingQueryInterface 메서드는, 요구된 인터페이스가 IMediaSeeking 또는 IMediaPosition 인 경우는,CPosPassThru 개체에 위임한다. 이것을 다음 코드에 나타낸다.

// 다음의 멤버 변수가 가정되고 있다 :
IPin *m_pInput;    // 필터의 입력 핀의 포인터.
IUnknown *m_pPos;  // CPosPassThru 개체의 포인터.

STDMETHODIMP CMyPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
{
    HRESULT hr
    if (riid == IID_IMediaPosition || riid == IID_IMediaSeeking) 
    {
        if (m_pPos == NULL) 
        {
                        // CPosPassThru 개체를 아직 생성 하고 있지 않다.  여기서 생성 한다.
            hr = CreatePosPassThru(GetOwner(), FALSE, m_pInput, &m_pPos);
            if (FAILED(hr)) return hr;
        }
        return m_pPos->QueryInterface(riid, ppv);
    } 
    else
    {
                  // 그 외의 인터페이스 (생략).
    }
}

~CMyPin::CMyPin() 
{
        // CPosPassThruObject 를 릴리즈 한다.
    if (m_pPos != NULL) m_pPos->Release();
}

특별히 거절하지 않는 이상 이 클래스의 모든 IMediaPositionIMediaSeeking 메서드는 접속하고 있는 핀의 대응하는 메서드를 호출해, 결과를 돌려준다.

요건

헤더: Ctlutil.h 로 선언해, Streams.h 를 인클루드 한다.

라이브러리: Strmbase.lib (리테일 빌드) 또는 Strmbasd.lib (디버그 빌드).

퍼블릭 메서드  
CPosPassThru 생성자 메서드.
ForceRefresh 사용되지 않았다.
GetMediaTime 현재의 샘플의 타임 스탬프를 얻어온다. 가상.
IMediaPosition 메서드  
get_Duration 스트림의 시간폭을 얻어온다.
put_CurrentPosition 스트림의 시간폭을 기준으로서 현재의 위치를 설정한다.
get_StopTime 스트림의 시간폭을 기준으로서 재생이 정지하는 타임을 얻어온다.
put_StopTime 스트림의 전시간폭을 기준으로서 재생이 정지하는 시간을 설정한다.
get_PrerollTime 시작 위치전에 큐에 들어가는 데이터의 양을 얻어온다.
put_PrerollTime 시작 위치전에 큐에 들어가는 데이터의 양을 설정한다.
get_Rate 재생 속도를 얻어온다.
put_Rate 재생 속도를 설정한다.
get_CurrentPosition 스트림의 합계 시간폭을 기준으로 하는, 현재의 위치를 얻어온다.
CanSeekForward 스트림이 역방향으로 시크 할 수 있을지 어떨지를 확인한다.
CanSeekBackward 스트림이 순서 방향으로 시크 할 수 있을지 어떨지를 확인한다.
IMediaSeeking 메서드  
CheckCapabilities 지정한 시크 능력을 스트림이 가지고 있을지 어떨지를 문의한다.
ConvertTimeFormat 1 개의 타임 포맷화등별의 타임 포맷으로 변환한다.
GetAvailable 시크가 유효한 타임의 범위를 얻어온다.
GetCapabilities 스트림의 모든 시크 능력을 얻어온다.
GetCurrentPosition 스트림의 합계 시간폭을 기준으로 하는, 현재의 위치를 얻어온다.
GetDuration 스트림의 시간폭을 얻어온다.
GetPositions 스트림의 합계 시간폭을 기준으로 하는, 현재의 위치와 정지 위치를 얻어온다.
GetPreroll 시작 위치전에 큐에 들어가는 데이터의 양을 얻어온다.
GetRate 재생 속도를 얻어온다.
GetStopPosition 스트림의 시간폭을 기준으로서 재생이 정지하는 타임을 얻어온다.
GetTimeFormat 현재의 타임 포맷을 얻어온다.
IsFormatSupported 지정한 타임 포맷이 지원 되고 있는지를 확인한다.
IsUsingTimeFormat 지정한 타임 포맷이 현재 사용되고 있는 포맷화 제발을 확인한다.
QueryPreferredFormat 스트림의 우선 타임 포맷을 얻어온다.
SetPositions 현재 위치와 정지 위치를 설정한다.
SetRate 재생 속도를 설정한다.
SetTimeFormat 타임 포맷을 설정한다.
헬퍼-함수  
CreatePosPassThru CPosPassThru 개체 또는 CRendererPosPassThru 개체를 생성 한다.

↑TOP