Bagikan melalui


Metode IMediaSeeking::SetPositions (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 SetPositions ini mengatur posisi saat ini dan posisi berhenti.

Sintaks

HRESULT SetPositions(
  [in, out] LONGLONG *pCurrent,
  [in]      DWORD    dwCurrentFlags,
  [in, out] LONGLONG *pStop,
  [in]      DWORD    dwStopFlags
);

Parameter

[in, out] pCurrent

[in,out] Penunjuk ke variabel yang menentukan posisi saat ini, dalam satuan format waktu saat ini.

[in] dwCurrentFlags

Kombinasi bendera bitwise. Lihat Keterangan.

[in, out] pStop

[in,out] Penunjuk ke variabel yang menentukan waktu berhenti, dalam satuan format waktu saat ini.

[in] dwStopFlags

Kombinasi bendera bitwise. Lihat Keterangan.

Nilai kembali

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

Menampilkan kode Deskripsi
S_FALSE
Tidak ada perubahan posisi. (Kedua bendera menentukan tidak ada pencarian.)
S_OK
Berhasil.
E_INVALIDARG
Argumen tidak valid.
E_NOTIMPL
Metode tidak didukung.
E_POINTER
Argumen pointer NULL.

Keterangan

Parameter dwCurrentFlags dan dwStopFlags menentukan jenis pencarian. Bendera berikut ditentukan.

Bendera Penempatan Deskripsi
AM_SEEKING_NoPositioning Tidak ada perubahan posisi. (Parameter waktu bisa NULL.)
AM_SEEKING_AbsolutePositioning Posisi yang ditentukan adalah absolut.
AM_SEEKING_RelativePositioning Posisi yang ditentukan relatif terhadap nilai sebelumnya.
AM_SEEKING_IncrementalPositioning Posisi berhenti (pStop) relatif terhadap posisi saat ini (pCurrent).
 
Bendera Pengubah Deskripsi
AM_SEEKING_SeekToKeyFrame Cari ke bingkai kunci terdekat. Ini mungkin lebih cepat, tetapi kurang akurat. Tidak ada filter yang dikirim dengan DirectShow mendukung bendera ini. Dekode adalah jenis filter yang paling mungkin untuk mendukungnya.
AM_SEEKING_ReturnTime Mengembalikan waktu referensi yang setara.
AM_SEEKING_Segment Gunakan pencarian segmen.
AM_SEEKING_NoFlush Jangan memerah.
 

Untuk setiap parameter, gunakan satu bendera pemosisian. Secara opsional, sertakan satu atau beberapa bendera pengubah.

Jika bendera AM_SEEKING_ReturnTime ditentukan, metode mengonversi nilai posisi menjadi waktu referensi dan mengembalikannya dalam variabel pCurrent atau pStop . Bendera ini berguna jika Anda menggunakan format waktu lain, seperti bingkai.

Bendera AM_SEEKING_Segment dan AM_SEEKING_NoFlush mendukung perulangan yang mulus:

  • Jika bendera AM_SEEKING_Segment ada, filter sumber mengirimkan peristiwa EC_END_OF_SEGMENT saat mencapai posisi berhenti, alih-alih memanggil IPin::EndOfStream. Aplikasi dapat menunggu peristiwa ini dan kemudian mengeluarkan perintah pencarian lain.
  • Jika bendera AM_SEEKING_NoFlush ada, grafik tidak menghapus data selama pencarian. Gunakan bendera ini dengan AM_SEEKING_Segment.
Untuk melakukan perulangan, grafik harus melaporkan AM_SEEKING_CanDoSegments dalam metode IMediaSeeking::GetCapabilities . Saat ini, hanya Filter Pengurai WAVE yang mendukung fitur ini.

Nilai masuk pCurrent dan pStop dinyatakan dalam format waktu saat ini. Format waktu default adalah REFERENCE_TIME unit (100 nanodetik). Untuk mengubah format waktu, gunakan metode IMediaSeeking::SetTimeFormat . Jika bendera AM_SEEKING_ReturnTime ada, metode mengonversi nilai keluar menjadi unit REFERENCE_TIME .

Memfilter Pengembang

Jika Anda menerapkan metode ini, Anda dapat memeriksa apakah pemanggil meminta perubahan pada posisi saat ini atau berhenti, dengan menggunakan nilai AM_SEEKING_PositioningBitsMask untuk menutupi bendera pengubah. Contohnya:
DWORD dwCurrentPos = dwCurrentFlags & AM_SEEKING_PositioningBitsMask
if (dwCurrentPos == AM_SEEKING_AbsolutePositioning)
{ 
    // Set new position to pCurrent.
    m_rtStart = *pCurrent;
}
else if (dwCurrentPos == AM_SEEKING_RelativePositioning)
{
    // Increment current position by pCurrent.
    m_rtStart += *pCurrent;
}
Untuk informasi selengkapnya, lihat kode sumber untuk metode CSourceSeeking::SetPositions di pustaka kelas dasar.

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 IMediaSeeking