EVT_ACX_STREAM_GET_PRESENTATION_POSITION fungsi panggilan balik (acxstreams.h)
EvtAcxStreamGetPresentationPosition memberi tahu driver untuk menunjukkan posisi saat ini bersama dengan nilai QPC pada saat posisi saat ini dihitung.
Sintaks
EVT_ACX_STREAM_GET_PRESENTATION_POSITION EvtAcxStreamGetPresentationPosition;
NTSTATUS EvtAcxStreamGetPresentationPosition(
ACXSTREAM Stream,
PULONGLONG PositionInBlocks,
PULONGLONG QPCPosition
)
{...}
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.
PositionInBlocks
Menentukan offset blok dari awal aliran ke posisi pascadekode saat ini dan tidak dikompresi di aliran. "Blok" mengacu pada grup saluran dalam sampel yang sama. Jadi, misalnya, dalam aliran PCM blok sama dengan bingkai. Namun, untuk format terkompresi, blok adalah sampel tunggal dalam bingkai. Ini berarti bahwa untuk aliran MP3 khas yang memiliki 1152 sampel dalam bingkai, ada 1152 blok.
QPCPosition
Menentukan nilai penghitung kinerja pada saat driver audio membaca posisi presentasi sebagai respons terhadap panggilan KSAUDIO_PRESENTATION_POSITION. Driver menulis ke bidang ini dengan nilai yang dibaca dari memanggil KeQueryPerformanceCounter saat rekam jepret diambil dari posisi presentasi.
Menampilkan nilai
Mengembalikan STATUS_SUCCESS
jika panggilan berhasil. Jika tidak, ia mengembalikan kode kesalahan yang sesuai. Untuk informasi selengkapnya, lihat Menggunakan Nilai NTSTATUS.
Keterangan
Contoh
Contoh penggunaan ditunjukkan di bawah ini.
//
// Init streaming callbacks.
//
ACX_RT_STREAM_CALLBACKS rtCallbacks;
ACX_RT_STREAM_CALLBACKS_INIT(&rtCallbacks);
rtCallbacks.EvtAcxStreamGetPresentationPosition = EvtStreamGetPresentationPosition;
status = AcxStreamInitAssignAcxRtStreamCallbacks(StreamInit, &rtCallbacks);
PAGED_CODE_SEG
NTSTATUS
EvtStreamGetPresentationPosition(
_In_ ACXSTREAM Stream,
_Out_ PULONGLONG PositionInBlocks,
_Out_ PULONGLONG QPCPosition
)
{
PSTREAM_CONTEXT ctx;
ULONG blockAlign;
LARGE_INTEGER qpc;
PAGED_CODE();
ctx = GetStreamContext(Stream);
blockAlign = AcxDataFormatGetBlockAlign(ctx->StreamFormat);
// Recalculate the stream position that is stored in ctx->StreamPosition
UpdateStreamPosition(Stream);
qpc = KeQueryPerformanceCounter(NULL);
*PositionInBlocks = ctx->StreamPosition / blockAlign;
*QPCPosition = qpc;
return STATUS_SUCCESS;
}
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