Указатели на начальный и конечный пограничный поток
По умолчанию каждая очередь AVStream содержит указатель на поток переднего края . Передний край указывает на новые кадры по мере их поступления в очередь. В частности, передний край изначально указывает на первый кадр для поступления в очередь и не перемещается до тех пор, пока мини-отвертка не переместит его. AVStream создает передний край, который затем существует в течение времени существования очереди. Мини-накопители могут управлять передним краем с помощью функций, предоставляемых корпорацией Майкрософт.
Когда новый кадр поступает в очередь, AVStream задает передний край, указывающий на этот кадр, при условии, что передний край еще не указывает на кадр.
Чтобы получить указатель на указатель потока переднего края, мини-диск вызывает KsPinGetLeadingEdgeStreamPointer.
Мини-диск отвечает за продвижение переднего края во всех ситуациях, кроме двух, как описано в следующей таблице.
Ситуация | Поведение AVStream |
---|---|
Кадр поступает в ранее пустую очередь. |
AVStream задает передний край, указывающий на этот кадр. |
Передний край указывает на кадр. IRP, соответствующий этому кадру, отменяется. |
AVStream перемещает передний край. Теперь передний край указывает на новый кадр. |
Дополнительные сведения о продвижении указателей потоков см. в статье Общие сведения о указателях потоков.
Указание указателя конечного пограничного потока
Мини-накопители могут указывать, что очередь имеет указатель потока с конечным краем. Конечный край обычно указывает на самый старый кадр, интересующий мини-отвертку. Чтобы указать конечный край, установите флаг KSPIN_FLAG_DISTINCT_TRAILING_EDGE в элементе Flags соответствующей структуры KSPIN_DESCRIPTOR_EX . Затем вызовите KsPinGetTrailingEdgeStreamPointer , чтобы получить указатель на указатель на конечный пограничный поток.
Когда конечный край перемещается, число ссылок на кадре, на который он ранее указывал, падает до нуля, и кадр завершается. Если кадр является последним элементом, содержащимся в его IRP, закрепление приемника завершает IRP для вызывающего; исходный пин-код отправляет IRP в контакт, к которому он подключен.
Обслуживание окна фрейма
В результате правил подсчета ссылок на кадры, описанных в разделе Общие сведения о указателях потоков, кадр между начальным и конечным краями остается в очереди до тех пор, пока он не будет отменен, даже если на кадр не ссылается указатель потока. Таким образом, мини-диск может использовать начальные и конечные указатели края для поддержания рабочего окна из нескольких смежных кадров. Например, кадры в окне могут ожидать обработки или заполнения.
На следующей схеме самые старые кадры находятся внизу. Новые кадры поступают в верхнюю часть. Число в каждом кадре — это число ссылок для этого кадра. Когда указатели потока перемещаются вверх по этой схеме.
В крайней левой очереди показано, как мини-диск может использовать конечный край для создания рабочего набора кадров. Каждый кадр между начальным и конечным краями имеет число ссылок, 1, несмотря на то, что указатели потока не ссылаются на эти кадры.
Средняя очередь является примером клонирования указателей потока. Драйвер неоднократно клонировал, а затем усовершенствовал передний край, как описано в шагах процесса закрепления в службах AVStream DMA.
В крайней правой очереди показано, как мини-диск может поддерживать количество ссылок для кадра за конечным краем с помощью клона указателя потока.