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.