BAB II Decoder H.264/AVC Pada bab ini akan dibahas tentang teori dasar dari sistem H.264, modul dan algoritma dari Inverse Block Transform, Deblocking Filter dan Motion Compensator.
II.1 Sistem H.264 H.264 adalah standard video coding yang dibangun oleh Vidio Coding Expert Group (VCGE) dan ISO/ IEC Moving Picture Expert Group (MPEG). Standard ini mempresentasikan codec (syntax) yang mendeskripsikan visual data ke dalam keadaan kompresi dan metode decoding yang merekonstruksi informasi visual. Standard ini digunakan dalam percakapan (video telephony) dan aplikasi bukan percakapan (penyimpanan broadcast atau streaming) Pada standard MPEG-4 H.264/AVC, hal yang perlu diperhatikan ialah pengambilan gambar, warna, dan jenis slice. Pengambilan gambar terbagi atas spatial dan temporal yang merupakan representasi dari gambar yang bergerak. Warna gambar pada standar ini menggunakan tipe YCbCr yaitu luma komponen (terang gelap) dan perbedaan dari tiga warna (chroma) yang mempresentasikan intensitas warna dari setiap gambar. Format YCbCr yang digunakan adalah 4:2:0 yang mana berarti setiap Cb dan Cr memiliki resolusi yang bernilai setengah dari resolusi luma. Jenis slice dalam MPEG-4 H.264/AVC terdapat 5 slice yaitu I slice, P slice, B slice, SI dan SP slice. I slice atau intra slice mendiskripsikan gambar itu sendiri. P slice atau slice prediksi yaitu slice yang menggunakan satu atau beberapa slice yang telah didecode untuk dipakai dalam rekonstruksi gambar sebagai referensi. B slice atau slice bi-prediksi memiliki fungsi yang hampir sama dengan P slice, akan tetapi slice yang digunakan sebagai referensi gambar berasal dari gambar sebelum dan sesudahnya. SI dan SP merupakan switching slice digunakan untuk transisi diantara dua video stream yang berbeda.
5
Gambar 2.1. Blok diagram decoder MPEG-4 h.264/AVC[1]
Decoder memiliki fungsi untuk merekonstruksi sebuah salinan atau perkiraan dari gambar asli yang telah dikompresi.
Dalam blok diagram (gambar 2.1)
menunjukkan bagian-bagian penyusun MPEG4/H.264 decoder, dimana komponen utamanya yaitu: •
Modul Inverse Block Transform (blok T-1).
•
Modul Deblocking Filter (blok filter).
•
Modul Motion Compensator (blok MC).
II.2
Modul Inverse Block Transform
Modul Inverse Block Transform berfungsi untuk melakukan proses dekompresi terhadap data masukan yang diterima dari NAL (Network Abstraction Layer) dan Entropy Decode. Proses dekompresi dilakukan karena data yang diterima merupakan data dari encoder yang telah dikompresi dengan fungsi discrete inverse transform dan quantization. Fungsi yang dijalankan oleh Inverse Block Transform digambarkan dalam fungsi matriks berikut:
x IT
⎡1 ⎢1 =⎢ ⎢1 ⎢1 ⎣⎢ 2
1 1 1 ⎤ 1 −1 − 1 ⎥⎥ 2 2 1 ⎥ −1 −1 ⎥ 1 −1 −1 ⎥ 2⎦
⎤ ⎡ ⎢X ⎥ ⎢ IQ ⎥ ⎥ ⎢ ⎥ ⎢ ⎦ ⎣
di mana, xIT
= nilai hasil inv-block transform.
XIQ
= nilai hasil inv-quantization. 6
1 ⎤ ⎡1 1 1 2 ⎥ ⎢ 1 − − 1 1 1⎥ ⎢ 2 ⎢ ⎥ 1 1 ⎥ ⎢1 − 2 − 1 ⎢1 − 1 1 − 1 ⎥⎥ 2⎦ ⎣⎢
Dengan arsitektur:
Gambar2.2. Arsitektur Inverse Block Transform[2]
Desain Inverse Block Transform ini (Gambar 2.2) dirancang untuk menerima input 4 piksel per clock. Input yang diterima akan diproses menggunakan algoritma inverse transform sebanyak 2 kali, yaitu untuk arah vertikal dan arah horizontal. Oleh karena itu, disain membutuhkan modul trans_reg untuk melakukan transpose dari data vertikal menjadi data horizontal.
II.3
Modul Deblocking filter
Modul Deblocking Filter memiliki fungsi untuk mengurangi distorsi pada batas antar blok dalam suatu makroblok. Dengan menghilangkan efek distorsi ini, kualitas gambar yang diperoleh akan menjadi lebih tinggi. Satu siklus pemrosesan dalam suatu makroblok gambar dibutuhkan data dari satu makroblok yang akan diproses, ditambah dengan 4 blok sisi sebelah atas dan 4 blok sisi sebelah kiri yang berdekatan. Proses filtering ini dilakukan pada sisi vertical maupun horizontal dari suatu makroblok kecuali pada sisi batas slice. Setiap gambar video dikodekan ke dalam satu slice atau lebih, dengan urutan sebagai berikut: 7
•
Filter 4 batas vertikal pada komponen luma (dengan urutan a, b, c, d pada gambar2.3).
•
Filter 4 batas horizontal pada komponen luma (dengan urutan e, f, g, h pada gambar2.3).
•
Filter 2 batas vertikal pada komponen chroma (dengan urutan i, j pada gambar 2.3).
•
Filter 2 batas horizontal pada komponen chroma (dengan urutan k,l pada gambar2.3).
Gambar 2.3. Urutan proses filtering pada suatu makroblok[3]
Proses Debloking Filter dilakukan setiap baris baik secara vertical maupun secara horizontal dengan masukan 4 pixel data dari kedua blok yang berbatasan dengan sisi yang hendak difilter (gambar 2.4). Dalam pemrosesan data memiliki dua tahap yaitu penentuan Boundary Strength (BS) dan penentuan jenis filter yang diaplikasikan.
Gambar 2.4. Baris-baris data pada sisi vertical dan horizontal yang hendak difilter.[3]
8
Nilai-nilai BS yang berkisar antara 0-4 ditentukan berdasarkan kondisi blokblok sekitarnya (gambar 2.5). BS bernilai 4 jika input p dan/atau q adalah intra code dan merupakan sisi batas makroblok. BS bernilai 3 jika input p dan/atau q adalah intra code dan bukan merupakan sisi batas makroblok. BS Bernilai 2 jika input p dan/atau q bukan intra code dan memiliki nilai koefisien. BS bernilai 1 jika input p dan/atau 1 bukan intra code dan tidak mengandung nilai koefisien dan memiliki gambar referensi yang berbeda atau jumlah referensi gambar yang berbeda atau memiliki nilai-nilai motion vector yang berbeda oleh sebuah sampel luma atau lebih. Bs Bernilai 0 bila kondisi bs bernilai 1 hingga 4 tidak terpenuhi.
Gambar 2.5 Diagram Alir Penentuan Nilai Boundary Strength (bS).[3]
Syarat proses filtering diaplikasikan pada suatu kelompok sampel adalah: 1. bS > 0. 2. |p0 – q0| < α dan |p1 – p0| < β dan |q1 – q0| < β. α dan β merupakan nilai threshold yang didefinisikan di dalam standar MPEG4/H.264, dimana nilainya ditentukan oleh parameter kuantisasi (QP), FilterOffsetA, dan FilterOffsetB. 9
II.4
Modul Motion Compensator
Modul motion compensator (MC) berfungsi untuk menghasilkan frame prediction dari satu atau dua gambar referensi yang dipilih dari sekelompok gambar referensi. Modul ini berfungsi saat decoder berada pada inter mode. MC dalam melakukan prediksi, membutuhkan informasi dari frame-frame. Frame tersebut dapat berupa frame sebelum (forward prediction) atau sesudahnya (Backward prediction) yang ditunjukan pada gambar 2.6. Kemudian frame-frame tersebut menentukan nilai-nilai prediksi yang akan digunakan sebagai nilai acuan frame yang akan diambil. Nilai-nilai prediksi tersebut diperoleh dari nilai-nilai vector yang diberikan.
Gambar 2.6. Proses perdiksi dari frame sebelumnya dan frame sesudahnya. [5]
Untuk melakukan perdiksi digunakan Quarter Pixel Interpolation, dimana untuk referensi nilai-nilai piksel suatu gambar dibutuhkan 2 nilai piksel dari nilai tetangga sebelumnya dan 3 nilai piksel tetangganya sesudahnya (gambar2.7), sehingga dari suatu makroblok 16 x 16 piksel dibutuhkan 21 x 21 piksel. MC Memory Buffer Map 2 pix 2 pix
16 pix
16 pix
21 pix
3 pix 3 pix
21 pix
Gambar 2.7. Memory map untuk melakukan quarter piksel interpolation[6].
10
Nilai quarter piksel (gambar 2.8) didapatkan dengan melakukan perhitungan Half Piksel Interpolation dan dilanjutkan dengan perhitungan quarter piksel. Half piksel adalah nilai tengah dari dua piksel. Quarter piksel adalah nilai tengah dari dua half piksel. Perhitungan untuk mendapatkan half piksel adalah sebagai berikut: b’ = (E – 5 * F + 20 * G + 20 * H – 5 * I + J)
(1a)
b = Clip1( ( b’ + 16 ) >> 5 )
(1b)
h’ = (A – 5 * C + 20 * G + 20 * M – 5 * R + T)
(2a)
h = Clip1 ((h’ + 16) >> 5)
(2b)
j’ = cc’ – 5 * dd’ + 20 * h’ + 20 * m’ – 5 * ee’ + ff’
(3a)
atau j’ = aa’ – 5 * bb’ + 20 * b’ + 20 * s’ – 5 * gg’ + hh’
(3b)
j = Clip1( ( j’ + 512 ) >> 1)
(3c)
Perhitungan untuk mendapatkan Quarter piksel: a = ( G + b + 1 ) >> 1
(4a)
c = ( H + b + 1 ) >> 1
(4b)
d = ( G + h + 1 ) >> 1
(4c)
n = ( M + h + 1 ) >> 1
(4d)
f = ( b + j + 1 ) >> 1
(4e)
i = ( h + j + 1 ) >> 1
(4f)
k = ( j + m + 1 ) >> 1
(4g)
q = ( j + s + 1 ) >> 1
(4h)
e = ( b + h + 1 ) >> 1
(4i)
g = ( b + m + 1 ) >> 1
(4j)
p = ( h + s + 1 ) >> 1
(4k)
r = ( m + s + 1 ) >> 1
(4l)
11
E cc K
F dd L
A
aa
B
C
bb
D
G
a
b
c
d
e
f
g
h
i
j
k
n
p
q
r
H
I
J
m
ee
ff
P
Q
M
s
N
R
gg
S
T
hh
U
Gambar 2. 8.Half piksel dan quarter piksel[7]
Perhitungan pada chroma dilakukan dengan cara merata-ratakan hasil penjumlahan keempat sudutnya. Nilai tiap sudut didapatkan dari perkalian nilai piksel dengan koefisien jarak pada sumbu x dan y (gambar 2.9) B 8-y
A
x y
8-x
C
D
Gambar 2.9 Perhitungan koefisien pada MC chroma
Nilai piksel baru = (A*(8-x)*(8-y)+B*x*(8-y)+C*(8-x)*y+D*x*y+32)/4 (5a)
12