[이 페이지와 연결된 기능인 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 개체를 만듭니다. |
요구 사항
| 요구 사항 | 값 |
|---|---|
| 헤더 |
|
| 라이브러리 |
|