Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Pengambilan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine dan Pengambilan Audio/Video di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]
Letterbox dan PanScan
Gambar 4x3 dapat dibentuk dengan menambahkan pita pada bagian atas dan bawah gambar (disebut sebagai gambar Letterbox) atau dengan mengekstrak bagian 4x3 dari gambar (disebut sebagai gambar PanScan). Menu dan aliran subgambar dilapisi di atas gambar video akhir. Gambar rasio 16x9 disimpan dalam format anamorphic 4x3. Dengan membentangkan video sumber dengan rasio aspek anamorphic 4x3 720x480 ke rasio aspek 16x9, gambar dengan rasio aspek 16x9 asli terbentuk.
Di bawah ini adalah deskripsi tentang cara menampilkan setiap mode dengan benar dan sorotannya:
- Layar Lebar: Video sumber diperluas ke area 16x9 terbesar dalam jendela output. Sorotan disesuaikan dengan bagian dalam area 16:9. Bilah hitam harus ditambahkan pada bagian atas dan bawah atau ke samping untuk mempertahankan rasio 16x9.
- Pan Scan: Dari video 16x9, gunakan offset horizontal yang disediakan dalam aliran MPEG2 untuk mengekstrak subwindow 4x3. Tempatkan subwindow 4x3 pada area 4x3 terbesar dari jendela klien output. Koordinat sorotan relatif terhadap jendela output 4x3 dan tidak memiliki hubungan dengan video sumber 16x9. Bilah hitam harus ditambahkan ke bagian atas dan bawah atau ke samping untuk mempertahankan rasio area 4x3.
- Letterbox: Temukan area terbesar berukuran 4x3 yang dapat ditampilkan pada jendela output. Bar hitam harus ditambahkan ke bagian atas dan bawah atau ke samping untuk mempertahankan area 4x3. Video 4x3 anamorphic sumber (mewakili gambar 16x9) ditempatkan di subwindow 16x9 terbesar di dalam area 4x3. Bilah hitam harus ditambahkan ke bagian atas dan bawah subwindow untuk mempertahankan area 16x9. Koordinat sorotan relatif terhadap area 4x3 dan tidak memiliki hubungan dengan video sumber 16x9. Dimungkinkan bagi disk untuk menentukan sorotan yang terletak di luar area 16x9 (tetapi masih di jendela 4x3). Untuk video 4x3, video ditempatkan di area output 4x3 terbesar dari jendela klien output. Bilah hitam harus ditambahkan ke bagian atas dan bawah atau ke samping untuk mempertahankan area 4x3.
praproses MPEG dengan DVD Navigator dan VMR
Saat ini, dekoder diberikan jenis media FORMAT_MPEG2_VIDEO, di mana blok format menunjuk ke struktur MPEG2VIDEOINFO. Pada pin output, dekoder menghasilkan jenis media FORMAT_VideoInfo2, yang blok formatnya menunjuk ke struktur VIDEOINFOHEADER2. Bidang dwReserved struktur telah diganti namanya menjadi dwControls bendera.
Anggota dwControlFlags sekarang akan berisi bit baru.
| Label | Nilai |
|---|---|
| AMCONTROL_USED | 0x00000001 |
| AMCONTROL_PAD_TO_4x3 | 0x00000002 |
| AMCONTROL_PAD_TO_16x9 | 0x00000004 |
AMCONTROL_USED digunakan untuk menguji apakah bendera baru ini didukung. Filter sumber harus mengatur bendera AMCONTROL_USED dan melihat apakah QueryAccept(MediaType) berhasil pada pin hilir. Jika ditolak, maka bendera AMCONTROL tidak dapat digunakan dan dwReserved1 harus diatur ke 0.
AMCONTROL_PAD_TO_4x3 menunjukkan bahwa gambar harus diberi jarak dan ditampilkan di area 4x3.
AMCONTROL_PAD_TO_16x9 menunjukkan bahwa gambar harus diberi bingkai dan ditampilkan dengan rasio aspek 16x9.
Dekoder harus menyalin atau memproses bit secara membabi buta. Jika dekoder melakukan pembungkusan bingkai itu sendiri, maka harus mengubah rasio aspek piksel, menambah bantalan pada gambar, dan menghapus bit AMCONTROL_* yang sesuai.
MPEG2VIDEOINFO.dwFlags sekarang berisi tiga bendera untuk mengontrol bagaimana konten harus ditampilkan:
AMMPEG2_DoPanScan (0x00000001): Jika penanda ini diaktifkan, dekoder video MPEG-2 harus memotong gambar output berdasarkan vektor pan-scan dalam perpanjangan tampilan gambar dan mengubah rasio aspek menjadi 4x3. VMR tidak boleh menerima sampel 16x9 dengan penanda ini. Implementasi sederhana dapat mengubah persegi panjang sumber untuk menunjukkan wilayah sumber dengan lebar 540 dengan tepi kiri sama dengan offset tampilan di picture_display_extension.AMMPEG2_LetterboxAnalogOut (0x00000020): Ketika dekoder perangkat keras menampilkan aliran ini ke output video (biasanya konektor SVIDEO pada kartu), itu harus menerapkan aturan untuk menampilkan sampel 16x9 pada tampilan 4x3.Dekoder perangkat lunak (atau dekoder perangkat keras yang menghasilkan output yang dikirim ke VMR) memiliki dua opsi saat memproses gambar:
- Abaikan penanda ini dan teruskan konten VideoInfoHeader2 ke VMR (penanda AMCONTROL_PAD_TO_4x3 sudah diatur oleh DVD Navigator pada sampel). VMR akan menemukan sampel video 16x9 dengan bendera AMCONTROL_PAD_TO_4x3 disetel dan stream subgambar 4x3. Aplikasi harus mengatur persegi panjang tujuan output yang dinormalisasi dari dua aliran menjadi lebar yang sama.
- Konversikan anamorphic stream menjadi gambar 4x3 dengan menambahkan padding pada bagian atas dan bawah gambar serta mengatur rasio aspek gambar menjadi 4x3 (lihat Letterbox di atas) dan menghapus bit AMCONTROL_PAD_TO_4x3 dari VIDEOINFOHEADER2.
Dekoder DirectXVA yang memadukan aliran video dan subgambar harus memproses bendera ini. Jika perangkat keras tidak dapat menskalakan subgambar campuran, maka dekoder harus menghasilkan aliran subgambar terpisah agar VMR dapat menyatu dengan video.
AMMPEG2_WidescreenAnalogOut (0x00000200): Ketika dekoder perangkat keras menampilkan aliran ini ke output video (biasanya konektor SVIDEO pada kartu), ia harus mengasumsikan tampilan 16x9 (anamorphic).Dekoder perangkat lunak (atau dekoder perangkat keras yang menghasilkan output yang dikirim ke VMR) memiliki dua opsi saat memproses gambar anamorphic:
- Abaikan bendera ini dan salin konten VideoInfoHeader2 ke VMR. VMR akan mengalihkan gambar 4x3 hingga 16x9 jika mereka memiliki set AMCONTROL_PAD_TO_16x9.
- Isi gambar output menjadi gambar 16x9 dan hapus bit AMCONTROL_PAD_TO_16x9.
Sebagian besar dekode harus menggunakan GetMediaType untuk mendeteksi perubahan media pada pin input dan menyalin konten VIDEOINFOHEADER2 (terkandung dalam MPEG2INFOHEADER) ke pin output. Mereka mungkin hanya akan memproses bit PanScan.
Contoh kode berikut menunjukkan cara menyalin konten VIDEOINFOHEADER2 dari pin input ke pin output.
#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;
}