다음을 통해 공유


KSAUDIO_POSITION 구조체(ksmedia.h)

KSAUDIO_POSITION 구조체는 오디오 스트림의 사운드 버퍼에서 재생 및 쓰기 커서의 현재 위치를 지정합니다.

구문

typedef struct {
#if ...
  ULONGLONG PlayOffset;
#if ...
  ULONGLONG WriteOffset;
#else
  DWORDLONG PlayOffset;
#endif
#else
  DWORDLONG WriteOffset;
#endif
} KSAUDIO_POSITION, *PKSAUDIO_POSITION;

멤버

PlayOffset

현재 재생 위치를 바이트 오프셋으로 지정합니다.

WriteOffset

현재 쓰기 위치를 바이트 오프셋으로 지정합니다.

설명

이 구조체는 KSPROPERTY_AUDIO_POSITION 속성의 데이터 값을 가져와서 설정하는 데 사용됩니다.

루프된 클라이언트 버퍼의 경우(스트림 유형 이 KSINTERFACE_STANDARD_LOOPED_STREAMING), PlayOffsetWriteOffset 은 클라이언트 버퍼에 대한 바이트 오프셋입니다. 두 오프셋이 버퍼의 끝에 도달하면 버퍼의 시작 부분까지 래핑됩니다. 따라서 두 오프셋 모두 버퍼 크기를 초과하지 않습니다.

스트림 유형 이 KSINTERFACE_STANDARD_STREAMING 있는 비루프 클라이언트 버퍼의 경우 PlayOffsetWriteOffset 은 드라이버가 할당했거나 클라이언트가 할당한 하나의 물리적 버퍼로 오프셋되지 않습니다. 대신 이러한 오프셋은 스트림에 상대적이며 전체 스트림을 포함하고 처음부터 끝까지 연속되는 이상화된 버퍼에 대한 오프셋으로 간주될 수 있습니다. 데이터를 포함하는 실제 물리적 버퍼를 가리키는 내부 오프셋은 별도로 유지 관리해야 합니다.

재생 중에 PlayOffsetWriteOffset 값은 다음과 같이 해석됩니다.

  • PlayOffset 은 재생된 버퍼에서 마지막 바이트의 오프셋입니다. PlayOffset + 1은 재생될 다음 바이트의 오프셋입니다.
  • WriteOffset 은 재생 버퍼에서 마지막 바이트의 오프셋입니다.
클라이언트가 재생을 위해 디바이스에 다른 버퍼를 제출하면 WriteOffset 은 새 WriteOffset 값을 나타내기 위해 해당 버퍼를 받으면 증가하지만, 해당 버퍼가 실제로 디바이스에서 재생될 때까지 PlayOffset 은 변경되지 않습니다.

기록하는 동안 PlayOffsetWriteOffset 값은 다음과 같이 해석됩니다.

  • PlayOffset 은 캡처된 버퍼의 마지막 바이트 오프셋입니다. PlayOffset + 1은 캡처할 다음 바이트의 오프셋입니다.
  • WriteOffset 은 캡처 버퍼에서 마지막 바이트의 오프셋입니다.
애플리케이션이 캡처를 위해 디바이스에 다른 버퍼를 제출하면 해당 버퍼를 받으면 WriteOffset 값이 증가합니다. 데이터가 실제로 버퍼에 캡처될 때까지 PlayOffset 값은 변경되지 않습니다.

PlayOffsetWriteOffset 사이의 공간은 이미 드라이버로 전송되었으며 드라이버에서 계속 사용 중일 수 있는 클라이언트 버퍼의 부분을 나타내기 때문에 클라이언트에 대한 오프 제한으로 간주됩니다.

자세한 내용은 오디오 위치 속성을 참조하세요.

요구 사항

요구 사항
헤더 ksmedia.h(Ksmedia.h 포함)

추가 정보

KSINTERFACE_STANDARD_LOOPED_STREAMING

KSINTERFACE_STANDARD_STREAMING

KSPROPERTY_AUDIO_POSITION