Parent Directory | Revision Log
Revision 1.11 - (view) (download)
1 : | Isibaar | 1.1 | #include "../portab.h" |
2 : | #include "cbp.h" | ||
3 : | |||
4 : | cbpFuncPtr calc_cbp; | ||
5 : | |||
6 : | edgomez | 1.2 | /* |
7 : | * Returns a field of bits that indicates non zero ac blocks | ||
8 : | * for this macro block | ||
9 : | */ | ||
10 : | chl | 1.11 | |
11 : | /* naive C */ | ||
12 : | edgomez | 1.5 | uint32_t |
13 : | chl | 1.11 | calc_cbp_plain(const int16_t codes[6 * 64]) |
14 : | Isibaar | 1.1 | { |
15 : | chl | 1.11 | int i, j; |
16 : | edgomez | 1.2 | uint32_t cbp = 0; |
17 : | Isibaar | 1.1 | |
18 : | edgomez | 1.5 | for (i = 0; i < 6; i++) { |
19 : | chl | 1.11 | for (j=1; j<64;j++) { |
20 : | if (codes[64*i+j]) { | ||
21 : | cbp |= 1 << (5-i); | ||
22 : | Isibaar | 1.1 | break; |
23 : | } | ||
24 : | } | ||
25 : | chl | 1.11 | } |
26 : | return cbp; | ||
27 : | } | ||
28 : | |||
29 : | /* optimized C */ | ||
30 : | uint32_t | ||
31 : | calc_cbp_c(const int16_t codes[6 * 64]) | ||
32 : | { | ||
33 : | int i, j; | ||
34 : | uint32_t cbp = 0; | ||
35 : | /* if definition is changed (e.g. from int16_t to something like int) this routine | ||
36 : | is not possible anymore! */ | ||
37 : | edgomez | 1.2 | |
38 : | chl | 1.11 | for (i = 5; i >= 0; i--, codes += 64) { |
39 : | edgomez | 1.2 | |
40 : | chl | 1.11 | uint64_t *codes64 = (uint64_t*)codes; |
41 : | cbp += cbp; | ||
42 : | if (codes[1] || codes[2] || codes[3]) { | ||
43 : | cbp++; | ||
44 : | continue; | ||
45 : | } | ||
46 : | if (codes64[1] | codes64[2] | codes64[3]) { | ||
47 : | cbp++; | ||
48 : | continue; | ||
49 : | } | ||
50 : | if (codes64[4] | codes64[5] | codes64[6] | codes64[7]) { | ||
51 : | cbp++; | ||
52 : | continue; | ||
53 : | } | ||
54 : | if (codes64[8] | codes64[9] | codes64[10] | codes64[11]) { | ||
55 : | cbp++; | ||
56 : | continue; | ||
57 : | } | ||
58 : | if (codes64[12] | codes64[13] | codes64[14] | codes64[15]) { | ||
59 : | cbp++; | ||
60 : | continue; | ||
61 : | } | ||
62 : | } | ||
63 : | |||
64 : | return cbp; | ||
65 : | } | ||
66 : | |||
67 : | |||
68 : | |||
69 : | |||
70 : | /* older code maybe better on some plattforms? */ | ||
71 : | #if (0==1) | ||
72 : | for (i = 5; i >= 0; i--) { | ||
73 : | if (codes[1] | codes[2] | codes[3]) | ||
74 : | cbp |= 1 << i; | ||
75 : | else { | ||
76 : | for (j = 4; j <= 56; j+=4) /* [60],[61],[62],[63] are last */ | ||
77 : | if (codes[j] | codes[j+1] | codes[j+2] | codes[j+3]) { | ||
78 : | cbp |= 1 << i; | ||
79 : | break; | ||
80 : | } | ||
81 : | } | ||
82 : | codes += 64; | ||
83 : | edgomez | 1.2 | } |
84 : | |||
85 : | return cbp; | ||
86 : | chl | 1.11 | #endif |
No admin address has been configured | ViewVC Help |
Powered by ViewVC 1.0.4 |