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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk