AVCSTRM_OPEN

El código de función AVCSTRM_OPEN abre una secuencia con un formato de secuencia específico.

Bloque de estado de entrada/salida

Si se ejecuta correctamente, avcstrm.sys establece Irp-IoStatus.Status> en STATUS_SUCCESS.

Si se ejecuta correctamente, se devuelve un STATUS_SUCCESS junto con el contexto de secuencia en el miembro AVCStreamContext de la estructura AVC_STREAM_REQUEST_BLOCK . Este contexto se usa posteriormente para otras solicitudes deavcstrm.sys .

Entre los posibles valores devueltos de error se incluyen:

Estado del error Descripción
STATUS_DEVICE_REMOVED El dispositivo correspondiente a la operación de AVCSTRM_READ ya no existe.
STATUS_CANCELLED No se pudo completar la solicitud.
STATUS_INVALID_PARAMETER Un parámetro especificado en irP es incorrecto,
STATUS_INSUFFICIENT_RESOURCES No había suficientes recursos del sistema para completar la solicitud.
STATUS_PENDING La solicitud se ha recibido, pero requiere un procesamiento adicional. La rutina de finalización de E/S controlará la respuesta final.

entrada de AVC_STREAM_REQUEST_BLOCK

SizeOfThisBlock, Version y Function
Use la macro INIT_AVCSTRM_HEADER para inicializar estos miembros. Pase AVCSTRM_OPEN en el argumento Request de la macro.

AVCStreamContext
Especifica el contexto de flujo (identificador). Debe ser NULL en la entrada y, si AVCSTRM_OPEN devuelve correctamente, este miembro contiene un contexto de flujo válido para las operaciones deavcstrm.sys posteriores.

OpenStruct
Especifica la descripción de la secuencia de AV/C que se va a crear.

La enumeración AVCSTRM_FORMAT proporciona la lista de formatos de streaming de AV/C admitidos (de las especificaciones IEC 61883) que avcstrm.sys admite, como SDDV (61883-2) y MPEG2TS (61883-4).

Para realizar una conexión isócrónica, se requieren los encabezados CIP y los parámetros dependientes de subunidad y se definen en la estructura AVCSTRM_FORMAT_INFO .

A continuación se muestra un ejemplo de la información de formato MPEG2TS para recibir datos:

//
// 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,
    },

Un controlador de subunidad debe asignar primero un IRP y una estructura de AVC_STREAM_REQUEST_BLOCK .

A continuación, debe usar la macro INIT_AVCSTRM_HEADER para inicializar la estructura de AVC_STREAM_REQUEST_BLOCK, pasando AVCSTRM_OPEN como argumento Request a la macro.

A continuación, el controlador de subunidad establece el miembro AVCStreamContext en NULL.

Si la operación se realiza correctamente, este miembro debe contener un contexto de flujo válido (un identificador) que se usa en las operaciones deavcstrm.sys posteriores. Este miembro no se debe modificar después hasta que la secuencia se cierre a través de AVCSTRM_CLOSE.. Por último, el controlador de subunidad establece el miembro OpenStruct de la unión CommandData que describe la secuencia que se va a abrir.

Para enviar esta solicitud, una subunidad envía una IRP_MJ_INTERNAL_DEVICE_CONTROL IRP con el miembro IoControlCode del IRP establecido en IOCTL_AVCSTRM_CLASS y el miembro Argument1 del IRP establecido en la estructura AVC_STREAM_REQUEST_BLOCK que describe la operación abierta que se va a realizar.

Un controlador de subunidad puede esperar que este comando se complete sincrónicamente. El resultado devuelve inmediatamente sin operaciones pendientes en avcstrm.sys.

Se debe llamar a este código de función en IRQL = PASSIVE_LEVEL.

Comentarios

Esta función usa el miembro OpenStruct de la unión CommandData en la estructura AVC_STREAM_REQUEST_BLOCK, como se muestra a continuación.

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

Encabezados: Declarado en avcstrm.h. Incluya avcstrm.h.

Consulte también

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