Bagian Pertama dari Struktur Perintah Kontrol Macroblock

Empat anggota pertama dari struktur perintah kontrol makroblok generik selalu sama. Tabel berikut ini menjelaskan anggota bagian pertama dari struktur ini.

Anggota Deskripsi

wMBaddress

Menentukan alamat blok makro blok makro yang sedang diproses.

wMBtype

Menentukan tipe blokir makro yang sedang diproses. Anggota ini berisi bendera yang menunjukkan apakah kompensasi gerakan digunakan untuk memprediksi nilai macroblock dan jenis data perbedaan sisa apa yang dikirim.

dwMB_SNL

Berisi dua bidang MBskipsFollowing (dalam 8 bit atas) dan MBdataLocation (di 24 bit yang lebih rendah).

MBskipsFollowing menentukan jumlah blokir makro yang dilewati yang akan dihasilkan setelah blokir makro saat ini.

MBdataLocation adalah indeks ke dalam buffer data blok sisa IDCT, yang menunjukkan lokasi data perbedaan residu untuk blok blok makroblok saat ini.

wPatternCode

Menunjukkan apakah data perbedaan sisa dikirim untuk setiap blok dalam blok makro.

wMBaddress

Anggota struktur wMBaddress menentukan alamat macroblock dari makroblock saat ini dalam urutan pemindaian raster. Tabel berikut ini memperlihatkan contoh alamat blok makro.

Blokir Makro Alamat

kiri atas

Nol

kanan atas

wPicWidthInMBminus1

kiri bawah

wPicHeightInMBminus1 x (wPicWidthInMBminus1+1)

kanan bawah

(wPicHeightInMBminus1+1) x (wPicWidthInMBminus1+1) - 1

Alamat wPicWidthInMBminus1 dan wPicHeightInMBminus1 adalah anggota struktur DXVA_PictureParameters .

wMBtype

Anggota struktur wMBtype menentukan tipe macroblock yang sedang diproses. Anggota ini berisi sekumpulan bit yang menentukan cara makroblock dan vektor gerakan diproses. Alamat bPic4MVallowed, bPicScanMethod, bPicBackwardPrediction, bPicStructure, dan bPicScanFixed adalah anggota struktur DXVA_PictureParameters. Alamat bConfigHostInverseScan adalah anggota struktur DXVA_ConfigPictureDecode .

Bit Deskripsi

15 hingga 12

MvertFieldSel_3 (bit 15, yang paling signifikan) melalui MvertFieldSel_0 (bit 12)

Menentukan pilihan bidang vertikal untuk vektor gerakan terkait yang dikirim nanti dalam perintah kontrol makroblock, seperti yang ditentukan dalam tabel berikut ini. Untuk gerakan berbasis bingkai dengan struktur gambar bingkai (misalnya, untuk H.261 dan H.263), bit ini semuanya harus nol. Bit dalam bit MvertFieldSel_0, MvertFieldSel_1, MvertFieldSel_2, dan MvertFieldSel_3 sesuai dengan bit motion_vertical_field_select[r][s] di Bagian 6.3.17.2 dari MPEG-2.

11

Bit Yang Dipesan. Harus nol.

10

HostResidDiff

Menentukan apakah blok yang didekodekan perbedaan residual domain spasial dikirim, atau apakah koefisien transformasi dikirim untuk IDCT di luar host untuk blokir makro saat ini. Harus nol jika bConfigResidDiffHost adalah nol. Harus 1 jika bConfigResidDiffAccelerator adalah nol.

9 dan 8

MotionType

Menentukan tipe gerakan dalam gambar. Misalnya, untuk gerakan berbasis bingkai dengan struktur gambar bingkai (seperti pada H.261), bit 9 harus 1 dan bit 8 harus nol.

Penggunaan bit ini sesuai langsung dengan penggunaan bit frame_motion_type atau field_motion_type di Bagian 6.3.17.1 dan Tabel 6-17 dan 6-18 dari standar video MPEG-2 ketika bit ini ada dalam bitstream MPEG-2. Penggunaan bit ini dijelaskan lebih lanjut setelah tabel ini.

7 dan 6

MBscanMethod

Menentukan metode pemindaian blok makro. Ini harus sama dengan bPicScanMethod jika bPicScanFixed adalah 1. Jika HostResidDiff adalah 1, variabel ini tidak memiliki arti dan bit ini harus diatur ke nol.

Jika bConfigHostInverseScan nol, MBscanMethod harus menjadi salah satu nilai berikut:

  • Bit 6 adalah nol dan bit 7 adalah nol untuk pemindaian zigzag (MPEG-2 Gambar 7-2)

  • Bit 6 adalah 1 dan bit 7 adalah nol untuk pemindaian vertikal alternatif (MPEG-2 Gambar 7-3)

  • Bit 6 adalah nol dan bit 7 adalah 1 untuk pemindaian alternatif-horizontal (H.263 Gambar I.2 Bagian a)

Jika bConfigHostInverseScan adalah 1, MBscanMethod harus sama dengan nilai berikut:

  • Bit 6 adalah 1 dan bit 7 adalah 1 untuk pemindaian arbitrer dengan alamat koefisien absolut.

5

FieldResidual

Menunjukkan apakah blok perbedaan sisa menggunakan struktur IDCT bidang seperti yang ditentukan dalam MPEG-2.

Bendera ini harus 1 jika bPicStructure adalah 1 atau 2. Bendera ini harus nol ketika digunakan untuk MPEG-2 jika bendera frame_pred_frame_DCT dalam sintaks MPEG-2 adalah 1. Bendera ini harus sama dengan elemen dct_type sintaks MPEG-2 saat digunakan untuk MPEG-2 jika dct_type ada untuk macroblock.

4

H261LoopFilter

Menentukan apakah filter perulangan H.261 (Bagian 3.2.3 dari H.261) aktif untuk prediksi macroblock saat ini. Filter perulangan H.261 adalah filter 1/4, 1/2, 1/4 yang dapat dipisahkan yang diterapkan baik secara horizontal maupun vertikal ke enam blok dalam blok makro H.261, kecuali pada tepi blok di mana salah satu ketukan akan jatuh di luar blok. Dalam kasus seperti itu, filter diubah menjadi memiliki koefisien 0, 1, 0. Presisi aritmatika penuh dipertahankan dengan pembulatan ke bilangan bulat 8-bit pada output proses filter 2-D (setengah bilangan bulat atau nilai yang lebih tinggi dibulatkan ke atas).

3

Motion4MV

Menunjukkan bahwa gerakan maju menggunakan vektor gerakan yang berbeda untuk masing-masing dari empat blok luminans dalam blok makro, seperti yang digunakan dalam H.263 Annexes F dan J. Motion4MV harus nol jika MotionForward adalah nol atau jika bPic4MVallowed adalah nol.

2

MotionBackward

Variabel ini digunakan sebagaimana ditentukan untuk parameter macroblock_motion_backward yang sesuai di MPEG-2. Jika anggota bPicBackwardPrediction dari struktur DXVA_PictureParameters adalah nol, MotionBackward harus nol.

1

MotionForward

Variabel ini digunakan sebagaimana ditentukan untuk macroblock_motion_forward yang sesuai di MPEG-2. Penggunaan bit ini dijelaskan lebih lanjut dalam teks setelah tabel ini.

0

IntraMacroblock

Menunjukkan bahwa blok makro dikodekan sebagai intra dan tidak ada vektor gerakan yang digunakan untuk blokir makro saat ini.

Variabel ini sesuai dengan variabel macroblock_intra di MPEG-2. Penggunaan bit ini dijelaskan lebih lanjut dalam teks setelah tabel ini.

Ketika makroblock dikodekan secara prediktif, mereka memiliki nilai vektor gerakan terkait. Nilai dihasilkan berdasarkan apakah blokir makro digunakan untuk gambar berkode bidang atau berkode bingkai. Penting bagi implementasi apa pun untuk mempertimbangan dengan benar untuk setiap jenis macroblock yang digunakan (terutama untuk gambar terstruktur lapangan atau gerakan dual-prime).

Dua tabel berikut di bagian ini menunjukkan kombinasi IntraMacroblock, MotionForward, MotionBackward, MotionType, MvertFieldSel, dan MVector yang valid untuk gambar berkode bingkai dan bidang. MVector berisi komponen horizontal dan vertikal dari vektor gerakan. Variabel dan bendera yang tersisa menentukan operasi vektor gerakan. Ini ditentukan sesuai dengan jenis blok makro yang diproses dan apakah makroblok digunakan untuk gambar berkode bingkai atau berkode bidang.

Nilai yang diperlihatkan dalam tabel berikut (di bagian ini) terjadi untuk kondisi berikut:

  • H261LoopFilter, Motion4MV, dan bPicOBMC adalah nol.

  • Bendera PicCurrentField adalah nol kecuali bPicStructure adalah 2 (bidang bawah). Dalam hal ini, PicCurrentField adalah 1.

MVector adalah anggota struktur DXVA_MBctrl_P_HostResidDiff_1 dan DXVA_MBctrl_P_OffHostIDCT_1 . Bendera dan variabel IntraMacroblock, MotionForward, MotionBackward, MotionType, MvertFieldSel, H261LoopFilter, dan Motion4MV adalah bitfield yang terkandung dalam anggota wMBtype dari struktur DXVA_MBctrl_P_HostResidDiff_1 dan DXVA_MBctrl_P_OffHostIDCT_1. bPicOBMC adalah anggota struktur DXVA_PictureParameters . Bendera PicCurrentField berasal dari anggota bPicStructure DXVA_PictureParameters.

Pertimbangan berikut berlaku saat meninjau tabel berikut di bagian ini:

  • Di sejumlah tempat, nama variabel MPEG-2 PMV digunakan untuk menunjukkan nilai vektor gerakan. Notasi ini digunakan untuk membedakan antara variabel PMV seperti yang didefinisikan dalam MPEG-2, yang berada dalam koordinat bingkai, dan vektor gerakan yang mungkin berada di koordinat bidang (dengan kata lain, pada resolusi setengah vertikal). Dalam semua kasus, PMV mengacu pada nilai PMV setelah diperbarui oleh nilai vektor gerakan saat ini (seperti yang ditentukan dalam video MPEG-2 Bagian 7.6.3.1).

  • Definisi vektor'[2][0] dan vektor'[3][0] ditemukan di MPEG-2 Bagian 7.6.3.6. Operasi shift kiri-yang ditampilkan menunjukkan bahwa komponen vertikal dimodifikasi untuk membingkai koordinat.

  • Dalam kedua kasus "tanpa gerakan" (0,0,0), parameter makroblock meniru makroblock prediksi maju (0,1,0) dengan vektor gerakan bernilai nol. (Lihat juga MPEG-2 Bagian 7.6.3.5.)

  • Nilai yang ditampilkan untuk MotionType dalam tanda kutip tunggal adalah representasi biner (angka pertama adalah untuk bit 9 dan yang kedua adalah untuk bit 8).

  • Operator shift kiri dalam tabel pertama hanya berlaku untuk nilai kedua yang ditampilkan.

Gambar Terstruktur Bingkai

Tabel berikut menunjukkan kombinasi pengaturan elemen yang valid untuk gambar terstruktur bingkai (ketika anggota bPicStructure dari struktur DXVA_PictureParameters sama dengan 3).

IntraMacroblock, MotionForward, MotionBackward MotionType(artinya tergantung pada jenis gambar) MVector[0]MvertFieldSel_0 (1st, dir1) MVector[1]MvertFieldSel_1 (1st, dir2) MVector[2]MvertFieldSel_2 (ke-2, dir1) MVector[3]MvertFieldSel_3 (ke-2, dir2)

1,0,0 (intra)

'00' (intra)

-

-

-

-

-

-

-

-

0,0,0 (tanpa gerakan)

'10' (tanpa gerakan)

0

-

-

-

-

-

-

-

0,1,0

'10' (frame MC)

PMV[0][0]

-

-

-

-

-

-

-

0,0,1

'10' (frame MC)

-

-

PMV[0][1]

-

-

-

-

-

0,1,1

'10' (frame MC)

PMV[0][0]

-

PMV[0][1]

-

-

-

-

-

0,1,0

'01' (bidang MC)

PMV[0][0]

sel[0][0]

-

-

PMV[1][0]

sel[1][0]

-

-

0,0,1

'01' (bidang MC)

-

-

PMV[0][1]

sel[0][1]

-

-

PMV[1][1]

sel[1][1]

0,1,1

'01' (bidang MC)

PMV[0][0]

sel[0][0]

PMV[0][1]

sel[0][1]

PMV[1][0]

sel[1][0]

PMV[1][1]

sel[1][1]

0,1,0

'11' (dual-prime)

PMV[0][0]

0 (atas)

vector'[2][0][0],

vector'[2][0][1]<<1

1 (bawah)

PMV[0][0]

1

vector'[3][0][0],

vector'[3][0][1]<<1

0

Gambar Terstruktur Bidang

Tabel berikut ini memperlihatkan kombinasi pengaturan elemen yang valid untuk gambar terstruktur bidang (ketika anggota bPicStructure dari struktur DXVA_PictureParameters sama dengan 1 atau 2).

IntraMacroblock, MotionForward, MotionBackward MotionType (artinya tergantung pada jenis gambar) MVector[0]MvertFieldSel_0 (1st, dir1) MVector[1]MvertFieldSel_1 (1st, dir2) MVector[2]MvertFieldSel_2 (ke-2, dir1) MVector[3]MvertFieldSel_3(2nd, dir2)

1,0,0 (intra)

'00' (intra)

-

-

-

-

-

-

-

-

0,0,0 (tanpa gerakan)

'01' (tanpa gerakan)

0

PicCurrentField

-

-

-

-

-

-

0,1,0

'01' (bidang MC)

PMV[0][0]

sel[0][0]

-

-

-

-

-

-

0,0,1

'01' (bidang MC)

-

-

PMV[0][1]

sel[0][1]

-

-

-

-

0,1,1

'01' (bidang MC)

PMV[0][0]

sel[0][0]

PMV[0][1]

sel[0][1]

-

-

-

-

0,1,0

'10' (16x8 MC)

PMV[0][0]

sel[0][0]

-

-

PMV[1][0]

sel[1][0]

-

-

0,0,1

'10' (16x8 MC)

-

-

PMV[0][1]

sel[0][1]

-

-

PMV[1][1]

sel[1][1]

0,1,1

'10' (16x8 MC)

PMV[0][0]

sel[0][0]

PMV[0][1]

sel[0][1]

PMV[1][0]

sel[1][0]

PMV[1][1]

sel[1][1]

0,1,0

'11' (dual-prime)

PMV[0][0]

PicCurrentField

vektor'[2][0]

PicCurrentField

-

-

-

-

Pengaturan Elemen Valid Tambahan untuk Gambar Bidang dan Bingkai

Sisa kasus yang diizinkan untuk gambar terstruktur bingkai dan terstruktur bidang adalah sebagai berikut.

Nilai Deskripsi

H261LoopFilter = 1

bPicOBMC = 0

Motion4MV = 0

Menunjukkan bahwa satu vektor gerakan maju dikirim di MVector[0] dan bahwa filter perulangan H.261 aktif untuk prediksi maju dalam blok makro.

MotionForward harus 1 dalam hal ini, dan IntraMacroblock dan MotionBackward keduanya harus nol.

bPicOBMC = 0

Motion4MV = 1

Menunjukkan bahwa empat vektor gerakan maju dikirim di MVector[0] melalui MVector[3]. MotionForward harus 1 dalam hal ini, dan IntraMacroblock harus nol.

Jika MotionBackward adalah 1, vektor gerakan kelima dikirim untuk prediksi mundur di MVector[4].

bPicOBMC = 1

Motion4MV = 0

Menunjukkan bahwa 10 vektor gerakan maju dikirim dalam MVector[0] melalui MVector[9] untuk spesifikasi gerakan OBMC, dan bahwa nilai-nilai empat vektor gerakan pertama semuanya sama.

Jika MotionBackward adalah 1, vektor gerakan kesebelas dikirim untuk prediksi mundur di MVector[10].

bPicOBMC = 1

Motion4MV = 1

Menunjukkan bahwa 10 vektor gerakan maju dikirim dalam MVector[0] melalui MVector[9] untuk spesifikasi gerakan OBMC, dan bahwa nilai-nilai empat vektor gerakan pertama tersebut mungkin berbeda satu sama lain.

Jika MotionBackward adalah 1, vektor gerakan kesebelas dikirim untuk prediksi mundur di MVector[10].

Catatan Operator rata-rata identik secara matematis ((s1+s2+1)>>1) untuk pemfilteran prediksi setengah sampel MPEG-1, MPEG-2, rata-rata dua arah, dan gabungan paritas dual prime same-opposite. Operator rata-rata dua arah H.263 tidak menambahkan offset +1 sebelum pergeseran kanan. Anggota bBidirectionalAveragingModedari DXVA_PictureParameters menentukan metode mana yang digunakan.