IAsyncReader::Metode permintaan (strmif.h)

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Pengambilan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine , dan Pengambilan Audio/Video di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Metode ini Request mengantre permintaan asinkron untuk data.

Sintaks

HRESULT Request(
       IMediaSample *pSample,
  [in] DWORD_PTR    dwUser
);

Parameter

pSample

Arahkan ke antarmuka IMediaSample dari sampel media yang disediakan oleh pemanggil.

[in] dwUser

Menentukan nilai arbitrer yang dikembalikan saat permintaan selesai.

Mengembalikan nilai

Mengembalikan nilai HRESULT . Nilai yang mungkin termasuk yang berikut ini.

Menampilkan kode Deskripsi
S_OK
Berhasil.
VFW_E_BADALIGN
Buffer tidak diratakan dengan benar.
VFW_E_SAMPLE_TIME_NOT_SET
Sampel tidak diberi stempel waktu.
VFW_E_WRONG_STATE
Pinnya memerah.
HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)
Posisi mulai yang diminta melewati akhir file.
E_OUTOFMEMORY
Memori tidak cukup.

Keterangan

Sebelum memanggil metode ini, ambil sampel media dari alokator pin. Stempel waktu sampel dengan offset byte yang Anda minta, inklusif pertama dan terakhir, dikalikan dengan 10.000.000. Offset byte relatif terhadap awal aliran.

Posisi mulai dan berhenti harus cocok dengan perataan yang diputuskan saat pin tersambung. Jika tidak, metode mungkin mengembalikan VFW_E_BADALIGN. Jika penyelarasan yang disepakati lebih kasar daripada keselarasan aliran yang sebenarnya, posisi berhenti mungkin melebihi durasi nyata. Jika demikian, metode membulatkan posisi berhenti ke bawah ke perataan aktual.

Meskipun secara teknis merupakan pelanggaran aturan COM, pemanggil harus meninggalkan jumlah referensi yang luar biasa pada sampel. Metode Request ini tidak memanggil AddRef atau Release, sehingga jumlah referensi diperlukan untuk menjaga sampel tetap aktif.

Metode ini kembali sebelum permintaan selesai. Panggil metode IAsyncReader::WaitForNext untuk menunggu permintaan. Jangan gunakan kembali sampel media asli saat permintaan tertunda. Metode WaitForNext mengembalikan penunjuk ke sampel asli. Jika permintaan berhasil, sampel berisi data yang diminta. Metode WaitForNext juga mengembalikan nilai apa pun yang ditentukan dalam parameter dwUser . Pemanggil dapat menggunakan nilai ini untuk mengidentifikasi sampel.

Contoh

Contoh berikut menunjukkan kemungkinan fungsi pembantu untuk pin input, untuk mengantre permintaan:

C++
CMyPin::QueueSample(long cbFirst, long cbLast, DWORD_PTR dwuser)
{
    IMediaSample* pSample = NULL;
    HRESULT hr = m_pAlloc->GetBuffer(&pSample, NULL, NULL, 0);
    if (FAILED(hr)) 
    { 
        return hr; 
    }

    LONGLONG tStart = cbFirst * 10000000, tStop = cbLast * 10000000;
    hr = pSample->SetTime(&tStart, &tStop);
    if (SUCCEEDED(hr))
    {
        hr = m_pReader->Request(pSample, dwuser);
    }

    if (FAILED(hr))
    {
        pSample->Release();
    }
    return hr;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header strmif.h (termasuk Dshow.h)
Pustaka Strmiids.lib

Lihat juga

Kode Kesalahan dan Keberhasilan

Antarmuka IAsyncReader