EVT_ACX_STREAM_PREPARE_HARDWARE fungsi panggilan balik (acxstreams.h)
Peristiwa EvtAcxStreamPrepareHardware memberi tahu driver untuk menyiapkan perangkat keras untuk streaming.
Sintaks
EVT_ACX_STREAM_PREPARE_HARDWARE EvtAcxStreamPrepareHardware;
NTSTATUS EvtAcxStreamPrepareHardware(
ACXSTREAM Stream
)
{...}
Parameter
Stream
Objek ACXSTREAM mewakili aliran audio yang dibuat oleh sirkuit. Aliran terdiri dari daftar elemen yang dibuat berdasarkan elemen sirkuit induk. Untuk informasi selengkapnya, lihat ACX - Ringkasan Objek ACX.
Menampilkan nilai
Mengembalikan STATUS_SUCCESS
jika panggilan berhasil. Jika tidak, ia mengembalikan kode kesalahan yang sesuai. Untuk informasi selengkapnya, lihat Menggunakan Nilai NTSTATUS.
Keterangan
AcxStream mendukung berbagai status. Status-status ini menunjukkan ketika audio mengalir (status RUN), audio tidak mengalir tetapi perangkat keras audio disiapkan (status JEDA), atau audio tidak mengalir dan perangkat keras audio tidak disiapkan (status STOP).
Peristiwa EvtAcxStreamPrepareHardware akan mengalihkan status aliran dari status Berhenti ke status Jeda. Driver harus mengalokasikan sumber daya perangkat keras apa pun yang diperlukan untuk streaming dalam peristiwa ini, seperti mesin DMA.
Setelah aliran dalam status Jeda, driver mungkin menerima peristiwa EvtAcxStreamRun untuk transisi ke status Jalankan atau driver mungkin menerima peristiwa EvtAcxStreamReleaseHardware untuk transisi ke status Berhenti.
Peristiwa ACX dianalogikan dengan status KS seperti yang dijelaskan dalam tabel ini.
Status Mulai | Status Akhir | Peristiwa Pengandar ACX Dipanggil | Catatan |
---|---|---|---|
HENTIKAN | MEMPEROLEH | PrepareHardware | Driver melakukan alokasi dan persiapan perangkat keras |
MEMPEROLEH | JEDA | (Tanpa Panggilan) | |
JEDA | RUN | jalankan | |
RUN | JEDA | Pause | |
JEDA | MEMPEROLEH | (Tidak ada panggilan) | |
MEMPEROLEH | HENTIKAN | ReleaseHardware | Driver merilis alokasi perangkat keras |
EvtAcxStreamAllocateRtPackets dipanggil sebelum EvtAcxStreamPrepareHardware untuk memungkinkan alokasi paket RT terjadi sebelum EvtAcxStreamPrepareHardware.
Alokasi buffer dan DMA
Alokasi buffer biasanya hanya melibatkan pengalokasian memori sistem semikian rupa sehingga dapat digunakan dengan perangkat keras DMA. Biasanya, alokasi buffer tidak akan berpengaruh pada perangkat keras streaming. Fase siapkan perangkat keras digunakan sebagai driver menyiapkan streaming untuk dijalankan, dengan menyelesaikan tugas seperti memesan bandwidth, memprogram DMA, dan menyelesaikan persiapan untuk permintaan untuk menjalankan aliran. Biasanya, kode perangkat keras persiapan akan menggunakan buffer yang dialokasikan untuk menyiapkan DMA dan aktivitas terkait agar siap memulai streaming.
Pembersihan Memori
Alokasi paket (memori fisik pada sistem) dilakukan sebelum EvtAcxStreamPrepareHardware, dan rilisnya (EvtAcxStreamFreeRtPackets) dilakukan setelah EvtAcxStreamReleaseHardware. Pola ini adalah perilaku warisan yang ada yang disematkan dalam alur penyiapan aliran audio lapisan atas (ks mengalokasikan buffer prop init).
Pembuangan sumber daya aliran dapat dilakukan dalam pembersihan konteks aliran driver (tidak dihancurkan). Jangan pernah meletakkan pembuangan apa pun yang dibagikan dalam konteks objek menghancurkan panggilan balik. Panduan ini berlaku untuk semua objek ACX.
Panggilan balik penghancurkan dipanggil setelah ref terakhir hilang, ketika tidak diketahui.
Panggilan balik pembersihan aliran dipanggil saat handel ditutup. Salah satu pengecualian untuk ini adalah ketika driver membuat aliran dalam panggilan baliknya. Jika ACX gagal menambahkan aliran ini ke stream-bridge tepat sebelum kembali dari operasi stream-create, aliran dibatalkan asinkron, dan utas saat ini mengembalikan kesalahan ke klien create-stream. Aliran tidak boleh memiliki alokasi memo yang dialokasikan pada saat ini.
Contoh
Contoh penggunaan ditunjukkan di bawah ini.
ACX_STREAM_CALLBACKS streamCallbacks;
ACX_STREAM_CALLBACKS_INIT(&streamCallbacks);
streamCallbacks.EvtAcxStreamPrepareHardware = Codec_EvtStreamPrepareHardware;
...
status = AcxStreamInitAssignAcxStreamCallbacks(StreamInit, &streamCallbacks);
#pragma code_seg("PAGE")
NTSTATUS
Codec_EvtStreamPrepareHardware(
_In_ ACXSTREAM Stream
)
{
PSTREAM_CONTEXT ctx;
NTSTATUS status;
PAGED_CODE();
ctx = GetStreamContext(Stream);
status = AllocateStreamHardware(Stream);
if (NT_SUCCESS(status))
{
ctx->StreamState = AcxStreamStatePause;
}
return status;
}
Persyaratan ACX
Versi ACX minimum: 1.0
Untuk informasi selengkapnya tentang versi ACX, lihat Gambaran umum versi ACX.
Persyaratan
Persyaratan | Nilai |
---|---|
Header | acxstreams.h |
IRQL | PASSIVE_LEVEL |
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