Algoritma Kompresi Pada File AVI

Algoritma Kompresi Pada File AVI
a.      Microsoft Video-1
Microsoft Video-1 codec adalah suatu algoritma sederhana, terutama jika dibandingkan dengan metode kompresi modern. Algoritmanya beroperasi pada pada 4x4 blok piksel yang menyiratkan bahwa data sumber yang dimampatkan  harus dapat dibagi oleh 4 pada tinggi dan lebarnya. Seperti halnya memecahkan kode gambar MICROSOFT BMP memecahkan kode frame Video-1  menggunakan operasi bottom-to-top (Mike Melanson, 2003).

Pengkodean Video-1 mempunyai dua varian: Satu varian menyandi 8-bit data palettized, di mana palet disimpan pada file header AVI . Yang kedua  varian menyandi 16-bit warna. Sebenarnya, warna data adalah BGR555 , dan  pada bit puncak kadang-kadang digunakan untuk ekstra informasi. Untuk menentukan varian mana pada file AVI yang digunakan, uji file header AVI tersebut,terutama daerah BitCount dari bitmap header dalam file header AVI file.

8-Bit Video-1 Data
Dalam 8-bit varian Video-1, yang dikodekan 8-bit pixel adalah  indeks ke dalam tabel palet pada file AVI yang mengantarkan data Video-1. Untuk memecah kode data pada video 1, baca byte pertama dan kedua sebagai byte_a dan byte_b secara berurutan. Nilai dari byte_b umumnya mengindikasikan apa yang harus dilakukan selanjutnya. 
byte_a = 0 dan byte_b = 0 : dari semua 4x4 blok gambar telah di lintasi maka pemecahan kode selesai.
0x84 <= byte_b < 0x88: Kode ini menetapkan bahwa suatu jumlah tertentu blok harus dilompati  untuk output stream. Hal ini bermanfaat dalam perubahan frame (pengkodean berubah dari frame ke frame) dan untuk mendapat kompresi yang lebih baik. Dengan rumus untuk melompati
Jika  (0x84 <= byte_b <= 0x87) [100001] maka
Lewati blok n, dimana n dihitung dengan ( byte_b – 0x87) * 256 + byte_a
Karena byte_b harus >= 0x87 dan <= 0x87, nilai dari byte_b terlarang dari 0...3 , yang menandakan bahwa perintah ini dapat melewati antara blok = 0..1023 ( jika  byte_b = 0x87 dan byte_a = 0xFF )
Byte_b < 0x80 : pengkodean 2 warna, dalam pengkodean ini dua byte selanjutnya dalam pengkodean byte stream adalah warna_a dan warna_b. Byte_a dan byte_b diubah menjadi satuan tanda (flags) yang merepresentasikan warna a atau b kepiksel tertentu diblok kode. Bentuk dari tanda (flags) :
b4   b5   b6   b7
b0   b1   b2   b3
a4    a5   a6   a7
a0    a1   a2   a3
Sebagai contoh, jika bit 0 dari byte_a adalah 1, maka piksel kiri paling bawah dari blok adalah warna_a, demikian sebaliknya. Dalam keseluruhan sebuah blok 2 warna di kodekan sebagai 4 byte :
Byte_a
Byte_b
Warna_a
Warna_b
0x90 <= byte_b : pengkodean 8 warna, pada pengkodean ini, sebuah blok 4x4 dapat memiliki 8 warna, lebih tepatnya bahwa blok 4x4 dibagi menjadi 4 2x2 quads, tiap quad dapat memiliki 2 warna.
Seperti pada pengkodean 2 warna, byte_a dan byte_b menjadi satuan tanda(flags) yang mengindikasikan warna piksel mana yang diletakkan pada blok yang ditelah dikodekan. Bentuk tanda (flags) sama seperti pada pengkodean 2 warna :
b4   b5   b6   b7
b0   b1   b2   b3
a4    a5   a6   a7
a0    a1   a2   a3
            2 kemungkinan warna untuk setiap dari 4 quads secara langsung mengikuti 2 blok bytes tersebut. Dalam keseluruhan sebuah blok 8 warna adalah pengkodean 10 bytes :
            Byte_a
            Byte_b
            Quad1_a
            Quad1_b
            Quad2_a
            Quad2_b
            Quad3_a
            Quad3_b
            Quad4_a
            Quad4_b
b.      Cinepak
Pengkodean cinepak adalah suatu pengkodean dengan menggunkan teknik pengkodean yang sudah tua, yang saat ini jarang digunakan. Penkodean ini memiliki keuntungan pada penghitungannya yang sederhana pada penyandiannya. Pengkodean ini pada dasarnya adalah  sebuah quantisasi vector dengan mengadaptasi kepadatan vector.Setiap frame disegmentasikan kedalam 4x4 blok piksel, dan setiap blok dikodekan menggunakan baik 1 atau 4 vektor ( Tim Ferguson, 2001).
V1 = Satu vector per blok
V4 = empat vector per blok
Masing – masing v1 dan v4 memiliki tipe pengkodean vektor yang terpisah, dinamakan v1 code dan v4 code. Code ini masing – masing terdiri dari maximun 256 masukan.
Sebuah frame juga terbagi dalam sebuah potongan. Sebuah potongan menggambarkan sebuah area dari frame yang didefinisikan dengan dimensi yang sama. Setiap potongan terdiri dari pasangan code vektor yang unik.
Sebuah frame dapat dikodekan baik menggunakan 8 bit per piksel(bpp) atau 12 bpp. Dalam mode 12 bpp, setiap code vektor terdiri dari 4,8 bit  nilai luminance dan 2 sub-sample 8bit nilai chrominance.

Subscribe to receive free email updates: