Freigeben über


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.

Weitere Informationen

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