KSSTREAM_HEADER 구조체(ks.h)

KSSTREAM_HEADER 구조는 스트리밍 드라이버 핀에서 읽거나 쓸 데이터 패킷을 설명하는 가변 길이 구조입니다.

구문

typedef struct {
  ULONG    Size;
  ULONG    TypeSpecificFlags;
  KSTIME   PresentationTime;
  LONGLONG Duration;
  ULONG    FrameExtent;
  ULONG    DataUsed;
  PVOID    Data;
  ULONG    OptionsFlags;
  ULONG    Reserved;
} KSSTREAM_HEADER, *PKSSTREAM_HEADER;

멤버

Size

구조체의 크기(바이트)를 지정합니다. 최소 sizeof(KSSTREAM_HEADER)여야 합니다.

TypeSpecificFlags

데이터 형식과 관련된 플래그를 지정합니다. 현재 TypeSpecificFlags 에 대해 지원되는 유일한 플래그는 KS_AM_UseNewCSSKey. 이 플래그는 헤더 바로 뒤에 오는 데이터 샘플이 새 타이틀 키가 적용되는 첫 번째 데이터 샘플이기 때문에 하드웨어 디코더가 큐에 대기 중인 다음 CSS(콘텐츠 스크램블 시스템) 암호 해독 키로 전환해야 했음을 나타냅니다.

PresentationTime

관련 스트림 버퍼의 프레젠테이션 시간을 100나노초 단위로 지정하는 KSTIME 구조체입니다. 자세한 내용은 설명 섹션을 참조하세요.

Duration

이 스트림 세그먼트의 기간을 프레젠테이션 시간과 동일한 단위(100나노초 단위)로 지정합니다. 사용하지 않을 경우 0으로 설정합니다.

FrameExtent

전체 프레임의 크기를 지정합니다. 프레임 익스텐트 내의 영역을 필터에 사용할 수 있으며 스트림 작업의 결과 유효한 데이터 크기는 DataUsed 멤버에 반영됩니다.

DataUsed

쓰기 작업의 경우 이 멤버는 프레임을 하위 수준 드라이버에 제출할 때 유효한 프레임 내의 바이트 수를 지정합니다. 헤더는 쓰기 작업에서 수정되지 않습니다. 그러나 IO_STATUS_BLOCK 구조체의 정보 멤버에는 실제로 작성된 총 바이트 수가 포함됩니다. 읽기 작업의 경우 이 멤버는 프레임을 하위 수준 드라이버에 제출할 때 사용되지 않으며 0으로 설정해야 합니다. 반환할 때 이 멤버는 이 프레임에 실제로 채워진 바이트 수를 포함하고 IO_STATUS_BLOCK 구조체의 정보 멤버에는 실제로 사용되는 헤더 목록의 크기가 포함됩니다. 미니 드라이버가 KSPIN_DESCRIPTOR_EX KSPIN_FLAG_GENERATE_MAPPINGS 지정하는 경우 스트림 포인터가 프레임을 지나 고급으로 이동하면 DataUsed남은 수(KSSTREAM_POINTER_OFFSET 멤버)를 뺀 로 설정됩니다. 드라이버가 이 플래그를 지정하지 않으면 미니드라이버에서 DataUsed를 설정해야 합니다.

Data

데이터 버퍼의 가상 주소를 지정합니다.

OptionsFlags

데이터 스트림의 다양한 특성을 지정합니다. OptionsFlags 멤버는 다음 표에 나열된 값을 가질 수 있습니다.

Description
KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY 이 패킷에 포함된 데이터 앞에 데이터 스트림의 불연속성이 있음을 지정합니다. 이는 필터가 데이터를 처리하기 전에 내부 상태를 다시 설정해야 할 수 있음을 의미합니다. 실제 데이터 버퍼를 연결할 필요가 없습니다.
KSSTREAM_HEADER_OPTIONSF_DURATIONVALID 이 구조체의 Duration 멤버가 유효한지 지정합니다.
KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE 이 프레임이 사진 시퀀스의 끝을 나타낸다는 것을 나타냅니다.
KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM 이 프레임이 데이터 스트림의 끝을 나타낸다는 것을 나타냅니다.
KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE 스트림이 일시 중지되면 이 버퍼를 플러시해야 합니다. 이 플래그는 예를 들어 일시 중지가 현재 데이터 부실을 렌더링하는 라이브 데이터 원본에서 사용됩니다.
KSSTREAM_HEADER_OPTIONSF_FRAMEINFO KSSTREAM_HEADER 따라 KS_FRAME_INFO 구조가 있음을 나타냅니다.
KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA 이 데이터 버퍼는 반복된 데이터의 시작입니다. 드라이버는 명시적으로 중지될 때까지 이 데이터를 반복해야 합니다.
KSSTREAM_HEADER_OPTIONSF_METADATA KSSTREAM_HEADER KS_FRAME_INFO 뒤에 KSSTREAM_METADATA_INFO 있음을 나타냅니다. 이 플래그는 KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA 지원되는 경우에만 존재합니다.
KSSTREAM_HEADER_OPTIONSF_PREROLL 이 버퍼의 데이터는 디바이스 상태를 소수로 지정하는 데 사용됩니다. 스트림별 옵션입니다.
KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT 데이터 스트림은 스플라이싱을 위한 자연스러운 지점에 있습니다. 예를 들어 클라이언트는 MPEG 비디오와 같은 프레임 간 압축을 사용하는 데이터를 전송할 때 이 시점에서 스플라이스하는 것이 안전하다는 것을 나타내기 위해 이를 사용합니다.
KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY 이 패킷 이후에 데이터 스트림에 불연속성이 있습니다. 이 플래그는 위치 지향 인터페이스에 사용하여 스트림 데이터의 끝을 나타낼 수 있습니다. 실제 데이터 버퍼를 연결할 필요가 없습니다.
KSSTREAM_HEADER_OPTIONSF_TIMEVALID 이 구조체의 PresentationTime 멤버가 유효한지 지정합니다. 이 버퍼에 연결된 유효한 타임스탬프가 있음을 나타냅니다.
KSSTREAM_HEADER_OPTIONSF_TYPECHANGED 이 스트림의 데이터 형식이 변경되었음을 의미합니다. 이 플래그를 설정하면 데이터 멤버에 새 형식이 포함된 KSDATAFORMAT 구조체가 포함됩니다. 이 플래그는 이전에 동적 형식 변경을 협상한 스트림에만 유효합니다. 쓰기 작업의 경우 미디어 샘플 대신 새 데이터 형식을 포함합니다. 미디어별 확장 크기를 수정하는 경우 이 헤더는 지정된 스트림 요청에 대한 헤더 목록의 마지막 헤더여야 합니다. 읽기 요청 중에 새 형식이 KSPROPERTY_CONNECTION_DATAFORMAT 통해 검색될 때까지 추가 I/O가 보류 중입니다. 쓰기 작업의 경우 헤더를 확장하면 안 되며 쓰기 작업의 유일한 헤더여야 합니다.
KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER 스트림 헤더의 데이터 멤버가 VRAM_SURFACE_INFO 형식의 구조를 가리키도록 지정합니다. 시스템에서 제공하는 KS 프록시 모듈은 VRAM에 직접 캡처되고 있음을 나타내도록 이 플래그를 설정합니다.
KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER KSSTREAM_HEADER 데이터 멤버에 원래 버퍼의 커널 모드 복사본이 포함되도록 지정합니다. Ksproxy는 WVDDM(Windows Vista 디스플레이 드라이버 모델) 캡처 중에 작은 데이터 전송에 대해 이 플래그를 설정합니다. 이 플래그를 설정하지 않으면 KS는 데이터 버퍼에 직접 I/O를 사용합니다.

Reserved

내부용으로 예약된 속성입니다.

설명

이 구조는 데이터 패킷의 데이터 형식과 관련된 추가 정보로 메모리에서 따를 수 있습니다.

프레젠테이션 시간은 일반적으로 100나노초 단위입니다. 그러나 이 시간의 표준 형식은 데이터 형식을 기반으로합니다. KSSTREAM_HEADER 소수 자릿수로 를 사용하여 프레젠테이션 시간을 정규화할 수 있습니다. PresentationTime.Numerator를 KSSTREAM_HEADER 구분합니다. PresentationTime.Denominator .

변환은 반올림 오류를 줄이기 위해 먼저 분자를 사용한 다음 분모를 사용해야 합니다. 예를 들어 오디오 스트림은 현재 시간을 데이터 스트림의 바이트 오프셋으로 표시할 수 있습니다.

#define BITS_PER_BYTE8
#define NANOSECONDS10000000

StreamHdr->PresentationTime.Numerator = BITS_PER_BYTE * NANOSECONDS;
StreamHdr->PresentationTime.Denominator = BitsPerSample * Channels * Frequency;
StreamHdr->PresentationTime.Time = ByteOffset;
StreamHdr->Duration = ByteLength;

IOCTL_KS_READ_STREAM 스트림 헤더의 일부가 호출로 채워집니다. 각 KSSTREAM_HEADER. DataUsed 요소에는 각 KSSTREAM_HEADER 작거나 같은 실제 읽은 바이트 수가 포함됩니다. FrameExtent. pIrp-IoStatus.Information> 요소에는 반환할 헤더 데이터의 총 크기(KSSTREAM_HEADER)가 하나 이상 포함됩니다.

IOCTL_KS_WRITE_STREAM 멤버 요소를 초기화하고 각 KSSTREAM_HEADER. DataUsed 요소에는 쓸 바이트 수가 포함됩니다. 작성된 실제 총 바이트 수는 pIrp-IoStatus.Information>에 반환됩니다. 이는 모든 KSSTREAM_HEADER 합계보다 작거나 같습니다. 헤더의 DataUsed 요소입니다.

IKsReferenceClock 인터페이스를 사용하여 KSSTREAM_HEADER PresentationTime 멤버에 배치할 타임스탬프를 가져오는 경우 자세한 내용은 AVStream Clocks를 참조하세요.

요구 사항

요구 사항
헤더 ks.h(Ks.h 포함)

추가 정보

KSDATAFORMAT