Распределители AVStream
Драйвер класса AVStream использует распределитель для выделения буферов данных в единицах, называемых кадрами. Кадр — это блок непрерывной памяти, размер которого определяется поставщиком через элемент AllocatorFramingKSPIN_DESCRIPTOR_EX.
Мини-накопители получают доступ к этим буферам через API указателей потока ; вызовите KsPinGetLeadingEdgeStreamPointer , чтобы получить указатель на поток.
Клиенты AVStream могут получить сведения о требованиях к обрамлениям пин-кода с помощью свойства только для чтения KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX. Это свойство возвращает структуру типа KSALLOCATOR_FRAMING_EX , описывающую требования к обрамления для контакта.
Если данные больше не используются, AVStream использует распределитель для освобождения буфера.
AVStream предоставляет распределитель по умолчанию. Распределитель по умолчанию выделяет память пула на основе требований к распределителю, которые мини-диск предоставляет в элементе AllocatorFraming структуры KSPIN_DESCRIPTOR_EX .
Поставщик с требованиями к выделению для конкретного устройства может написать мини-диск, включающий собственные процедуры выделения. Например, можно предоставить распределитель, если драйвер выделяет память из общего буфера DMA.
Чтобы предоставить распределитель, укажите структуру KSALLOCATOR_DISPATCH , содержащую указатели на следующие предоставляемые поставщиком процедуры обратного вызова:
Укажите указатель на эту структуру диспетчеризации распределителя в элементе распределителяструктуры KSPIN_DISPATCH , описывающей контакт, для которого этот распределитель будет создавать экземпляры кадров.
Укажите указатель на эту структуру диспетчеризации контактов в элементе Dispatch соответствующей структуры KSPIN_DESCRIPTOR_EX . Дополнительные сведения о структурах диспетчеризации в AVStream см. в статье Таблицы диспетчеризации AVStream.
Во время выполнения диспетчер графов (например, модуль прокси-сервера потоковой передачи ядра ) обрабатывает выбор распределителя. Предоставленный поставщиком распределитель не гарантированно будет выбран диспетчером графов.
Распределитель в режиме ядра выбирается только в том случае, если соединение находится в режиме ядра. Кроме того, ваш распределитель может быть отклонен при несоответствии требований к распределителю и его возможностей. Если распределитель не выбран, процедура обратного вызова AVStrMiniInitializeAllocator никогда не вызывается.
См. также статью Службы DMA AVStream и указатели потоков.