Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Zastąpiono 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 korzystał z MediaPlayer, IMFMediaEngine i Audio/Video Capture w ramach 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.]
Letterbox (Format Listowy) i PanScan
Obraz 4x3 można utworzyć przez wypełnienie górnej i dolnej części obrazu (nazywanego obrazem Letterbox) lub wyodrębniając część obrazu 4x3 (nazywaną obrazem PanScan). Menu i strumienie obrazu podrzędnego są nakładane na górze końcowego obrazu wideo. Obrazy o proporcjach 16x9 są zapisywane w formacie anamorficznym 4x3. Rozciąganie anamorficznego współczynnika proporcji 4x3 720x480 źródłowego wideo do proporcji 16x9 tworzy oryginalny obraz proporcji 16x9.
Poniżej przedstawiono opis sposobu poprawnego wyświetlania poszczególnych trybów i ich wyróżnień:
- widescreen: Źródło wideo rozciągnięte do największego obszaru 16x9 w oknie wyjściowym. Wyróżnienia odnoszą się do wnętrza obszaru 16x9. Czarne słupki należy dodać do góry i dołu lub do boków, aby utrzymać obszar 16x9.
- Pan Scan: Z wideo 16x9 użyj przesunięcia poziomego dostarczonego w strumieniu MPEG2, aby wyodrębnić podokno 4x3. Umieść podokno 4x3 w największym obszarze 4x3 okna klienta wyjściowego. Współrzędne wyróżnienia są określone względem okna wyjściowego 4x3 i nie mają związku ze źródłowym wideo 16x9. Czarne paski należy dodać na górze i dole lub po bokach, aby utrzymać obszar o proporcjach 4x3.
- Letterbox: Oblicz największy możliwy obszar 4x3 okna wyjściowego. Czarne paski należy dodać na górze i na dole lub po bokach, aby utrzymać obszar 4x3. Źródłowe anamorficzne wideo 4x3 (reprezentujące obraz 16x9) jest umieszczone w największym podoknie 16x9 wewnątrz obszaru 4x3. Czarne paski należy dodać do górnej i dolnej części podokna, aby utrzymać obszar 16x9. Współrzędne wyróżnienia są względne względem obszaru 4x3 i nie mają związku z wideo źródłowym 16x9. Dysk może określić punkt wyróżnienia, który znajduje się poza strefą 16x9 (ale nadal w oknie 4x3). W przypadku wideo 4x3 jest ono umieszczane w największym obszarze wyjściowym 4x3 okna klienta wyjściowego. Czarne pasy należy dodać na górze i na dole lub po bokach, aby utrzymać obszar 4x3.
Przetwarzanie wstępne MPEG z użyciem nawigatora DVD i renderera wideo VMR
Obecnie do dekodera jest przekazywany typ nośnika FORMAT_MPEG2_VIDEO (którego blok formatu wskazuje na strukturę MPEG2VIDEOINFO). Na pinach wyjściowych dekoder produkuje typ mediów FORMAT_VideoInfo2, którego blok formatu odnosi się do struktury VIDEOINFOHEADER2. Nazwa pola dwReserved struktury została zmieniona na flagi dwControls.
Członek dwControlFlags będzie teraz zawierać nowe bity.
| Etykieta | Wartość |
|---|---|
| AMCONTROL_USED | 0x00000001 |
| AMCONTROL_PAD_TO_4x3 | 0x00000002 |
| AMCONTROL_PAD_TO_16x9 | 0x00000004 |
AMCONTROL_USED służy do testowania, czy te nowe flagi są obsługiwane. Filtr źródłowy powinien ustawić flagę AMCONTROL_USED i sprawdzić, czy metoda QueryAccept(MediaType) zostanie zaakceptowana na wtyku końcowym. Jeśli zostanie odrzucona, nie można użyć flag AMCONTROL i dwReserved1 musi być ustawiona na 0.
AMCONTROL_PAD_TO_4x3 wskazuje, że obraz powinien być uzupełniony i wyświetlany w obszarze o proporcjach 4:3.
AMCONTROL_PAD_TO_16x9 wskazuje, że obraz powinien być rozszerzony i wyświetlany w obszarze o proporcjach 16x9.
Dekoder powinien automatycznie kopiować lub przetwarzać bity. Jeśli dekoder sam dokonuje letterboxingu, to musi zmienić współczynnik proporcji pikseli, wypełnić obraz i usunąć odpowiednie bity AMCONTROL_*.
Plik MPEG2VIDEOINFO.dwFlags zawiera teraz trzy flagi do kontrolowania sposobu wyświetlania zawartości:
AMMPEG2_DoPanScan (0x00000001): Jeśli ta flaga jest ustawiona, dekoder wideo MPEG-2 powinien przycinać obraz wyjściowy w oparciu o wektory panoramicznych skanów w picture_display_extension i zmienić współczynnik proporcji obrazu na 4x3. VMR nie powinien otrzymać próbki 16x9 z tą flagą. Prosta implementacja może zmienić prostokąt źródłowy, aby wskazać region źródłowy szerokości 540 pikseli, z lewą krawędzią równą przesunięciu wyświetlania w picture_display_extension.AMMPEG2_LetterboxAnalogOut (0x00000020): Kiedy dekoder sprzętowy wyświetla ten strumień na wyjście wideo (zazwyczaj złącze SVIDEO na karcie), powinien zastosować reguły wyświetlania obrazu 16x9 na ekranie 4x3.Dekoder programowy (lub dekoder sprzętowy generujący dane wyjściowe wysyłane do VMR) ma dwie opcje przetwarzania obrazów:
- Ignoruj tę flagę i przekaż zawartość VideoInfoHeader2 do VMR (flaga AMCONTROL_PAD_TO_4x3 zostanie już ustawiona przez DVD Navigator na próbce). VMR napotka próbkę wideo 16x9 z ustawioną flagą AMCONTROL_PAD_TO_4x3 i strumieniem podobrazu 4x3. Aplikacja musi ustawić znormalizowane prostokąty wyjściowe dwóch strumieni na tę samą szerokość.
- Przekonwertuj strumień anamorficzny na obraz 4x3, dodając marginesy na górze i dole obrazu, a następnie ustawiając współczynnik proporcji obrazu na 4x3 (patrz Pole litery powyżej) i usuwając bit AMCONTROL_PAD_TO_4x3 z VIDEOINFOHEADER2.
Dekodatory DirectXVA, które łączą strumienie wideo i subpicture, będą musiały przetworzyć tę flagę. Jeśli sprzęt nie może skalować zblendowanego podobrazu, dekoder powinien utworzyć oddzielny strumień podobrazów dla renderera wideo, aby zblendować z wideo.
AMMPEG2_WidescreenAnalogOut (0x00000200): Gdy dekoder sprzętowy wyświetla ten strumień na wyjście wideo (zazwyczaj złącze SVIDEO na karcie), powinien zakładać wyświetlanie w formacie 16x9 (anamorficzne).Dekoder oprogramowania (lub sprzętowy dekoder generujący dane wyjściowe wysyłane do VMR) ma dwie opcje przetwarzania obrazu anamorficznego:
- Zignoruj tę flagę i skopiuj zawartość VideoInfoHeader2 do VMR. VMR rozszerzy obrazy 4x3 do formatu 16x9, jeśli mają ustawiony AMCONTROL_PAD_TO_16x9.
- Dopasuj obraz wyjściowy do formatu 16x9 i usuń bit AMCONTROL_PAD_TO_16x9.
Większość dekoderów powinna używać GetMediaType, aby wykryć zmianę nośnika na pinie wejściowym i skopiować zawartość VIDEOINFOHEADER2 (zawartą w MPEG2INFOHEADER) na pin wyjściowy. Prawdopodobnie będą przetwarzać tylko bit PanScan.
Poniższy przykładowy kod ukazuje sposób kopiowania zawartości VIDEOINFOHEADER2 z pinu wejściowego do pinu wyjściowego.
#include <dvdmedia.h>
HRESULT CopyMPeg2ToVideoInfoHeader2(CMediaSample* pInSample, CMediaSample* pOutSample)
{
HRESULT hr = S_OK;
// Check for a media type on the input sample.
AM_MEDIA_TYPE* pInType;
if (pInSample->GetMediaType(&pInType) == S_OK)
{
// Make sure it's an MPEG2 Video format.
if ((pInType->formattype == FORMAT_MPEG2_VIDEO) &&
(pInType->cbFormat >= sizeof(MPEG2VIDEOINFO)))
{
hr = S_OK; // Initialize hr for the CMediaType constructor.
CMediaType outType(*pInType, &hr);
if (FAILED(hr))
{
DeleteMediaType( pInType );
return hr;
}
// Set the format type GUID.
outType.SetFormatType(&FORMAT_VideoInfo2);
// Truncate the format block to include just the VIDEOINFOHEADER part.
MPEG2VIDEOINFO *pMPeg2Header = (MPEG2VIDEOINFO*)pInType->pbFormat;
BYTE *pVIH = (BYTE*)&pMPeg2Header->hdr;
hr = (outType.SetFormat(pVIH, sizeof(VIDEOINFOHEADER2)) ? S_OK : E_OUTOFMEMORY);
if (SUCCEEDED(hr))
{
hr = pOutSample->SetMediaType(&outType);
}
}
else
{
ASSERT(FALSE); // Not a MPEG2 header.
hr = VFW_E_INVALIDMEDIATYPE;
}
DeleteMediaType( pInType );
}
return hr;
}