AVCSTRM_OPEN
Der AVCSTRM_OPEN Funktionscode öffnet einen Stream mit einem bestimmten Streamformat.
E/A-Statusblock
Bei erfolgreicher Ausführung legtavcstrm.sysIrp-IoStatus.Status> auf STATUS_SUCCESS fest.
Bei erfolgreicher Ausführung wird ein STATUS_SUCCESS zusammen mit dem Streamkontext im AVCStreamContext-Member der AVC_STREAM_REQUEST_BLOCK-Struktur zurückgegeben. Dieser Kontext wird anschließend für andere avcstrm.sys Anforderungen verwendet.
Mögliche Fehlerrückgabewerte sind:
Fehlerstatus | BESCHREIBUNG |
---|---|
STATUS_DEVICE_REMOVED | Das Gerät, das dem AVCSTRM_READ Vorgangs entspricht, ist nicht mehr vorhanden. |
STATUS_CANCELLED | Die Anforderung konnte nicht abgeschlossen werden. |
STATUS_INVALID_PARAMETER | Ein in der IRP angegebenen Parameter ist falsch. |
STATUS_INSUFFICIENT_RESOURCES | Es gab nicht genügend Systemressourcen, um die Anforderung abzuschließen. |
STATUS_PENDING | Die Anforderung wurde empfangen, erfordert jedoch eine weitere Verarbeitung. Die E/A-Vervollständigungsroutine verarbeitet die endgültige Antwort. |
AVC_STREAM_REQUEST_BLOCK Eingabe
SizeOfThisBlock, Version und Funktion
Verwenden Sie das makro INIT_AVCSTRM_HEADER , um diese Member zu initialisieren. Übergeben Sie AVCSTRM_OPEN im Request-Argument des Makros.
AVCStreamContext
Gibt den Streamkontext (Handle) an. Dies sollte bei der Eingabe NULL sein, und wenn AVCSTRM_OPEN erfolgreich zurückgegeben wird, enthält dieser Member einen gültigen Streamkontext für nachfolgende avcstrm.sys-Vorgänge .
OpenStruct
Gibt die Beschreibung des zu erstellenden AV/C-Streams an.
Die AVCSTRM_FORMAT-Enumeration enthält die Liste der unterstützten AV/C-Streamingformate (aus den IEC 61883-Spezifikationen), die avcstrm.sys unterstützt, z. B. SDDV (61883-2) und MPEG2TS (61883-4).
Um eine isochrone Verbindung herzustellen, sind die CIP-Header und untereinheitsabhängigen Parameter erforderlich und werden in der AVCSTRM_FORMAT_INFO-Struktur definiert.
Im Folgenden ist ein Beispiel für die MPEG2TS-Formatinformationen für den Empfang von Daten aufgeführt:
//
// 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,
},
Ein Untereinheitstreiber muss zuerst eine IRP und eine AVC_STREAM_REQUEST_BLOCK Struktur zuordnen.
Als Nächstes sollte das Makro INIT_AVCSTRM_HEADER verwendet werden, um die AVC_STREAM_REQUEST_BLOCK-Struktur zu initialisieren und AVCSTRM_OPEN als Request-Argument an das Makro zu übergeben.
Als Nächstes legt der Untereinheitstreiber das AVCStreamContext-Element auf NULL fest.
Bei erfolgreichem Vorgang sollte dieser Member einen gültigen Datenstromkontext (ein Handle) enthalten, der in nachfolgendenavcstrm.sys-Vorgängen verwendet wird. Dieser Member sollte danach erst geändert werden, wenn der Stream über AVCSTRM_CLOSE. geschlossen wird. Schließlich legt der Untereinheitstreiber den OpenStruct-Member der CommandData-Union fest, der den zu öffnenden Stream beschreibt.
Um diese Anforderung zu senden, sendet eine Untereinheit eine IRP_MJ_INTERNAL_DEVICE_CONTROL IRP, wobei das IoControlCode-Element des IRP auf IOCTL_AVCSTRM_CLASS festgelegt ist, und das Argument1-Element der IRP-Gruppe auf die AVC_STREAM_REQUEST_BLOCK-Struktur, die den auszuführenden offenen Vorgang beschreibt.
Ein Untereinheitstreiber kann erwarten, dass dieser Befehl synchron abgeschlossen wird. Das Ergebnis wird sofort ohne ausstehender Vorgang in avcstrm.syszurückgegeben.
Dieser Funktionscode muss unter IRQL = PASSIVE_LEVEL aufgerufen werden.
Kommentare
Diese Funktion verwendet das OpenStruct-Element der CommandData-Union in der AVC_STREAM_REQUEST_BLOCK-Struktur, wie unten gezeigt.
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;
Anforderungen
Header: Deklariert in avcstrm.h. Schließen Sie avcstrm.h ein.