Поделиться через


Указатели на начальный и конечный пограничный поток

По умолчанию каждая очередь AVStream содержит указатель на поток переднего края . Передний край указывает на новые кадры по мере их поступления в очередь. В частности, передний край изначально указывает на первый кадр для поступления в очередь и не перемещается до тех пор, пока мини-отвертка не переместит его. AVStream создает передний край, который затем существует в течение времени существования очереди. Мини-накопители могут управлять передним краем с помощью функций, предоставляемых корпорацией Майкрософт.

Когда новый кадр поступает в очередь, AVStream задает передний край, указывающий на этот кадр, при условии, что передний край еще не указывает на кадр.

Чтобы получить указатель на указатель потока переднего края, мини-диск вызывает KsPinGetLeadingEdgeStreamPointer.

Мини-диск отвечает за продвижение переднего края во всех ситуациях, кроме двух, как описано в следующей таблице.

Ситуация Поведение AVStream

Кадр поступает в ранее пустую очередь.

AVStream задает передний край, указывающий на этот кадр.

Передний край указывает на кадр. IRP, соответствующий этому кадру, отменяется.

AVStream перемещает передний край. Теперь передний край указывает на новый кадр.

Дополнительные сведения о продвижении указателей потоков см. в статье Общие сведения о указателях потоков.

Указание указателя конечного пограничного потока

Мини-накопители могут указывать, что очередь имеет указатель потока с конечным краем. Конечный край обычно указывает на самый старый кадр, интересующий мини-отвертку. Чтобы указать конечный край, установите флаг KSPIN_FLAG_DISTINCT_TRAILING_EDGE в элементе Flags соответствующей структуры KSPIN_DESCRIPTOR_EX . Затем вызовите KsPinGetTrailingEdgeStreamPointer , чтобы получить указатель на указатель на конечный пограничный поток.

Когда конечный край перемещается, число ссылок на кадре, на который он ранее указывал, падает до нуля, и кадр завершается. Если кадр является последним элементом, содержащимся в его IRP, закрепление приемника завершает IRP для вызывающего; исходный пин-код отправляет IRP в контакт, к которому он подключен.

Обслуживание окна фрейма

В результате правил подсчета ссылок на кадры, описанных в разделе Общие сведения о указателях потоков, кадр между начальным и конечным краями остается в очереди до тех пор, пока он не будет отменен, даже если на кадр не ссылается указатель потока. Таким образом, мини-диск может использовать начальные и конечные указатели края для поддержания рабочего окна из нескольких смежных кадров. Например, кадры в окне могут ожидать обработки или заполнения.

На следующей схеме самые старые кадры находятся внизу. Новые кадры поступают в верхнюю часть. Число в каждом кадре — это число ссылок для этого кадра. Когда указатели потока перемещаются вверх по этой схеме.

схема, иллюстрирующая указатели потоков avstream, ссылающиеся на очереди закрепления.

В крайней левой очереди показано, как мини-диск может использовать конечный край для создания рабочего набора кадров. Каждый кадр между начальным и конечным краями имеет число ссылок, 1, несмотря на то, что указатели потока не ссылаются на эти кадры.

Средняя очередь является примером клонирования указателей потока. Драйвер неоднократно клонировал, а затем усовершенствовал передний край, как описано в шагах процесса закрепления в службах AVStream DMA.

В крайней правой очереди показано, как мини-диск может поддерживать количество ссылок для кадра за конечным краем с помощью клона указателя потока.