DirectShow DirectShow 레퍼런스 DirectShow base class base class 레퍼런스 CPosPassThru [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
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();
}
특별히 거절하지 않는 이상 이 클래스의 모든 IMediaPosition 와 IMediaSeeking 메서드는 접속하고 있는 핀의 대응하는 메서드를 호출해, 결과를 돌려준다.
요건
헤더: 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 개체를 생성 한다. |