структура 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 (content Scramble System) в очереди, так как образец данных, который следует сразу за заголовком, является первым примером данных, к которому применяется новый ключ заголовка.

PresentationTime

Структура KSTIME , задающая время представления связанного буфера потока в единицах 100 наносекунд. Дополнительные сведения см. в разделе Примечания.

Duration

Указывает длительность этого сегмента потока в том же единице, что и время представления (100-наносекундные единицы). Если не используется, установите значение 0.

FrameExtent

Указывает размер всего кадра. Область в экстенте кадра доступна фильтру, а результирующий допустимый размер данных для операции потока отражается в элементе DataUsed .

DataUsed

Для операции записи этот элемент указывает количество байтов в кадре, допустимое при отправке кадра в драйвер более низкого уровня. Заголовки не изменяются в операции записи; однако элемент Information структуры IO_STATUS_BLOCK содержит общее количество фактически записанных байтов. Для операции чтения этот элемент не используется при отправке кадра в драйвер нижнего уровня и должен иметь значение 0. При возврате этот элемент содержит количество байтов, фактически заполненных в этом кадре, а элемент Information структуры IO_STATUS_BLOCK содержит размер списка фактически используемых заголовков. Обратите внимание, что если мини-диск указывает KSPIN_FLAG_GENERATE_MAPPINGS в KSPIN_DESCRIPTOR_EX, то при перемечении указателя потока за кадром для параметра DataUsed устанавливается значение Count минус Remaining (элементы KSSTREAM_POINTER_OFFSET). Если драйвер не указывает этот флаг, мини-диск отвечает за настройку DataUsed.

Data

Указывает виртуальный адрес буфера данных.

OptionsFlags

Задает различные атрибуты потока данных. Элемент OptionsFlags может иметь значения, перечисленные в следующей таблице.

Значение Описание
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 KSSTREAM_METADATA_INFO следует KS_FRAME_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 Означает, что формат данных для этого потока изменился. Если этот флаг установлен, элемент Data содержит структуру KSDATAFORMAT , содержащую новый формат. Этот флаг действителен только для потоков, которые ранее согласовывали изменение динамического типа. Для операции записи включите новый формат данных вместо примера мультимедиа. При изменении размера расширения для конкретного носителя этот заголовок должен быть последним заголовком в списке заголовков для данного запроса потока. Во время запроса на чтение все дальнейшие операции ввода-вывода остаются незавершенными, пока новый формат не будет получен с помощью KSPROPERTY_CONNECTION_DATAFORMAT. Для операции записи заголовок не должен быть расширен и должен быть единственным заголовком в операции записи.
KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER Указывает, что элемент Data заголовка потока указывает на структуру типа VRAM_SURFACE_INFO. Предоставляемый системой модуль прокси-сервера KS устанавливает этот флаг, чтобы указать, что он захватывается непосредственно в VRAM.
KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER Указывает, что элемент Data KSSTREAM_HEADER содержит копию исходного буфера в режиме ядра. Ksproxy устанавливает этот флаг для небольшой передачи данных во время захвата WVDDM (Windows Vista Display Driver Model). Если этот флаг не задан, KS использует прямой ввод-вывод в буфер данных .

Reserved

Зарезервировано для внутреннего использования.

Комментарии

За этой структурой в памяти могут следовать дополнительные сведения, относящиеся к типу данных в пакете данных.

Время презентации обычно составляет 100 наносекунд; однако стандартный формат этого времени основан на формате данных. Вы можете нормализовать время презентации, используя в качестве дробной части масштабирования KSSTREAM_HEADER. PresentationTime.Numerator, разделенный на KSSTREAM_HEADER. PresentationTime.Знаменатель .

Преобразование должно сначала использовать числитель, а затем знаменатель, чтобы уменьшить ошибки округления. Например, аудиопоток может представлять текущее время в виде смещения байтов в потоке данных:

#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> содержит общий размер возвращаемых данных заголовка, который составляет по крайней мере один sizeof(KSSTREAM_HEADER).

На IOCTL_KS_WRITE_STREAM элементы-члены должны быть инициализированы, и каждый KSSTREAM_HEADER. Элемент DataUsed содержит количество байтов для записи. Фактическое количество записанных байтов возвращается в pIrp-IoStatus.Information>. Это значение меньше или равно общему значению всех KSSTREAM_HEADER. DataUsed элементы в заголовках.

Если вы используете интерфейс IKsReferenceClock для получения меток времени для размещения в элементе PresentationTime KSSTREAM_HEADER, дополнительные сведения см. в разделе AvStream Clocks .

Требования

Требование Значение
Заголовок ks.h (включая Ks.h)

См. также раздел

KSDATAFORMAT