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