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 값을 반환합니다. 가능한 값은 다음과 같습니다.

반환 코드 설명
S_FALSE
위치 변경이 없습니다. (두 플래그 모두 검색을 지정하지 않습니다.)
S_OK
성공.
E_INVALIDARG
인수가 잘못되었습니다.
E_NOTIMPL
메서드는 지원되지 않습니다.
E_POINTER
NULL 포인터 인수입니다.

설명

dwCurrentFlagsdwStopFlags 매개 변수는 검색 유형을 정의합니다. 다음 플래그가 정의됩니다.

플래그 위치 지정 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 이 플래그를 사용합니다.
반복을 수행하려면 그래프가 IMediaSeeking::GetCapabilities 메서드의 AM_SEEKING_CanDoSegments 보고해야 합니다. 현재 WAVE 파서 필터 만 이 기능을 지원합니다.

pCurrentpStop의 들어오는 값은 현재 시간 형식으로 표현됩니다. 기본 시간 형식은 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;
}
자세한 내용은 기본 클래스 라이브러리의 CSourceSeeking::SetPositions 메서드에 대한 소스 코드를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 strmif.h(Dshow.h 포함)
라이브러리 Strmiids.lib

추가 정보

오류 및 성공 코드

IMediaSeeking 인터페이스