Antarmuka Layanan
Beberapa antarmuka di Media Foundation harus diperoleh dengan memanggil IMFGetService::GetService alih-alih dengan memanggil QueryInterface. Metode GetService berfungsi seperti QueryInterface, tetapi dengan perbedaan berikut:
- Dibutuhkan GUID pengidentifikasi layanan selain pengidentifikasi antarmuka.
- Ini dapat mengembalikan pointer ke objek lain yang mengimplementasikan antarmuka, alih-alih mengembalikan pointer ke objek asli yang dikueri.
Catatan
Antarmuka IMFGetService sangat mirip dengan antarmuka IServiceProvider yang digunakan di beberapa API lainnya.
Layanan adalah antarmuka tertentu yang diperoleh dari kelas objek tertentu melalui antarmuka IMFGetService. Layanan berikut didefinisikan.
Pengidentifikasi layanan | Antarmuka | Objek yang mungkin mengekspos layanan ini |
---|---|---|
MF_METADATA_PROVIDER_SERVICE | IMFMetadataProvider | Sumber media |
MF_MEDIASOURCE_SERVICE | IMFMediaSource | Didukung di Windows 8.1 dan yang lebih baru. |
MF_PMP_SERVER_CONTEXT | IMFPMPServer | Sesi Media Jalur Media Terproteksi (PMP). |
MF_QUALITY_SERVICES | IMFQualityAdvise | Sumber media. |
MF_RATE_CONTROL_SERVICE | IMFRateControl | Sumber media, Sesi Media |
MF_RATE_CONTROL_SERVICE | IMFRateSupport | Sumber media, sink media, Sesi Media |
MF_REMOTE_PROXY | IMFRemoteProxy | Proksi untuk objek jarak jauh. |
MF_SAMI_SERVICE | IMFSAMIStyle | Sumber media Accessible Media Interchange (SAMI) yang disinkronkan. |
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE | IMFMediaSourcePresentationProvider | Sumber pengurut |
MF_TIMECODE_SERVICE | IMFTimecodeTranslate | Sumber media ASF. |
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE | IMFTopologyNodeAttributeEditor | Sesi media |
MF_WRAPPED_OBJECT | IMFByteStream | Objek yang dibungkus |
MF_WRAPPED_BUFFER_SERVICE | Didukung di Windows 8.1 dan yang lebih baru. |
|
MF_WRAPPED_SAMPLE_SERVIC | Didukung di Windows 8.1 dan yang lebih baru. |
|
MF_WORKQUEUE_SERVICES | IMFWorkQueueServices | Sesi media |
MFNET_SAVEJOB_SERVICE | IMFSaveJob | Aliran byte |
MFNETSOURCE_STATISTICS_SERVICE | IPropertyStore | Sumber jaringan. Gunakan layanan ini untuk mengambil statistik jaringan. Lihat Properti MFNETSOURCE_STATISTICS. |
MR_AUDIO_POLICY_SERVICE | IMFAudioPolicy | Perender audio |
MR_BUFFER_SERVICE | IDirect3DSurface9 | Buffer permukaan DirectX |
MR_CAPTURE_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Sumber penangkapan audio |
MR_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Perender audio |
MR_STREAM_VOLUME_SERVICE | IMFAudioStreamVolume | Perender audio |
MR_VIDEO_ACCELERATION_SERVICE | IDirect3DDeviceManager9, IDirectXVideoAccelerationService | Perender video yang ditingkatkan (EVR) |
MR_VIDEO_ACCELERATION_SERVICE | IDirectXVideoMemoryConfiguration | Pin input pada filter DirectShow EVR |
MR_VIDEO_ACCELERATION_SERVICE | Antarmuka IMFVideoSampleAllocator | Sink aliran EVR. |
MR_VIDEO_MIXER_SERVICE | Berbagai antarmuka yang diekspos oleh mixer EVR. Lihat Menggunakan Kontrol Video Mixer. | EVR |
MR_VIDEO_RENDER_SERVICE | Berbagai antarmuka yang diekspos oleh penyaji EVR. Lihat Menggunakan Kontrol Tampilan Video. | EVR |
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE | IAcousticEchoCancellationControl | Efek Pembatalan Gema Akustik (AEC). Diperkenalkan di Windows 11, versi 24H2. |
MF_AUDIO_EFFECTS_MANAGER_SERVICE | IAudioEffectsManager | Sumber media. Diperkenalkan di Windows 11, versi 24H2. |
Anda harus menggunakan GetService untuk mendapatkan antarmuka yang tercantum dalam tabel ini dari objek yang tercantum dalam tabel ini.
Dalam beberapa kasus, antarmuka dikembalikan sebagai layanan oleh satu kelas objek, dan dikembalikan melalui QueryInterface oleh kelas objek lain. Halaman referensi untuk setiap antarmuka menunjukkan kapan harus menggunakan GetService dan kapan menggunakan QueryInterface.
Perhatian
Objek mungkin diimplementasikan sedih sehingga mengembalikan antarmuka layanan melalui QueryInterface serta GetService. Namun, menggunakan QueryInterface saat GetService diperlukan dapat menyebabkan masalah kompatibilitas nanti.
Fungsi MFGetService adalah fungsi pembantu yang meminta objek untuk IMFGetService lalu memanggil metode GetService objek.
Contoh
Contoh berikut mengkueri Sesi Media untuk IMFGetService dan mendapatkan antarmuka IMFRateControl.
IMFGetService *pGetService = NULL;
IMFRateControl *pRateControl = NULL;
HRESULT hr = S_OK;
hr = pMediaSession->QueryInterface(
IID_IMFGetService,
(void**)&pGetService);
if (SUCCEEDED(hr))
{
hr = pGetService->GetService(
MF_RATE_CONTROL_SERVICE,
IID_IMFRateControl,
(void**)&pRateControl);
}
if (SUCCEEDED(hr))
{
// Use IMFRateControl. (Not shown.)
}
// Clean up.
SAFE_REELEASE(pGetService);
SAFE_RELEASE(pRateControl);
Contoh berikut setara dengan contoh sebelumnya tetapi menggunakan fungsi MFGetService.
IMFRateControl *pRateControl = NULL;
HRESULT hr = S_OK;
hr = MFGetService(
pMediaSession,
MF_RATE_CONTROL_SERVICE,
IID_IMFRateControl,
(void**) &pRateCtl
);
if (SUCCEEDED(hr))
{
// Use IMFRateControl. (Not shown.)
}
// Clean up.
SAFE_RELEASE(pRateControl);
Topik terkait