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


Метод IMiniportDMus::NewStream (dmusicks.h)

Метод NewStream создает новый экземпляр логического потока, связанного с указанным физическим каналом.

Синтаксис

NTSTATUS NewStream(
  [out]          PMXF             *MXF,
  [in, optional] PUNKNOWN         OuterUnknown,
  [in]           POOL_TYPE        PoolType,
  [in]           ULONG            PinID,
  [in]           DMUS_STREAM_TYPE StreamType,
  [in]           PKSDATAFORMAT    DataFormat,
  [out]          PSERVICEGROUP    *ServiceGroup,
  [in]           PAllocatorMXF    AllocatorMXF,
  [in]           PMASTERCLOCK     MasterClock,
  [out]          PULONGLONG       SchedulePreFetch
);

Параметры

[out] MXF

Выходной указатель для нового потока. Этот параметр указывает на переменную указателя, выделенную вызывающим объектом, в которую метод записывает указатель на интерфейс IMXF объекта потока.

[in, optional] OuterUnknown

Указатель на интерфейс IUnknown объекта, который должен агрегировать объект потока. Этот параметр является необязательным. Если агрегирование не требуется, вызывающий объект задает этот параметр как NULL.

[in] PoolType

Указывает тип пула памяти, из которого должно быть выделено хранилище для объекта DMA-канала. Этому параметру присваивается одно из значений перечисления POOL_TYPE.

[in] PinID

Указывает идентификатор закрепления. Этот параметр идентифицирует открываемый контакт. Если метод IMiniport::GetDescription драйвера DMus miniport выводит дескриптор фильтра, указывающий в общей сложности n фабрик контактов в фильтре, то допустимые идентификаторы контактов находятся в диапазоне от 0 до n–1.

[in] StreamType

Указывает тип создаваемого потока данных. Для этого параметра задано одно из следующих значений перечисления DMUS_STREAM_TYPE:

DMUS_STREAM_MIDI_RENDER

Задает поток вывода (воспроизведения) MIDI.

DMUS_STREAM_MIDI_CAPTURE

Задает входной поток MIDI.

DMUS_STREAM_WAVE_SINK

Задает поток вывода волн.

Дополнительные сведения см. в разделе "Примечания".

[in] DataFormat

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

[out] ServiceGroup

Указатель вывода для группы служб. Этот параметр указывает на выделенную вызывающей переменной указателя, в которую метод записывает указатель на интерфейс IServiceGroup объекта группы служб потока. Это группа служб, которая регистрируется для уведомления об прерывании.

[in] AllocatorMXF

Указатель на объект IAllocatorMXF . Это распределитель памяти драйвера порта, необходимый для перезапуска DMUS_KERNEL_EVENT структур.

[in] MasterClock

Указатель на объект IMasterClock . Этот master часов передает оболочку для часов KS драйверу мини-порта. Указатель master часов требуется для синхронизации со временем ссылки.

[out] SchedulePreFetch

Указатель вывода для времени предварительной выборки по расписанию. Этот параметр является указателем на выделенную вызывающим объектом переменную ULONGLONG, в которую метод записывает значение времени, указывающее, насколько далеко вперед следует запрашивать события. Время указывается в 100-наносекундных единицах. Драйвер порта отвечает за виртуализацию всех событий, превышающих время, указанное здесь драйвером мини-порта.

Возвращаемое значение

NewStream возвращает S_OK, если вызов выполнен успешно. В противном случае метод возвращает соответствующий код ошибки.

Комментарии

Обратите внимание, что драйвер порта создает объект IAllocatorMXF , который NewStream метод вводит с помощью параметра pAllocatorMXF , а драйвер miniport создает объект IMXF , который метод выводит с помощью параметра ppMXF . Дополнительные сведения об IMXF и IAllocatorMXF см. в разделе MidI Transport.

Значение IMiniportDMus::NewStream параметра StreamType метода аналогично значению параметра Capture метода IMiniportMidi::NewStream:

  • При создании потока на pin-коде MIDI параметр Capture метода IMiniportMidi::NewStream указывает, будет ли закрепление использоваться в качестве приемника для потока отрисовки MIDI (Capture = FALSE) или в качестве источника потока захвата MIDI (Захват = TRUE).
  • Аналогичным образом, при создании потока в закреплении MIDI или DirectMusic параметр StreamType метода может указать, IMiniportDMus::NewStream будет ли закрепление служить приемником для потока отрисовки MIDI (StreamType = DMUS_STREAM_MIDI_RENDER) или в качестве источника потока захвата MIDI (StreamType = DMUS_STREAM_MIDI_CAPTURE).
Однако закрепление на фильтре DirectMusic может поддерживать третий вариант, который недоступен в фильтре MIDI. Контакт может служить источником потока вывода волн (StreamType = DMUS_STREAM_WAVE_SINK). Драйвер порта DMus реализует приемник волн для этого потока. После создания потока вывода волн драйвер порта DMus запрашивает объект потока (который драйвер порта получает с помощью IMiniportDMus::NewStream выходного параметра ppMXF метода) для своего интерфейса ISynthSinkDMus . Приемник волны драйвера порта вызывает метод Render в этом интерфейсе для извлечения волновых данных из программного синтезатора. Дополнительные сведения см. в статье Приемник волны для Kernel-Mode синтезаторов программного обеспечения.

Параметры ppMXF, pOuterUnknown, ppServiceGroup, pAllocatorMXF и pMasterClock следуют соглашениям о подсчете ссылок для COM-объектов.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть dmusicks.h (включая Dmusicks.h)
IRQL PASSIVE_LEVEL

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

DMUS_KERNEL_EVENT

IAllocatorMXF

IMXF

IMasterClock

IMiniport::GetDescription

IMiniportDMus

IMiniportMidi::NewStream

IServiceGroup

ISynthSinkdMus

KSDATAFORMAT

POOL_TYPE