Udostępnij za pośrednictwem


przetwarzanie In-Place

[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEngineoraz Audio/Video Capture w ramach Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

Niektóre przekształcenia danych można wykonać przez bezpośrednie zmodyfikowanie danych. Nazywa się to przetwarzaniem na miejscu. W ten sposób można wykonać wiele efektów audio i wideo. Jeśli funkcja DMO obsługuje przetwarzanie w miejscu, uwidacznia interfejs IMediaObjectInPlace. Przetwarzanie lokalne jest ogólnie bardziej wydajne niż używanie oddzielnych buforów dla danych wyjściowych. (Jednym z głównych wyjątków jest to, że bufor znajduje się w pamięci wideo. W takiej sytuacji operacje odczytu są znacznie wolniejsze niż operacje zapisu, więc przetwarzanie w miejscu nie jest zalecane.

Aby przetwarzać dane na miejscu, klient wykonuje pojedyncze wywołanie metody IMediaObjectInPlace::Process, a nie oddzielne wywołania metod ProcessInput i ProcessOutput. Metoda procesu jest synchroniczna; wszystkie operacje przetwarzania są wykonywane wewnątrz wywołania. Ponadto przetwarzanie na miejscu nie używa obiektów IMediaBuffer. Metoda Process pobiera wskaźnik bezpośrednio do buforu pamięci.

Obiekt DMO obsługujący przetwarzanie w miejscu musi nadal implementować interfejs IMediaObject, w tym metody ProcessInput i ProcessOutput. Klient może wybrać, czy używać przetwarzania bezpośredniego, czy używać oddzielnych buforów. Nie należy jednak mieszać dwóch typów przetwarzania. Jeśli wywołasz Process, nie wywołaj ProcessInput lub ProcessOutputi odwrotnie.

Efekt Ogonów

DMO działające w miejscu może utworzyć dodatkowe dane wyjściowe po zakończeniu wprowadzania danych. Efekt ten nazywany jest ogonem. Na przykład efekt pogłosu trwa, gdy dane wejściowe są ciche. Jeśli występuje ogon efektu, metoda Process zwraca S_FALSE. Gdy aplikacja przetworzy wszystkie swoje dane, może wygenerować ogon efektu, wysyłając puste bufory do metody Process.

Bezpośrednie hostowanie DMO