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