Menulis Sampel Gambar Video

[Fitur yang terkait dengan halaman ini, Windows Media Format 11 SDK, adalah fitur warisan. Ini telah digantikan oleh Pembaca Sumber dan Penulis Sink. Pembaca Sumber dan Penulis Sink telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan Pembaca Sumber dan Penulis Sink alih-alih Windows Media Format 11 SDK, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Aliran Gambar Video adalah video yang berisi serangkaian gambar diam. Gambar dapat bergerak dalam bingkai, dan setiap gambar dapat menyatu ke gambar berikutnya. Aliran Gambar Video dikodekan menggunakan codec Windows Media Video 9 Image v2. Video output mirip dengan yang dibuat oleh codec Windows Media Video 9.

Untuk membuat profil yang berisi aliran Gambar Video, mulailah dengan menghitung codec video seperti yang dijelaskan dalam Mendapatkan Informasi Konfigurasi Aliran dari Codec. Cari codec yang mendukung subjenis WMMEDIASUBTYPE_WVP2.

Setelah Anda mengatur profil pada objek penulis, panggil IWMWriter::GetInputProps untuk mendapatkan properti media untuk aliran input Gambar Video. Dapatkan jenis media dari objek properti media, dengan memanggil IWMMediaProps::GetMediaType, dan ubah subjenis menjadi WMMEDIASUBTYPE_VIDEOIMAGE. Anda harus mengatur lebar dan tinggi video ke dimensi maksimum yang diperlukan untuk mencakup gambar yang akan Anda tambahkan ke aliran. Kemudian panggil IWMMediaProps::SetMediaType dengan jenis input yang dimodifikasi. Sekarang Anda siap untuk mulai mengirim sampel ke objek penulis.

Setiap sampel harus dimulai dengan struktur WMT_VIDEOIMAGE_SAMPLE2 . Selain itu, sampel mungkin berisi gambar bitmap. Gambar hanya dilampirkan ke sampel untuk bingkai pertama tempat gambar muncul. Semua bingkai tambahan yang menggunakan gambar tersebut hanya memerlukan informasi dalam struktur. Bitmap input harus diformat sebagai RGB, 24 bit per piksel.

File bitmap menyimpan data gambar sehingga data untuk setiap baris gambar mengambil sejumlah byte yang dapat dibagi dengan empat. (Ini disebut langkah bitmap.) Ini memaksa awal setiap baris video ke batas DWORD , yang membuat penyalinan lebih efisien. Jika baris gambar tidak dapat dibagi secara merata dengan empat, baris dilapisi ke kelipatan tertinggi berikutnya dari empat byte. Saat melampirkan data gambar, Anda harus menghapus padding apa pun yang ada di akhir data untuk setiap baris.

Codec Windows Media Video 9 Image v2 mempertahankan hingga dua gambar dalam memori pada satu waktu. Gambar-gambar ini disebut gambar sebelumnya dan gambar saat ini. Setiap gambar memiliki sekumpulan anggota dalam struktur WMT_VIDEOIMAGE_SAMPLE2 , yang menentukan bagaimana gambar disajikan dalam bingkai. Anda dapat menambahkan gambar dengan mengatur anggota WMT_VIDEOIMAGE_SAMPLE2 dwControlFlags ke WMT_VIDEOIMAGE_SAMPLE_INPUT_FRAME. Ketika Anda meneruskan bingkai input ke codec, gambar tersebut menjadi gambar saat ini. Gambar yang merupakan gambar saat ini dalam sampel sebelumnya biasanya menjadi gambar sebelumnya, dan gambar yang merupakan gambar sebelumnya dalam sampel sebelumnya dibuang. Anda dapat mengonfigurasi codec untuk mempertahankan gambar lama sebelumnya dengan mengatur anggota bKeepPrevImage ke TRUE. Dalam hal ini, gambar yang merupakan gambar saat ini dalam sampel sebelumnya dibuang.

Komposisi dasar bingkai Gambar Video ditentukan oleh dua faktor untuk setiap gambar: wilayah yang menarik dan koefisien campuran. Wilayah yang menarik untuk gambar ditentukan oleh titik asal, lebar, dan tinggi. Bagian dari gambar yang dijelaskan oleh wilayah minat mengisi bingkai output. Jika wilayah yang diminati berukuran berbeda dari bingkai output, codec mengubah ukurannya. Koefisien campuran gambar menentukan perpaduan dua gambar. Koefisien campuran untuk gambar saat ini dan sebelumnya harus total 1,0. Misalnya, jika fCurrBlendCoef diatur ke 0,5 dan fPrevBlendCoef diatur ke 0,5, maka bingkai output terdiri dari perpaduan yang sama dengan wilayah yang menarik dari kedua gambar.

Dengan memanipulasi wilayah yang diinginkan untuk gambar, Anda dapat membuat efek geser dan zoom. Koefisien campuran memungkinkan Anda memudar silang (larut) di antara gambar. Selain efek ini, Anda dapat menggunakan salah satu transisi yang telah ditentukan sebelumnya untuk membuat bingkai yang lebih kompleks. Transisi yang tersedia dijelaskan di bagian Transisi Gambar Video dari dokumentasi ini. Saat menggunakan transisi, Anda harus mengonfigurasi setiap bingkai. Cara termampu untuk melakukan ini adalah dengan membuat fungsi yang secara bertahap mengubah anggota struktur WMT_VIDEOIMAGE_SAMPLE2 untuk efek lengkap.

Untuk informasi selengkapnya tentang nilai yang akan diatur untuk deformasi, lihat WMT_VIDEOIMAGE_SAMPLE2.

Catatan Jika Anda ingin menyertakan audio dalam file dengan aliran Gambar Video, Anda harus menggunakan input audio yang tidak dikompresi. Untuk menggabungkan aliran Gambar Video dengan aliran audio terkompresi yang ada, Anda harus mendekompresi audio dan meneruskan sampel dalam yang tidak dikompresi. Jika Anda meneruskan sampel terkompresi ke penulis saat menulis aliran Gambar Video, kesalahan akan terjadi, yang mengakibatkan sampel dihilangkan dari video.

Selain itu, file Gambar Video terkompresi tanpa aliran audio dapat berisi beberapa bingkai video yang sangat kecil dan sangat terkompresi dalam satu paket ASF, yang dapat mengakibatkan pengalaman pemutaran yang buruk pada versi Pemutar Media Windows sebelumnya. Untuk menghindari masalah ini, solusi terbaik adalah memasukkan aliran audio senyap ke dalam file, meskipun ini juga akan meningkatkan ukuran file.

Gambar Video

Menulis File ASF