Udostępnij przez


Mieszanie nieskwadratowe

[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEngineoraz 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 środowisku 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.]

Ten temat dotyczy systemu Windows XP z dodatkiem Service Pack 2 lub nowszym.

Gdy VMR-9 miesza dwa lub więcej strumieni, istnieją dwa punkty, w których może wystąpić skalowanie: Gdy mikser łączy strumienie wejściowe, a alokator-prezenter renderuje złożony obraz.

operacje mieszania VMR

Poprzednie wersje VMR-9 zawsze składały strumienie wejściowe wideo z współczynnikiem proporcji pikseli 1:1 (kwadratowym), nawet gdy istniał tylko jeden strumień wideo. Jeśli strumień wejściowy miał piksele inne niż kwadratowe, spowodowało to niepotrzebną operację skalowania. Skalowanie należy unikać jak najwięcej, oczywiście, ponieważ obniża jakość obrazu końcowego.

Począwszy od systemu Windows XP z dodatkiem Service Pack 2, maszyna wirtualna VMR-9 obsługuje dwa różne sposoby uniknięcia problemu podwójnego skalowania:

  • Zaimplementuj niestandardowy prezenter alokatora i obsługuj interfejs IVMRSurfaceAllocatorEx9.
  • Użyj niekwadratowego trybu mieszania.

W tej sekcji opisano tryb mieszania niekwadratowego. Aplikacje mogą łączyć obie techniki.

Jak działa mieszanie nieskwadratowe

W trybie mieszanym o niestandardowym wymiarze, VMR-9 wybiera jeden strumień wejściowy jako rozmiar docelowy i PAR. Mikser VMR nie skaluje wideo z tego strumienia ani z innych strumieni o tym samym rozmiarze obrazu i PAR. Strumienie o innym rozmiarze lub współczynniku proporcji są skalowane do docelowego współczynnika proporcji piksela i formatowane z użyciem pasków, aby dopasować się do końcowego rozmiaru obrazu wyjściowego.

Wybór strumieni zależy od bieżącego trybu mieszania:

  • Tryb mieszania YUV jest ograniczony do jednego strumienia wideo na pinie 0. (Inne piny mogą mieć strumienie subpicture lub napisów kodowanych.) W związku z tym VMR-9 zawsze wybiera pin 0 dla rozmiaru obrazu docelowego i PAR.
  • W trybie mieszania RGB, render wybiera strumień o największym rozmiarze obrazu. Jeśli istnieje więcej niż jedna, wybiera tę z najwyższym priorytetem z; a jeśli nadal istnieje remis, wybiera strumień z najniższym numerem pin.

Przykłady Operacji

Przykład 1. Strumień 0 to 720 x 480 pikseli z współczynnikiem proporcji obrazu równym 16:9. Strumień 1 to 640 x 480 pikseli ze współczynnikiem proporcji obrazu równym 4:3.

W tym przykładzie strumień 0 ma największy rozmiar obrazu, więc maszyna wirtualna wybiera ten strumień, niezależnie od trybu mieszania RGB lub trybu mieszania YUB. Par to 32:27 (16:9 / 720:480), co oznacza, że obraz musi być rozciągnięty w poziomie przez ten stosunek, aby wygenerować poprawny współczynnik proporcji obrazu 16:9.

Aby dopasować docelowy PAR, mikser VMR skaluje strumień 1 według odwrotnego stosunku (27:32), co skutkuje obrazem 540 x 480. Dwa strumienie są następnie złożone na jednej powierzchni. Aby poprawnie wyświetlić wynikowy obraz, prezenter alokatora musi rozciągnąć obraz w poziomie, aby dopasować współczynnik proporcji obrazu 16:9.

przykład 1.

Przykład 2. Strumień 0 ma rozdzielczość 720 x 480 pikseli i proporcje obrazu 16:9. Strumień 1 mający rozdzielczość 1024 x 768 pikseli i współczynnik proporcji obrazu 4:3.

Jeśli VMR-9 używa trybu mieszania YUV, zawsze wybiera strumień 0. Dlatego rozciąga strumień 1 do rozdzielczości 540 x 480 pikseli, aby dopasować do PAR strumienia 0.

Jeśli maszyna wirtualna VMR-9 używa trybu mieszania RGB, wybiera strumień 1 jako docelowy, ponieważ ten strumień ma największy rozmiar obrazu. Rozciąga strumień 0 do rozmiaru obrazu 1024 x 576 pikseli. Należy pamiętać, że w tym przypadku złożony obraz ma współczynnik PAR 1:1, więc alokator-prezenter nie musi korygować w przypadku pikseli o innym kształcie niż kwadratowy. (Nadal może być konieczne rozciągnięcie filmu wideo, aby uwzględnić prostokąt docelowy).

przy użyciu trybu mieszania niekwadratowego

Tryb mieszany niekwadratowy jest zalecany, jeśli spełniony jest jeden z następujących warunków:

  • Aplikacja nigdy nie wysyła więcej niż jednego strumienia wideo do maszyny wirtualnej VMR-9.
  • Aplikacja renderuje pliki DVD, telewizji lub ms-dvr. Należy również użyć trybu mieszania YUV w tym przypadku, jeśli sprzęt graficzny go obsługuje.

Jeśli aplikacja miesza wiele strumieni wideo, które mogą mieć różne rozmiary obrazów lub współczynniki proporcji pikseli, zalecany jest domyślny tryb mieszania w trybie kwadratowym.

Aby skonfigurować tryb mieszania o niesoczystych proporcjach, graf filtru musi zostać zatrzymany i wszystkie piny wejściowe odłączone od VMR-9. Następnie wywołaj IVMRMixerControl9::SetMixingPrefs flagą MixerPref9_NonSquareMixing:

DWORD dwPrefs;
pMixControl->GetMixingPrefs(&dwPrefs);  
dwPrefs |= MixerPref9_NonSquareMixing;
pMixControl->SetMixingPrefs(dwPrefs);

Notatka

Jeśli połączysz flagę MixerPref9_NonSquareMixing z flagą MixerPref9_ARAdjustXorY, flaga VMR-9 zignoruje flagę MixerPref9_ARAdjustXorY.

 

Jeśli aplikacja używa niestandardowego alokatora-prezentera z trybem mieszania niekwadratowego, pamiętaj, że złożony obraz może mieć stosunek kształtu piksela (PAR) nie jest kwadratowy. Alokator-prezenter musi skalować obraz do kwadratu (1:1) PAR.

Statyczne bitmapy

Jeśli używasz interfejsu IVMRMixerBitmap9 do mieszania statycznej mapy bitowej na wideo, rozważ mapę bitową jako drugi strumień wideo na potrzeby trybu mieszania VMR.

VMR traktuje mapę bitową jako mającą ten sam współczynnik proporcji piksela co docelowy. Mapa bitowa nie jest skalowana w celu dostosowania współczynnika proporcji pikseli obiektu docelowego. W domyślnej konfiguracji VMR obiekt docelowy ma współczynnik PAR 1:1, który pasuje do większości map bitowych. W trybie mieszanym niekwadratowym obiekt docelowy może mieć piksele niekwadratowe. Aby upewnić się, że mapa bitowa jest wyświetlana poprawnie, aplikacja powinna podać obraz, którego par odpowiada docelowej par.

przy użyciu trybu mieszania VMR