AVCSTRM_OPEN

Kode fungsi AVCSTRM_OPEN membuka aliran dengan format aliran tertentu.

Blok Status I/O

Jika berhasil, avcstrm.sys mengatur Irp-IoStatus.Status> ke STATUS_SUCCESS.

Jika berhasil, STATUS_SUCCESS dikembalikan bersama dengan konteks aliran di anggota AVCStreamContext dari struktur AVC_STREAM_REQUEST_BLOCK . Konteks ini kemudian digunakan untuk permintaan avcstrm.sys lainnya.

Kemungkinan nilai pengembalian kesalahan meliputi:

Status Kesalahan Deskripsi
STATUS_DEVICE_REMOVED Perangkat yang sesuai dengan operasi AVCSTRM_READ tidak ada lagi.
STATUS_CANCELLED Permintaan tidak dapat diselesaikan.
STATUS_INVALID_PARAMETER Parameter yang ditentukan dalam IRP salah,
STATUS_INSUFFICIENT_RESOURCES Tidak ada sumber daya sistem yang memadai untuk menyelesaikan permintaan.
STATUS_PENDING Permintaan telah diterima tetapi memerlukan pemrosesan lebih lanjut. Rutinitas penyelesaian I/O akan menangani respons akhir.

AVC_STREAM_REQUEST_BLOCK Input

SizeOfThisBlock, Versi dan Fungsi
Gunakan makro INIT_AVCSTRM_HEADER untuk menginisialisasi anggota ini. Teruskan AVCSTRM_OPEN dalam argumen Permintaan makro.

AVCStreamContext
Menentukan konteks aliran (handel). Ini harus NULL pada input, dan jika AVCSTRM_OPEN berhasil dikembalikan, anggota ini berisi konteks aliran yang valid untuk operasi avcstrm.sys berikutnya.

OpenStruct
Menentukan deskripsi aliran AV/C yang akan dibuat.

Enumerasi AVCSTRM_FORMAT menyediakan daftar format streaming AV/C yang didukung (dari spesifikasi IEC 61883) yang avcstrm.sys dukung, seperti SDDV (61883-2) dan MPEG2TS (61883-4).

Untuk membuat koneksi isochronous, header CIP dan parameter dependen subunit diperlukan dan didefinisikan dalam struktur AVCSTRM_FORMAT_INFO .

Berikut ini adalah contoh informasi format MPEG2TS untuk menerima data:

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

Driver subunit harus terlebih dahulu mengalokasikan IRP dan struktur AVC_STREAM_REQUEST_BLOCK .

Selanjutnya, ini harus menggunakan makro INIT_AVCSTRM_HEADER untuk menginisialisasi struktur AVC_STREAM_REQUEST_BLOCK, meneruskan AVCSTRM_OPEN sebagai argumen Permintaan ke makro.

Selanjutnya, driver subunit mengatur anggota AVCStreamContext ke NULL.

Pada operasi yang berhasil, anggota ini harus berisi konteks aliran yang valid (handel) yang digunakan dalam operasi avcstrm.sys berikutnya. Anggota ini tidak boleh dimodifikasi setelahnya sampai aliran ditutup melalui AVCSTRM_CLOSE.. Terakhir, driver subunit menetapkan anggota OpenStruct dari serikat CommandData yang menjelaskan aliran yang akan dibuka.

Untuk mengirim permintaan ini, subunit mengirimkan IRP IRP_MJ_INTERNAL_DEVICE_CONTROL dengan anggota IoControlCode dari IRP yang diatur ke IOCTL_AVCSTRM_CLASS dan anggota Argument1 dari IRP diatur ke struktur AVC_STREAM_REQUEST_BLOCK yang menjelaskan operasi terbuka untuk berlangsung.

Driver subunit dapat mengharapkan perintah ini selesai secara sinkron. Hasilnya segera kembali tanpa operasi yang tertunda di avcstrm.sys.

Kode fungsi ini harus dipanggil di IRQL = PASSIVE_LEVEL.

Komentar

Fungsi ini menggunakan anggota OpenStruct dari union CommandData dalam struktur AVC_STREAM_REQUEST_BLOCK seperti yang ditunjukkan di bawah ini.

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;

Persyaratan

Header: Dinyatakan dalam avcstrm.h. Sertakan avcstrm.h.

Lihat juga

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