OpenCores
URL https://opencores.org/ocsvn/bluespec-h264/bluespec-h264/trunk

Subversion Repositories bluespec-h264

[/] [bluespec-h264/] [trunk/] [test/] [decoder/] [ldecod/] [inc/] [macroblock.h] - Blame information for rev 100

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 14 jamey.hick
 
2
/*!
3
 ************************************************************************
4
 * \file macroblock.h
5
 *
6
 * \brief
7
 *    Arrays for macroblock encoding
8
 *
9
 * \author
10
 *    Inge Lille-Langoy               <inge.lille-langoy@telenor.com>
11
 *    Copyright (C) 1999 Telenor Satellite Services, Norway
12
 ************************************************************************
13
 */
14
 
15
#ifndef _MACROBLOCK_H_
16
#define _MACROBLOCK_H_
17
 
18
 
19
//! single scan pattern
20
const byte SNGL_SCAN[16][2] =
21
{
22
  {0,0},{1,0},{0,1},{0,2},
23
  {1,1},{2,0},{3,0},{2,1},
24
  {1,2},{0,3},{1,3},{2,2},
25
  {3,1},{3,2},{2,3},{3,3}
26
};
27
 
28
//! field scan pattern
29
const byte FIELD_SCAN[16][2] =
30
{
31
  {0,0},{0,1},{1,0},{0,2},
32
  {0,3},{1,1},{1,2},{1,3},
33
  {2,0},{2,1},{2,2},{2,3},
34
  {3,0},{3,1},{3,2},{3,3}
35
};
36
 
37
 
38
//! gives CBP value from codeword number, both for intra and inter
39
const unsigned char NCBP[2][48][2]=
40
{
41
  {  // 0      1        2       3       4       5       6       7       8       9      10      11
42
    {15, 0},{ 0, 1},{ 7, 2},{11, 4},{13, 8},{14, 3},{ 3, 5},{ 5,10},{10,12},{12,15},{ 1, 7},{ 2,11},
43
    { 4,13},{ 8,14},{ 6, 6},{ 9, 9},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},
44
    { 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},
45
    { 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0}
46
  },
47
  {
48
    {47, 0},{31,16},{15, 1},{ 0, 2},{23, 4},{27, 8},{29,32},{30, 3},{ 7, 5},{11,10},{13,12},{14,15},
49
    {39,47},{43, 7},{45,11},{46,13},{16,14},{ 3, 6},{ 5, 9},{10,31},{12,35},{19,37},{21,42},{26,44},
50
    {28,33},{35,34},{37,36},{42,40},{44,39},{ 1,43},{ 2,45},{ 4,46},{ 8,17},{17,18},{18,20},{20,24},
51
    {24,19},{ 6,21},{ 9,26},{22,28},{25,23},{32,27},{33,29},{34,30},{36,22},{40,25},{38,38},{41,41}
52
  }
53
};
54
 
55
 
56
//! used to control block sizes : Not used/16x16/16x8/8x16/8x8/8x4/4x8/4x4
57
const int BLOCK_STEP[8][2]=
58
{
59
  {0,0},{4,4},{4,2},{2,4},{2,2},{2,1},{1,2},{1,1}
60
};
61
 
62
//! Dequantization coefficients
63
const int dequant_coef[6][4][4] = {
64
  {{10, 13, 10, 13},{ 13, 16, 13, 16},{10, 13, 10, 13},{ 13, 16, 13, 16}},
65
  {{11, 14, 11, 14},{ 14, 18, 14, 18},{11, 14, 11, 14},{ 14, 18, 14, 18}},
66
  {{13, 16, 13, 16},{ 16, 20, 16, 20},{13, 16, 13, 16},{ 16, 20, 16, 20}},
67
  {{14, 18, 14, 18},{ 18, 23, 18, 23},{14, 18, 14, 18},{ 18, 23, 18, 23}},
68
  {{16, 20, 16, 20},{ 20, 25, 20, 25},{16, 20, 16, 20},{ 20, 25, 20, 25}},
69
  {{18, 23, 18, 23},{ 23, 29, 23, 29},{18, 23, 18, 23},{ 23, 29, 23, 29}}
70
};
71
 
72
const byte QP_SCALE_CR[52]=
73
{
74
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,
75
   12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,
76
   28,29,29,30,31,32,32,33,34,34,35,35,36,36,37,37,
77
   37,38,38,38,39,39,39,39
78
 
79
};
80
 
81
//! single scan pattern
82
const byte SNGL_SCAN8x8[64][2] = {
83
  {0,0}, {1,0}, {0,1}, {0,2}, {1,1}, {2,0}, {3,0}, {2,1}, {1,2}, {0,3}, {0,4}, {1,3}, {2,2}, {3,1}, {4,0}, {5,0},
84
  {4,1}, {3,2}, {2,3}, {1,4}, {0,5}, {0,6}, {1,5}, {2,4}, {3,3}, {4,2}, {5,1}, {6,0}, {7,0}, {6,1}, {5,2}, {4,3},
85
  {3,4}, {2,5}, {1,6}, {0,7}, {1,7}, {2,6}, {3,5}, {4,4}, {5,3}, {6,2}, {7,1}, {7,2}, {6,3}, {5,4}, {4,5}, {3,6},
86
  {2,7}, {3,7}, {4,6}, {5,5}, {6,4}, {7,3}, {7,4}, {6,5}, {5,6}, {4,7}, {5,7}, {6,6}, {7,5}, {7,6}, {6,7}, {7,7}
87
};
88
 
89
/*
90
//! field scan pattern
91
const byte FIELD_SCAN8x8[64][2] = {
92
{0,0}, {0,1}, {0,2}, {1,0}, {1,1}, {0,3}, {0,4}, {1,2}, {2,0}, {2,1}, {1,3}, {0,5}, {0,6}, {1,4}, {2,2}, {3,0},
93
{3,1}, {2,3}, {1,5}, {0,7}, {1,6}, {2,4}, {3,2}, {4,0}, {4,1}, {3,3}, {2,5}, {1,7}, {2,6}, {3,4}, {4,2}, {5,0},
94
{5,1}, {4,3}, {3,5}, {2,7}, {3,6}, {4,4}, {5,2}, {6,0}, {6,1}, {5,3}, {4,5}, {3,7}, {4,6}, {5,4}, {6,2}, {7,0},
95
{7,1}, {6,3}, {5,5}, {4,7}, {5,6}, {6,4}, {7,2}, {7,3}, {6,5}, {5,7}, {6,6}, {7,4}, {7,5}, {6,7}, {7,6}, {7,7}
96
};
97
*/
98
 
99
//! field scan pattern
100
//original from ABT
101
const byte FIELD_SCAN8x8[64][2] = {   // 8x8
102
  {0,0}, {0,1}, {0,2}, {1,0}, {1,1}, {0,3}, {0,4}, {1,2}, {2,0}, {1,3}, {0,5}, {0,6}, {0,7}, {1,4}, {2,1}, {3,0},
103
  {2,2}, {1,5}, {1,6}, {1,7}, {2,3}, {3,1}, {4,0}, {3,2}, {2,4}, {2,5}, {2,6}, {2,7}, {3,3}, {4,1}, {5,0}, {4,2},
104
  {3,4}, {3,5}, {3,6}, {3,7}, {4,3}, {5,1}, {6,0}, {5,2}, {4,4}, {4,5}, {4,6}, {4,7}, {5,3}, {6,1}, {6,2}, {5,4},
105
  {5,5}, {5,6}, {5,7}, {6,3}, {7,0}, {7,1}, {6,4}, {6,5}, {6,6}, {6,7}, {7,2}, {7,3}, {7,4}, {7,5}, {7,6}, {7,7}
106
};
107
 
108
 
109
static const int dequant_coef8[6][8][8] =
110
{
111
  {
112
    {20,  19, 25, 19, 20, 19, 25, 19},
113
    {19,  18, 24, 18, 19, 18, 24, 18},
114
    {25,  24, 32, 24, 25, 24, 32, 24},
115
    {19,  18, 24, 18, 19, 18, 24, 18},
116
    {20,  19, 25, 19, 20, 19, 25, 19},
117
    {19,  18, 24, 18, 19, 18, 24, 18},
118
    {25,  24, 32, 24, 25, 24, 32, 24},
119
    {19,  18, 24, 18, 19, 18, 24, 18}
120
  },
121
  {
122
    {22,  21, 28, 21, 22, 21, 28, 21},
123
    {21,  19, 26, 19, 21, 19, 26, 19},
124
    {28,  26, 35, 26, 28, 26, 35, 26},
125
    {21,  19, 26, 19, 21, 19, 26, 19},
126
    {22,  21, 28, 21, 22, 21, 28, 21},
127
    {21,  19, 26, 19, 21, 19, 26, 19},
128
    {28,  26, 35, 26, 28, 26, 35, 26},
129
    {21,  19, 26, 19, 21, 19, 26, 19}
130
  },
131
  {
132
    {26,  24, 33, 24, 26, 24, 33, 24},
133
    {24,  23, 31, 23, 24, 23, 31, 23},
134
    {33,  31, 42, 31, 33, 31, 42, 31},
135
    {24,  23, 31, 23, 24, 23, 31, 23},
136
    {26,  24, 33, 24, 26, 24, 33, 24},
137
    {24,  23, 31, 23, 24, 23, 31, 23},
138
    {33,  31, 42, 31, 33, 31, 42, 31},
139
    {24,  23, 31, 23, 24, 23, 31, 23}
140
  },
141
  {
142
    {28,  26, 35, 26, 28, 26, 35, 26},
143
    {26,  25, 33, 25, 26, 25, 33, 25},
144
    {35,  33, 45, 33, 35, 33, 45, 33},
145
    {26,  25, 33, 25, 26, 25, 33, 25},
146
    {28,  26, 35, 26, 28, 26, 35, 26},
147
    {26,  25, 33, 25, 26, 25, 33, 25},
148
    {35,  33, 45, 33, 35, 33, 45, 33},
149
    {26,  25, 33, 25, 26, 25, 33, 25}
150
  },
151
  {
152
    {32,  30, 40, 30, 32, 30, 40, 30},
153
    {30,  28, 38, 28, 30, 28, 38, 28},
154
    {40,  38, 51, 38, 40, 38, 51, 38},
155
    {30,  28, 38, 28, 30, 28, 38, 28},
156
    {32,  30, 40, 30, 32, 30, 40, 30},
157
    {30,  28, 38, 28, 30, 28, 38, 28},
158
    {40,  38, 51, 38, 40, 38, 51, 38},
159
    {30,  28, 38, 28, 30, 28, 38, 28}
160
  },
161
  {
162
    {36,  34, 46, 34, 36, 34, 46, 34},
163
    {34,  32, 43, 32, 34, 32, 43, 32},
164
    {46,  43, 58, 43, 46, 43, 58, 43},
165
    {34,  32, 43, 32, 34, 32, 43, 32},
166
    {36,  34, 46, 34, 36, 34, 46, 34},
167
    {34,  32, 43, 32, 34, 32, 43, 32},
168
    {46,  43, 58, 43, 46, 43, 58, 43},
169
    {34,  32, 43, 32, 34, 32, 43, 32}
170
  }
171
 
172
};
173
 
174
//! single scan pattern
175
const byte SCAN_YUV422[8][2] =
176
{
177
  {0,0},{0,1},
178
  {1,0},{0,2},
179
  {0,3},{1,1},
180
  {1,2},{1,3}
181
};
182
 
183
//! look up tables for FRExt_chroma support
184
const unsigned char subblk_offset_x[3][8][4] =
185
{
186
  { {0, 4, 0, 4},
187
    {0, 4, 0, 4},
188
    {0, 0, 0, 0},
189
    {0, 0, 0, 0},
190
    {0, 0, 0, 0},
191
    {0, 0, 0, 0},
192
    {0, 0, 0, 0},
193
    {0, 0, 0, 0}, },
194
 
195
  { {0, 4, 0, 4},
196
    {0, 4, 0, 4},
197
    {0, 4, 0, 4},
198
    {0, 4, 0, 4},
199
    {0, 0, 0, 0},
200
    {0, 0, 0, 0},
201
    {0, 0, 0, 0},
202
    {0, 0, 0, 0}, },
203
 
204
  { {0, 4, 0, 4},
205
    {8,12, 8,12},
206
    {0, 4, 0, 4},
207
    {8,12, 8,12},
208
    {0, 4, 0, 4},
209
    {8,12, 8,12},
210
    {0, 4, 0, 4},
211
    {8,12, 8,12}  }
212
};
213
 
214
const unsigned char subblk_offset_y[3][8][4] =
215
{ { {0, 0, 4, 4},
216
    {0, 0, 4, 4},
217
    {0, 0, 0, 0},
218
    {0, 0, 0, 0},
219
    {0, 0, 0, 0},
220
    {0, 0, 0, 0},
221
    {0, 0, 0, 0},
222
    {0, 0, 0, 0}, },
223
 
224
  { {0, 0, 4, 4},
225
    {8, 8,12,12},
226
    {0, 0, 4, 4},
227
    {8, 8,12,12},
228
    {0, 0, 0, 0},
229
    {0, 0, 0, 0},
230
    {0, 0, 0, 0},
231
    {0, 0, 0, 0}  },
232
 
233
  { {0, 0, 4, 4},
234
    {0, 0, 4, 4},
235
    {8, 8,12,12},
236
    {8, 8,12,12},
237
    {0, 0, 4, 4},
238
    {0, 0, 4, 4},
239
    {8, 8,12,12},
240
    {8, 8,12,12} }
241
};
242
 
243
 
244
static unsigned char cofuv_blk_x[3][8][4] =
245
{ { {0, 1, 0, 1},
246
    {2, 3, 2, 3},
247
    {0, 0, 0, 0},
248
    {0, 0, 0, 0},
249
    {0, 0, 0, 0},
250
    {0, 0, 0, 0},
251
    {0, 0, 0, 0},
252
    {0, 0, 0, 0} },
253
 
254
  { {0, 1, 0, 1},
255
    {0, 1, 0, 1},
256
    {2, 3, 2, 3},
257
    {2, 3, 2, 3},
258
    {0, 0, 0, 0},
259
    {0, 0, 0, 0},
260
    {0, 0, 0, 0},
261
    {0, 0, 0, 0} },
262
 
263
  { {0, 1, 0, 1},
264
    {2, 3, 2, 3},
265
    {0, 1, 0, 1},
266
    {2, 3, 2, 3},
267
    {0, 1, 0, 1},
268
    {2, 3, 2, 3},
269
    {0, 1, 0, 1},
270
    {2, 3, 2, 3} }
271
};
272
 
273
static unsigned char cofuv_blk_y[3][8][4] =
274
{
275
  { { 4, 4, 5, 5},
276
    { 4, 4, 5, 5},
277
    { 0, 0, 0, 0},
278
    { 0, 0, 0, 0},
279
    { 0, 0, 0, 0},
280
    { 0, 0, 0, 0},
281
    { 0, 0, 0, 0},
282
    { 0, 0, 0, 0} },
283
 
284
  { { 4, 4, 5, 5},
285
    { 6, 6, 7, 7},
286
    { 4, 4, 5, 5},
287
    { 6, 6, 7, 7},
288
    { 0, 0, 0, 0},
289
    { 0, 0, 0, 0},
290
    { 0, 0, 0, 0},
291
    { 0, 0, 0, 0} },
292
 
293
  { { 4, 4, 5, 5},
294
    { 4, 4, 5, 5},
295
    { 6, 6, 7, 7},
296
    { 6, 6, 7, 7},
297
    { 8, 8, 9, 9},
298
    { 8, 8, 9, 9},
299
    {10,10,11,11},
300
    {10,10,11,11} }
301
};
302
 
303
static unsigned char cbp_blk_chroma[8][4] =
304
{ {16, 17, 18, 19},
305
  {20, 21, 22, 23},
306
  {24, 25, 26, 27},
307
  {28, 29, 30, 31},
308
  {32, 33, 34, 35},
309
  {36, 37, 38, 39},
310
  {40, 41, 42, 43},
311
  {44, 45, 46, 47} };
312
 
313
 
314
int   block8x8_idx[3][4][4] =
315
{ { {0, 1, 2, 3},
316
    {0, 0, 0, 0},
317
    {0, 0, 0, 0},
318
    {0, 0, 0, 0}, },
319
 
320
  { {0, 1, 0, 1},
321
    {2, 3, 2, 3},
322
    {0, 0, 0, 0},
323
    {0, 0, 0, 0}  },
324
 
325
  { {0, 0, 0, 0},
326
    {1, 1, 1, 1},
327
    {2, 2, 2, 2},
328
    {3, 3, 3, 3}  }
329
};
330
 
331
#define _NEW_8x8_ARRAYS_INCLUDED_
332
 
333
 
334
#endif
335
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.