Método IMiniportDMus::NewStream (dmusicks.h)

O NewStream método cria uma nova instância de um fluxo lógico associado a um canal físico especificado.

Sintaxe

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
);

Parâmetros

[out] MXF

Ponteiro de saída para o novo fluxo. Esse parâmetro aponta para uma variável de ponteiro alocada pelo chamador na qual o método grava um ponteiro na interface IMXF do objeto de fluxo.

[in, optional] OuterUnknown

Ponteiro para a interface IUnknown de um objeto que precisa agregar o objeto de fluxo. Esse parâmetro é opcional. Se a agregação não for necessária, o chamador especificará esse parâmetro como NULL.

[in] PoolType

Especifica o tipo de pool de memória do qual o armazenamento do objeto de canal DMA deve ser alocado. Esse parâmetro é definido como um dos valores de enumeração POOL_TYPE .

[in] PinID

Especifica a ID do pino. Esse parâmetro identifica o pino que deve ser aberto. Se o método IMiniport::GetDescription do driver de miniport do DMus gerar um descritor de filtro que especifica um total de n fábricas de pinos no filtro, as IDs de pino válidas estarão no intervalo de 0 a n-1.

[in] StreamType

Especifica o tipo de fluxo de dados a ser criado. Esse parâmetro é definido como um dos seguintes valores de enumeração DMUS_STREAM_TYPE:

DMUS_STREAM_MIDI_RENDER

Especifica um fluxo de saída MIDI (reprodução).

DMUS_STREAM_MIDI_CAPTURE

Especifica um fluxo de entrada MIDI.

DMUS_STREAM_WAVE_SINK

Especifica um fluxo de saída de onda.

Para obter mais informações, consulte a seção Comentários a seguir.

[in] DataFormat

Ponteiro para uma estrutura KSDATAFORMAT de streaming de kernel especificando o formato de dados a ser usado para essa instância

[out] ServiceGroup

Ponteiro de saída para o grupo de serviços. Esse parâmetro aponta para uma variável de ponteiro alocada pelo chamador na qual o método grava um ponteiro na interface IServiceGroup do objeto do grupo de serviços do fluxo. Esse é o grupo de serviços que está sendo registrado para notificação de interrupção.

[in] AllocatorMXF

Ponteiro para um objeto IAllocatorMXF . Esse é o alocador de memória do driver de porta, que é necessário para reciclar DMUS_KERNEL_EVENT estruturas.

[in] MasterClock

Ponteiro para um objeto IMasterClock . Este master relógio passa um wrapper para o relógio KS para o driver de miniporto. O ponteiro do relógio master é necessário para sincronizar com o tempo de referência.

[out] SchedulePreFetch

Ponteiro de saída para o tempo de pré-busca de agendamento. Esse parâmetro é um ponteiro para uma variável ULONGLONG alocada pelo chamador na qual o método grava um valor de tempo que especifica o quão adiantado consultar eventos. A hora é especificada em unidades de 100 nanossegundos. O driver de porta é responsável por sequenciar todos os eventos que excedem o tempo especificado pelo driver de miniporta aqui.

Retornar valor

NewStream retornará S_OK se a chamada tiver sido bem-sucedida. Caso contrário, o método retornará um código de erro apropriado.

Comentários

Observe que o driver de porta cria o objeto IAllocatorMXF que o NewStream método inseriu por meio do parâmetro pAllocatorMXF , mas o driver de miniporto cria o objeto IMXF que o método gera por meio do parâmetro ppMXF . Para obter mais informações sobre IMXF e IAllocatorMXF, consulte Transporte MIDI.

O significado do IMiniportDMus::NewStream parâmetro StreamType do método é semelhante ao do parâmetro Capture do método IMiniportMidi::NewStream:

  • Ao criar um fluxo em um pino MIDI, o parâmetro Capture do método IMiniportMidi::NewStream indica se o pino deve servir como coletor para um fluxo de renderização MIDI (Capture = FALSE) ou como a origem de um fluxo de captura MIDI (Capture = TRUE).
  • Da mesma forma, ao criar um fluxo em um pino MIDI ou DirectMusic, o IMiniportDMus::NewStream parâmetro StreamType do método pode indicar se o pino deve servir como o coletor para um fluxo de renderização MIDI (StreamType = DMUS_STREAM_MIDI_RENDER) ou como a origem de um fluxo de captura MIDI (StreamType = DMUS_STREAM_MIDI_CAPTURE).
No entanto, um pino em um filtro DirectMusic pode dar suporte a uma terceira opção que não está disponível com um filtro MIDI. Um pino pode servir como a origem de um fluxo de saída de onda (StreamType = DMUS_STREAM_WAVE_SINK). O driver de porta DMus implementa o coletor de ondas para esse fluxo. Depois de criar o fluxo de saída de onda, o driver de porta DMus consulta o objeto de fluxo (que o driver de porta obtém por meio IMiniportDMus::NewStream do parâmetro de saída ppMXF do método) para sua interface ISynthSinkDMus . O coletor de ondas do driver de porta chama o método Render nessa interface para efetuar pull de dados de onda do sintetizador de software. Para obter mais informações, consulte Um coletor de ondas para sintetizadores de software Kernel-Mode.

Os parâmetros ppMXF, pOuterUnknown, ppServiceGroup, pAllocatorMXF e pMasterClock seguem as convenções de contagem de referência para objetos COM.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho dmusicks.h (inclua Dmusicks.h)
IRQL PASSIVE_LEVEL

Confira também

DMUS_KERNEL_EVENT

IAllocatorMXF

IMXF

IMasterClock

IMiniport::GetDescription

IMiniportDMus

IMiniportMidi::NewStream

IServiceGroup

ISynthSinkdMus

KSDATAFORMAT

POOL_TYPE