Partager via


AVCSTRM_OPEN

Le code de fonction AVCSTRM_OPEN ouvre un flux avec un format de flux spécifique.

Bloc d’état E/S

En cas de réussite, avcstrm.sys définit Irp-IoStatus.Status> sur STATUS_SUCCESS.

En cas de réussite, une STATUS_SUCCESS est retournée avec le contexte de flux dans le membre AVCStreamContext de la structure AVC_STREAM_REQUEST_BLOCK . Ce contexte est ensuite utilisé pour d’autres demandes deavcstrm.sys .

Les valeurs de retour d’erreur possibles sont les suivantes :

État de l’erreur Description
STATUS_DEVICE_REMOVED L’appareil correspondant à l’opération AVCSTRM_READ n’existe plus.
STATUS_CANCELLED La demande n’a pas pu être effectuée.
STATUS_INVALID_PARAMETER Un paramètre spécifié dans l’IRP est incorrect,
STATUS_INSUFFICIENT_RESOURCES Il n’y avait pas suffisamment de ressources système pour effectuer la demande.
STATUS_PENDING La demande a été reçue, mais nécessite un traitement supplémentaire. La routine d’achèvement des E/S gère la réponse finale.

entrée AVC_STREAM_REQUEST_BLOCK

SizeOfThisBlock, version et fonction
Utilisez la macro INIT_AVCSTRM_HEADER pour initialiser ces membres. Passez AVCSTRM_OPEN dans l’argument Request de la macro.

AVCStreamContext
Spécifie le contexte de flux (handle). Cette valeur doit être NULL lors de l’entrée et, si AVCSTRM_OPEN retourne correctement, ce membre contient un contexte de flux valide pour les opérations deavcstrm.sys suivantes.

OpenStruct
Spécifie la description du flux AV/C à créer.

L’énumération AVCSTRM_FORMAT fournit la liste des formats de streaming AV/C pris en charge (à partir des spécifications IEC 61883) pris en charge par avcstrm.sys, tels que SDDV (61883-2) et MPEG2TS (61883-4).

Pour créer une connexion isochroneuse, les en-têtes CIP et les paramètres dépendants de la sous-unité sont requis et sont définis dans la structure AVCSTRM_FORMAT_INFO .

Voici un exemple d’informations au format MPEG2TS pour la réception de données :

//
// 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 pilote de sous-unité doit d’abord allouer un IRP et une structure de AVC_STREAM_REQUEST_BLOCK .

Ensuite, il doit utiliser la macro INIT_AVCSTRM_HEADER pour initialiser la structure AVC_STREAM_REQUEST_BLOCK, en passant AVCSTRM_OPEN comme argument Request à la macro.

Ensuite, le pilote de sous-unité définit le membre AVCStreamContext sur NULL.

En cas d’opération réussie, ce membre doit contenir un contexte de flux valide (un handle) qui est utilisé dans les opérations deavcstrm.sys suivantes. Ce membre ne doit pas être modifié par la suite tant que le flux n’est pas fermé via AVCSTRM_CLOSE.. Enfin, le pilote de sous-unité définit le membre OpenStruct de l’union CommandData qui décrit le flux à ouvrir.

Pour envoyer cette demande, une sous-unité envoie un IRP IRP_MJ_INTERNAL_DEVICE_CONTROL avec le membre IoControlCode de l’IRP défini sur IOCTL_AVCSTRM_CLASS et le membre Argument1 de l’IRP défini à la structure AVC_STREAM_REQUEST_BLOCK qui décrit l’opération ouverte à effectuer.

Un pilote de sous-unité peut s’attendre à ce que cette commande se termine de manière synchrone. Le résultat retourne immédiatement sans opération en attente dans avcstrm.sys.

Ce code de fonction doit être appelé dans IRQL = PASSIVE_LEVEL.

Commentaires

Cette fonction utilise le membre OpenStruct de l’union CommandData dans la structure AVC_STREAM_REQUEST_BLOCK comme indiqué ci-dessous.

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;

Spécifications

En-têtes: Déclaré dans avcstrm.h. Incluez avcstrm.h.

Voir aussi

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