다음을 통해 공유


IAudioClock2::GetDevicePosition 메서드(audioclient.h)

GetDevicePosition 메서드는 하드웨어에서 직접 프레임의 현재 디바이스 위치를 가져옵니다.

구문

HRESULT GetDevicePosition(
  [out] UINT64 *DevicePosition,
  [out] UINT64 *QPCPosition
);

매개 변수

[out] DevicePosition

프레임에서 디바이스 위치를 받습니다. 수신된 위치는 메서드가 하드웨어에서 직접 가져오는 처리되지 않은 값입니다. 자세한 내용은 설명 부분을 참조하세요.

[out] QPCPosition

오디오 엔드포인트 디바이스가 GetDevicePosition 호출에 대한 응답으로 DevicePosition 매개 변수에서 검색된 디바이스 위치를 읽을 때 성능 카운터의 값을 받습니다.
GetDevicePosition카운터 값을 QPCPosition에 쓰기 전에 100나노초 시간 단위로 변환합니다. 클라이언트에 성능 카운터 값이 필요하지 않은 경우 QPCPositionNULL일 수 있습니다. 자세한 내용은 설명 부분을 참조하세요.

반환 값

메서드가 성공하면 S_OK가 반환되고,

반환 코드 설명
E_POINTER
DevicePosition 매개 변수는 NULL입니다.
AUDCLNT_E_DEVICE_INVALIDATED
오디오 엔드포인트의 연결이 끊어졌습니다.
AUDCLNT_S_POSITION_STALLED
이 스트림에 대해 IAudioClient::Start 메서드가 호출되지 않았습니다.

설명

이 메서드는 공유 모드 스트림에만 적용됩니다.

이 메서드는 상관 관계가 있는 두 개의 스트림 위치 값을 검색합니다.

  • 디바이스 위치입니다. 클라이언트는 DevicePosition에서 처리되지 않은 디바이스 위치를 검색합니다. 현재 스피커를 통해 재생 중이거나(렌더링 스트림의 경우) 마이크를 통해 기록되는 샘플의 스트림 위치입니다(캡처 스트림용). 디바이스 엔드포인트의 샘플링 속도는 클라이언트에서 사용하는 혼합 형식의 샘플링 속도와 다를 수 있습니다. 클라이언트에서 디바이스 위치를 검색하려면 IAudioClock::GetPosition을 호출합니다.
  • 성능 카운터. 클라이언트는 QPCPosition에서 성능 카운터를 검색합니다. GetDevicePosition은 오디오 엔드포인트 디바이스가 GetDevicePosition 메서드의 DevicePosition 매개 변수에 스트림 위치를 저장하는 시점에 QueryPerformanceCounter 함수를 호출하여 카운터 값을 가져옵니다. GetDevicePosition 은 카운터 값을 100나노초 시간 단위로 변환합니다. QueryPerformanceCounterQueryPerformanceFrequency에 대한 자세한 내용은 Windows SDK 설명서를 참조하세요.
GetDevicePosition 호출 당시의 디바이스 위치 및 성능 카운터를 감안할 때 클라이언트는 QueryPerformanceCounter를 호출하여 현재 성능 카운터를 가져오고 원래 디바이스 위치가 기록된 이후 카운터가 얼마나 발전했는지에 따라 디바이스 위치를 추정하여 나중에 디바이스 위치를 보다 시기 적절하게 예측할 수 있습니다. 클라이언트는 QueryPerformanceCounter 함수를 호출하여 카운터를 증가시키는 클록의 빈도를 가져올 수 있습니다. QueryPerformanceCounter에서 가져온 원시 카운터 값을 GetDevicePosition에서 검색한 값과 비교하기 전에 다음과 같이 원시 카운터 값을 100나노초 시간 단위로 변환합니다.
  1. 원시 카운터 값을 10,000,000으로 곱합니다.
  2. 결과를 QueryPerformanceFrequency에서 얻은 카운터 빈도로 나눕니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 7 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 R2 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 audioclient.h

추가 정보

IAudioClock2