Udostępnij przez


Domyślna kontrola jakości

[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w 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.]

Klasy bazowe DirectShow implementować niektóre domyślne zachowania dla kontroli jakości wideo.

Komunikaty o jakości zaczynają się od modułu renderowania. Klasa bazowa renderujących wideo jest CBaseVideoRenderer, która ma następujące zachowanie:

  1. Gdy program renderowany wideo otrzyma przykład, porównuje sygnaturę czasową w przykładzie z bieżącym czasem odwołania.
  2. Program renderowany wideo generuje komunikat o jakości. W klasie bazowej element Proporcja komunikatu o jakości jest ograniczony do zakresu 500 (50%) do 2000 (200%). Wartości poza tym zakresem mogą spowodować nagłe zmiany jakości.
  3. Domyślnie program renderowany wideo wysyła komunikat o jakości do nadrzędnego numeru PIN wyjściowego (numer PIN podłączony do wejściowego numeru PIN). Aplikacje mogą zastąpić to zachowanie, wywołując metodę SetSink.

To, co się stanie dalej, zależy od filtru nadrzędnego. Zazwyczaj jest to filtr przekształcania. Klasa bazowa filtrów przekształcania jest CTransformFilter, która używa CTransformInputPin i CTransformOutputPin do implementowania wyprowadzeń wejściowych i wyjściowych. Razem te klasy mają następujące zachowanie:

  1. Metoda CTransformOutputPin::Notify wywołuje metodę CTransformFilter::AlterQuality, prywatną metodę w klasie bazowej filtru.
  2. Filtry pochodne mogą zastąpić AlterQuality w celu obsługi komunikatu o jakości. Domyślnie AlterQuality ignoruje komunikat o jakości.
  3. Jeśli AlterQuality nie obsługuje komunikatu o jakości, wyprowadzenia wyjściowe wywołuje CBaseInputPin::P assNotify, prywatną metodę przy użyciu numeru PIN wejściowego filtru.
  4. PassNotify przekazuje komunikat o jakości do odpowiedniego miejsca — następny nadrzędny numer PIN wyjściowy lub niestandardowy menedżer jakości.

Zakładając, że żaden filtr przekształcania nie obsługuje komunikatu o jakości, komunikat ostatecznie osiągnie numer PIN danych wyjściowych w filtrze źródłowym. W klasach bazowych CBasePin::Notify zwraca E_NOTIMPL. Sposób obsługi komunikatów o jakości przez określony filtr źródłowy zależy od charakteru źródła. Niektóre źródła, takie jak przechwytywanie wideo na żywo, nie mogą wykonywać znaczącej kontroli jakości. Inne źródła mogą dostosować szybkość dostarczania próbek.

Na poniższym diagramie przedstawiono domyślne zachowanie.

kontroli jakości w klasach bazowych

Podstawowy moduł renderowania wideo implementuje IQualityControl::Notify, co oznacza, że można przekazać komunikaty o jakości do samego modułu renderowania. Jeśli ustawisz element członkowski proporcji na wartość mniejszą niż 1000, program renderujący wideo wstawia okres oczekiwania między każdą renderaną ramką, w efekcie spowalniając renderowanie. (Można to zrobić, aby na przykład zmniejszyć użycie systemu). Aby uzyskać więcej informacji, zobacz CBaseVideoRenderer::ThrottleWait. Ustawienie elementu członkowskiego Proporcja na wartość większą niż 1000 nie ma wpływu.

Quality-Control Management