CPosPassThru 클래스
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
클래스 핸들은 CPosPassThru
다음 필터에 업스트림 전달하여 변환 필터에 대한 seek 명령을 처리합니다.
애플리케이션이 필터 그래프를 찾으면 Filter Graph Manager는 렌더러 필터에 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();
}
언급된 경우를 제외하고 이 클래스의 모든 IMediaPosition 및 IMediaSeeking 메서드는 연결된 핀에서 해당 메서드를 호출하고 결과를 반환합니다.
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 개체를 만듭니다. |
요구 사항
요구 사항 | 값 |
---|---|
헤더 |
|
라이브러리 |
|