AVCSTRM_OPEN

O código da função AVCSTRM_OPEN abre um fluxo com um formato de fluxo específico.

Bloco de Status de E/S

Se tiver êxito, avcstrm.sysdefinirá Irp-IoStatus.Status> como STATUS_SUCCESS.

Se tiver êxito, um STATUS_SUCCESS será retornado junto com o contexto de fluxo no membro AVCStreamContext da estrutura AVC_STREAM_REQUEST_BLOCK . Esse contexto é usado posteriormente para outras solicitações avcstrm.sys .

Os possíveis valores retornados por erro incluem:

Status do erro Descrição
STATUS_DEVICE_REMOVED O dispositivo correspondente à operação de AVCSTRM_READ não existe mais.
STATUS_CANCELLED A solicitação não pôde ser concluída.
STATUS_INVALID_PARAMETER Um parâmetro especificado no IRP está incorreto,
STATUS_INSUFFICIENT_RESOURCES Não havia recursos suficientes do sistema para concluir a solicitação.
STATUS_PENDING A solicitação foi recebida, mas requer processamento adicional. A rotina de conclusão de E/S lidará com a resposta final.

Entrada AVC_STREAM_REQUEST_BLOCK

SizeOfThisBlock, Versão e Função
Use a macro INIT_AVCSTRM_HEADER para inicializar esses membros. Passe AVCSTRM_OPEN no argumento Solicitação da macro.

AVCStreamContext
Especifica o contexto de fluxo (identificador). Isso deve ser NULL na entrada e, se AVCSTRM_OPEN retornar com êxito, esse membro conterá um contexto de fluxo válido para operações deavcstrm.sys subsequentes.

OpenStruct
Especifica a descrição do fluxo AV/C a ser criado.

A enumeração AVCSTRM_FORMAT fornece a lista de formatos de streaming AV/C com suporte (das especificações do IEC 61883) que avcstrm.sys dá suporte, como SDDV (61883-2) e MPEG2TS (61883-4).

Para fazer uma conexão isócrona, os cabeçalhos CIP e os parâmetros dependentes de subunidade são necessários e são definidos na estrutura AVCSTRM_FORMAT_INFO .

Veja a seguir um exemplo das informações de formato MPEG2TS para receber dados:

//
// MPEG2TS
//
    { 
        sizeof(AVCSTRM_FORMAT_INFO),
        AVCSTRM_FORMAT_MPEG2TS,
        {
            0,0,
            CIP_SPH_MPEG, 
            CIP_QPC_MPEG,
            CIP_FN_MPEG,
            IP_DBS_MPEG,
            0,0
        }, // CIP header[0]
        {
            0,0,0,
            CIP_TSF_OFF,
            CIP_FMT_MPEG,
            2,
        },  // CIP header[1]
        SRC_PACKETS_PER_MPEG2TS_FRAME,   // varies depending on number of source packets
        BUFFER_SIZE_MPEG2TS_NO_SPH,   // Remove source packet header
        NUM_OF_XMT_BUFFERS_MPEG2TS,   // Subunit defined
        0,
        FALSE, // not striping SPH is the default
        0,  
        BLOCK_PERIOD_MPEG2TS, // 192, / number of 1394 cycle offset to send one block
        0,0,0,0,
    },

Um driver de subunidade deve primeiro alocar um IRP e uma estrutura AVC_STREAM_REQUEST_BLOCK .

Em seguida, ele deve usar a macro INIT_AVCSTRM_HEADER para inicializar a estrutura AVC_STREAM_REQUEST_BLOCK, passando AVCSTRM_OPEN como o argumento Request para a macro.

Em seguida, o driver de subunidade define o membro AVCStreamContext como NULL.

Na operação bem-sucedida, esse membro deve conter um contexto de fluxo válido (um identificador) que é usado em operações deavcstrm.sys subsequentes. Esse membro não deve ser modificado depois disso até que o fluxo seja fechado por meio de AVCSTRM_CLOSE.. Por fim, o driver de subunidade define o membro OpenStruct da união CommandData que descreve o fluxo a ser aberto.

Para enviar essa solicitação, uma subunidade envia um IRP IRP_MJ_INTERNAL_DEVICE_CONTROL com o membro IoControlCode do IRP definido como IOCTL_AVCSTRM_CLASS e o membro Argument1 do IRP definido para a estrutura AVC_STREAM_REQUEST_BLOCK que descreve a operação aberta a ser realizada.

Um driver de subunidade pode esperar que esse comando seja concluído de forma síncrona. O resultado retorna imediatamente sem a operação pendente no avcstrm.sys.

Esse código de função deve ser chamado em IRQL = PASSIVE_LEVEL.

Comentários

Essa função usa o membro OpenStruct da união CommandData na estrutura AVC_STREAM_REQUEST_BLOCK conforme mostrado abaixo.

typedef struct _AVC_STREAM_REQUEST_BLOCK {
  ULONG  SizeOfThisBlock;
  ULONG  Version;
  AVCSTRM_FUNCTION  Function;
  .
  .
  PVOID AVCStreamContext;
  .
  .
  union _tagCommandData {
    .
    .
    AVCSTRM_OPEN_STRUCT  OpenStruct;
    .
    .
  } CommandData;
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;

Requisitos

Cabeçalhos: Declarado em avcstrm.h. Inclua avcstrm.h.

Consulte Também

AVC_STREAM_REQUEST_BLOCK

INIT_AVCSTRM_HEADER

IRP_MJ_INTERNAL_DEVICE_CONTROL

IOCTL_AVCSTRM_CLASS

AVCSTRM_OPEN_STRUCT

AVCSTRM_FUNCTION

AVCSTRM_FORMAT

AVCSTRM_FORMAT_INFO