IMediaSeeking::SetPositions 메서드(strmif.h)
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
메서드는 SetPositions
현재 위치와 중지 위치를 설정합니다.
구문
HRESULT SetPositions(
[in, out] LONGLONG *pCurrent,
[in] DWORD dwCurrentFlags,
[in, out] LONGLONG *pStop,
[in] DWORD dwStopFlags
);
매개 변수
[in, out] pCurrent
[in,out] 현재 시간 형식의 단위로 현재 위치를 지정하는 변수에 대한 포인터입니다.
[in] dwCurrentFlags
플래그의 비트 조합입니다. 설명 부분을 참조하세요.
[in, out] pStop
[in,out] 현재 시간 형식의 단위로 중지 시간을 지정하는 변수에 대한 포인터입니다.
[in] dwStopFlags
플래그의 비트 조합입니다. 설명 부분을 참조하세요.
반환 값
HRESULT 값을 반환합니다. 가능한 값은 다음과 같습니다.
반환 코드 | 설명 |
---|---|
|
위치 변경이 없습니다. (두 플래그 모두 검색을 지정하지 않습니다.) |
|
성공. |
|
인수가 잘못되었습니다. |
|
메서드는 지원되지 않습니다. |
|
NULL 포인터 인수입니다. |
설명
dwCurrentFlags 및 dwStopFlags 매개 변수는 검색 유형을 정의합니다. 다음 플래그가 정의됩니다.
플래그 위치 지정 | Description |
---|---|
AM_SEEKING_NoPositioning | 위치는 변경되지 않습니다. 시간 매개 변수는 NULL일 수 있습니다. |
AM_SEEKING_AbsolutePositioning | 지정된 위치가 절대 위치입니다. |
AM_SEEKING_RelativePositioning | 지정된 위치는 이전 값을 기준으로 합니다. |
AM_SEEKING_IncrementalPositioning | 중지 위치(pStop)는 현재 위치(pCurrent)를 기준으로 합니다. |
한정자 플래그 | Description |
---|---|
AM_SEEKING_SeekToKeyFrame | 가장 가까운 키 프레임을 찾습니다. 더 빠르지만 정확도가 낮을 수 있습니다. DirectShow와 함께 제공되는 필터는 이 플래그를 지원하지 않습니다. 디코더는 디코더를 지원할 가능성이 가장 높은 필터 유형입니다. |
AM_SEEKING_ReturnTime | 해당하는 참조 시간을 반환합니다. |
AM_SEEKING_Segment | 세그먼트 검색을 사용합니다. |
AM_SEEKING_NoFlush | 플러시하지 마세요. |
각 매개 변수에 대해 하나의 위치 지정 플래그를 사용합니다. 필요에 따라 하나 이상의 한정자 플래그를 포함합니다.
AM_SEEKING_ReturnTime 플래그가 지정된 경우 메서드는 위치 값을 참조 시간으로 변환하고 pCurrent 또는 pStop 변수에 반환합니다. 이 플래그는 프레임과 같은 다른 시간 형식을 사용하는 경우에 유용합니다.
AM_SEEKING_Segment 및 AM_SEEKING_NoFlush 플래그는 원활한 반복을 지원합니다.
- AM_SEEKING_Segment 플래그가 있는 경우 원본 필터는 IPin::EndOfStream을 호출하는 대신 중지 위치에 도달하면 EC_END_OF_SEGMENT 이벤트를 보냅니다. 애플리케이션은 이 이벤트를 기다린 다음 다른 seek 명령을 실행할 수 있습니다.
- AM_SEEKING_NoFlush 플래그가 있으면 검색 중에 그래프가 데이터를 플러시하지 않습니다. AM_SEEKING_Segment 이 플래그를 사용합니다.
pCurrent 및 pStop의 들어오는 값은 현재 시간 형식으로 표현됩니다. 기본 시간 형식은 REFERENCE_TIME 단위(100나노초)입니다. 시간 형식을 변경하려면 IMediaSeeking::SetTimeFormat 메서드를 사용합니다. AM_SEEKING_ReturnTime 플래그가 있으면 메서드는 나가는 값을 REFERENCE_TIME 단위로 변환합니다.
개발자 필터링
이 메서드를 구현하는 경우 값 AM_SEEKING_PositioningBitsMask 사용하여 한정자 플래그를 마스킹하여 호출자가 현재 위치 또는 중지 위치의 변경을 요청하는지 여부를 검사 수 있습니다. 예를 들면 다음과 같습니다.
DWORD dwCurrentPos = dwCurrentFlags & AM_SEEKING_PositioningBitsMask if (dwCurrentPos == AM_SEEKING_AbsolutePositioning) { // Set new position to pCurrent. m_rtStart = *pCurrent; } else if (dwCurrentPos == AM_SEEKING_RelativePositioning) { // Increment current position by pCurrent. m_rtStart += *pCurrent; } |
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
대상 플랫폼 | Windows |
헤더 | strmif.h(Dshow.h 포함) |
라이브러리 | Strmiids.lib |