IMiniportWaveCyclicStream::GetPosition 메서드(portcls.h)

메서드는 GetPosition 스트림의 현재 위치를 가져옵니다.

구문

NTSTATUS GetPosition(
  [out] PULONG Position
);

매개 변수

[out] Position

위치 값에 대한 출력 포인터입니다. 이 매개 변수는 메서드가 스트림의 현재 바이트 위치를 쓰는 호출자 할당 변수를 가리킵니다.

반환 값

GetPosition 는 호출에 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 메서드는 적절한 오류 코드를 반환합니다.

설명

GetPosition 는 스트림의 현재 재생 또는 레코드 위치를 보고합니다. 위치는 DMA 버퍼의 시작 부분에서 바이트 오프셋으로 표현되며 현재 DAC 또는 ADC에 있는 데이터의 바이트 위치에 대한 미니포트 드라이버의 최적 추정치를 나타냅니다.

위치는 스트림 초기화 직후에 0입니다. KSSTATE_STOP 상태로 전환하면( KSSTATE 참조) 위치가 0으로 다시 설정됩니다. 스트림이 KSSTATE_RUN KSSTATE_PAUSE 또는 KSSTATE_ACQUIRE 전환하여 중지되면 위치가 중지됩니다. 스트림이 KSSTATE_PAUSE 또는 KSSTATE_ACQUIRE 다시 KSSTATE_RUN 전환할 때 고정되지 않습니다.

GetPosition 는 순환 버퍼에 대한 오프셋으로 위치를 지정합니다. 위치가 순환 버퍼의 끝에 도달하면 버퍼의 시작 부분으로 래핑됩니다. 따라서 위치는 버퍼 크기를 초과하지 않습니다.

호출에 의해 GetPosition 검색된 오프셋 값은 다음 중 하나입니다.

  • 렌더링 스트림의 GetPosition 경우 메서드는 현재 DAC를 통해 재생되고 스피커 잭을 통해 전송되는 샘플의 바이트 오프셋인 재생 위치를 검색합니다.
  • 캡처 스트림의 경우 메서드는 GetPosition 마이크 잭을 통해 수신되고 ADC에서 캡처할 최신 샘플의 바이트 오프셋인 레코드 위치를 검색합니다.
오디오 디바이스의 DMA 엔진이 현재 오디오 버퍼에서 읽거나 쓰는 샘플의 오프셋이 아닙니다.

일부 오디오 하드웨어에는 현재 각 DAC 또는 ADC에 있는 샘플의 바이트 오프셋을 추적하는 위치 레지스터가 포함되어 있습니다. 이 경우 GetPosition 메서드는 적절한 스트림에 대한 위치 레지스터의 내용을 검색하기만 하면 됩니다. 다른 오디오 하드웨어는 드라이버에 DMA 포인터만 오디오 버퍼에 제공할 수 있습니다. 이 경우 GetPosition 메서드는 현재 DMA 위치 및 디바이스 내부 버퍼링 지연에 따라 DAC 또는 ADC에서 바이트 오프셋을 가장 잘 예측해야 합니다.

내부적으로 재생 또는 캡처 스트림의 일부를 버퍼링하는 오디오 하드웨어는 정확한 위치 읽기를 얻기 어렵게 만들 수 있습니다. 이 경우 드라이버는 현재 위치를 가능한 한 정확하게 예측해야 합니다. 예를 들어 오디오 디바이스가 재생 스트림을 내부 버퍼에 프리페치하는 경우 재생 위치를 제대로 예측하기 위해 드라이버가 버퍼 크기와 타이밍 정보를 모두 고려해야 할 수 있습니다.

WaveCyclic 포트 드라이버는 KSPROPERTY_AUDIO_POSITION 대한 속성 처리기를 구현합니다. 이 속성 처리기는 메서드를 GetPosition 호출하여 미니포트 드라이버에서 현재 재생 또는 레코드 위치를 가져옵니다. 자세한 내용은 오디오 위치 속성을 참조하세요.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 portcls.h(Portcls.h 포함)
IRQL <=DISPATCH_LEVEL

추가 정보

IMiniportWaveCyclicStream

KSPROPERTY_AUDIO_POSITION

KSSTATE