Interfejsy usług
Niektóre interfejsy w programie Media Foundation muszą być uzyskiwane przez wywołanie IMFGetService::GetService zamiast wywołania QueryInterface. Metoda GetService działa jak QueryInterface, ale z następującymi różnicami:
- Oprócz identyfikatora interfejsu przyjmuje identyfikator GUID identyfikatora usługi.
- Może zwrócić wskaźnik do innego obiektu, który implementuje interfejs, zamiast zwracać wskaźnik do oryginalnego obiektu, którego dotyczy zapytanie.
Nuta
InterfejsIMFGetServicejest bardzo podobny do interfejsu IServiceProvider używanego w innych interfejsach API.
usługi to określony interfejs uzyskany z określonej klasy obiektów za pośrednictwem interfejsu IMFGetService. Zdefiniowane są następujące usługi.
Identyfikator usługi | Interfejs | Obiekty, które mogą uwidocznić tę usługę |
---|---|---|
MF_METADATA_PROVIDER_SERVICE | IMFMetadataProvider | Źródła multimediów |
MF_MEDIASOURCE_SERVICE | IMFMediaSource | Obsługiwane w systemie Windows 8.1 lub nowszym. |
MF_PMP_SERVER_CONTEXT | IMFPMPServer | Sesja multimediów chronionych multimediów (PMP). |
MF_QUALITY_SERVICES | IMFQualityAdvise | Źródła multimediów. |
MF_RATE_CONTROL_SERVICE | IMFRateControl | Źródła multimediów, sesja multimediów |
MF_RATE_CONTROL_SERVICE | IMFRateSupport | Źródła multimediów, ujścia multimediów, sesja multimediów |
MF_REMOTE_PROXY | MFWRemoteProxy | Serwery proxy dla obiektów zdalnych. |
MF_SAMI_SERVICE | IMFSAMIStyle | Synchronizowane źródło multimediów Accessible Media Interchange (SAMI). |
MF_SOURCE_PRESENTATION_PROVIDER_SERVICE | IMFMediaSourcePresentationProvider | Źródło programu Sequencer |
MF_TIMECODE_SERVICE | IMFTimecodeTranslate | Źródło multimediów ASF. |
MF_TOPONODE_ATTRIBUTE_EDITOR_SERVICE | IMFTopologyNodeAttributeEditor | Sesja multimediów |
MF_WRAPPED_OBJECT | IMFByteStream | Opakowane obiekty |
MF_WRAPPED_BUFFER_SERVICE | Obsługiwane w systemie Windows 8.1 lub nowszym. |
|
MF_WRAPPED_SAMPLE_SERVIC | Obsługiwane w systemie Windows 8.1 lub nowszym. |
|
MF_WORKQUEUE_SERVICES | IMFWorkQueueServices | Sesja multimediów |
MFNET_SAVEJOB_SERVICE | IMFSaveJob | Strumienie bajtów |
MFNETSOURCE_STATISTICS_SERVICE | IPropertyStore | Źródło sieci. Ta usługa służy do pobierania statystyk sieciowych. Zobacz MFNETSOURCE_STATISTICS Property. |
MR_AUDIO_POLICY_SERVICE | IMFAudioPolicy | Moduł renderowania audio |
MR_BUFFER_SERVICE | IDirect3DSurface9 | powierzchni DirectX |
MR_CAPTURE_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Źródło przechwytywania dźwięku |
MR_POLICY_VOLUME_SERVICE | IMFSimpleAudioVolume | Moduł renderowania audio |
MR_STREAM_VOLUME_SERVICE | IMFAudioStreamVolume | Moduł renderowania audio |
MR_VIDEO_ACCELERATION_SERVICE | IDirect3DDeviceManager9, IDirectXVideoAccelerationService | Ulepszony program renderowania wideo (EVR) |
MR_VIDEO_ACCELERATION_SERVICE | IDirectXVideoMemoryConfiguration | Wyprowadzenia wejściowe filtru DirectShow EVR |
MR_VIDEO_ACCELERATION_SERVICE | IMFVideoSampleAllocator, interfejs | Ujścia strumieniA EVR. |
MR_VIDEO_MIXER_SERVICE | Różne interfejsy narażone przez mikser EVR. Zobacz Using the Video Mixer Controls (Używanie kontrolek miksera wideo). | EVR |
MR_VIDEO_RENDER_SERVICE | Różne interfejsy udostępniane przez prezentera EVR. Zobacz Używanie kontrolek wyświetlania wideo. | EVR |
MF_ACOUSTIC_ECHO_CANCELLATION_CONTROL_SERVICE | IAcousticEchoCancellationControl | Efekty anulowania echa akustycznego (AEC). Wprowadzony w systemie Windows 11 w wersji 24H2. |
MF_AUDIO_EFFECTS_MANAGER_SERVICE | IAudioEffectsManager | Źródła multimediów. Wprowadzony w systemie Windows 11 w wersji 24H2. |
Należy użyć GetService, aby pobrać interfejsy wymienione w tej tabeli z obiektów wymienionych w tej tabeli.
W niektórych przypadkach interfejs jest zwracany jako usługa przez jedną klasę obiektów i zwracany przez QueryInterface przez inną klasę obiektów. Strony referencyjne dla każdego interfejsu wskazują, kiedy należy używać GetService i kiedy używać QueryInterface.
Ostrożność
Obiekt może zostać zaimplementowany w taki sposób, aby zwracał interfejs usługi za pośrednictwem QueryInterface, a także GetService. Jednak użycie QueryInterface, gdy GetService jest wymagane, może prowadzić do problemów ze zgodnością później.
FunkcjaMFGetService jest funkcją pomocnika, która odpytuje obiekt dla IMFGetService, a następnie wywołuje metodę GetService obiektu.
Przykłady
Poniższy przykład wysyła zapytanie do sesji multimediów dla IMFGetService i pobiera interfejs 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);
Poniższy przykład jest odpowiednikiem poprzedniego przykładu, ale używa funkcji 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);
Tematy pokrewne
-
interfejsy API platformy Media Foundation