30 |
uint32_t |
uint32_t |
31 |
calc_cbp_c(const int16_t codes[6 * 64]) |
calc_cbp_c(const int16_t codes[6 * 64]) |
32 |
{ |
{ |
33 |
int i, j; |
unsigned int i=6; |
34 |
uint32_t cbp = 0; |
uint32_t cbp = 0; |
|
/* if definition is changed (e.g. from int16_t to something like int) this routine |
|
|
is not possible anymore! */ |
|
35 |
|
|
36 |
for (i = 5; i >= 0; i--, codes += 64) { |
/* uses fixed relation: 4*codes = 1*codes64 */ |
37 |
|
/* if prototype is changed (e.g. from int16_t to something like int32) this routine |
38 |
|
has to be changed! */ |
39 |
|
|
40 |
|
do { |
41 |
|
uint64_t *codes64 = (uint64_t*)codes; /* the compiler doesn't really make this */ |
42 |
|
uint32_t *codes32 = (uint32_t*)codes; /* variables, just "addressing modes" */ |
43 |
|
|
|
uint64_t *codes64 = (uint64_t*)codes; |
|
44 |
cbp += cbp; |
cbp += cbp; |
45 |
if (codes[1] || codes[2] || codes[3]) { |
if (codes[1] || codes32[1]) { |
46 |
cbp++; |
cbp++; |
|
continue; |
|
47 |
} |
} |
48 |
if (codes64[1] | codes64[2] | codes64[3]) { |
else if (codes64[1] | codes64[2] | codes64[3]) { |
49 |
cbp++; |
cbp++; |
|
continue; |
|
50 |
} |
} |
51 |
if (codes64[4] | codes64[5] | codes64[6] | codes64[7]) { |
else if (codes64[4] | codes64[5] | codes64[6] | codes64[7]) { |
52 |
cbp++; |
cbp++; |
|
continue; |
|
53 |
} |
} |
54 |
if (codes64[8] | codes64[9] | codes64[10] | codes64[11]) { |
else if (codes64[8] | codes64[9] | codes64[10] | codes64[11]) { |
55 |
cbp++; |
cbp++; |
|
continue; |
|
56 |
} |
} |
57 |
if (codes64[12] | codes64[13] | codes64[14] | codes64[15]) { |
else if (codes64[12] | codes64[13] | codes64[14] | codes64[15]) { |
58 |
cbp++; |
cbp++; |
|
continue; |
|
|
} |
|
59 |
} |
} |
60 |
|
codes += 64; |
61 |
|
i--; |
62 |
|
} while (i != 0); |
63 |
|
|
64 |
return cbp; |
return cbp; |
65 |
} |
} |