1*a97c2a1fSXin Li /******************************************************************************
2*a97c2a1fSXin Li *
3*a97c2a1fSXin Li * Copyright (C) 2015 The Android Open Source Project
4*a97c2a1fSXin Li *
5*a97c2a1fSXin Li * Licensed under the Apache License, Version 2.0 (the "License");
6*a97c2a1fSXin Li * you may not use this file except in compliance with the License.
7*a97c2a1fSXin Li * You may obtain a copy of the License at:
8*a97c2a1fSXin Li *
9*a97c2a1fSXin Li * http://www.apache.org/licenses/LICENSE-2.0
10*a97c2a1fSXin Li *
11*a97c2a1fSXin Li * Unless required by applicable law or agreed to in writing, software
12*a97c2a1fSXin Li * distributed under the License is distributed on an "AS IS" BASIS,
13*a97c2a1fSXin Li * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*a97c2a1fSXin Li * See the License for the specific language governing permissions and
15*a97c2a1fSXin Li * limitations under the License.
16*a97c2a1fSXin Li *
17*a97c2a1fSXin Li *****************************************************************************
18*a97c2a1fSXin Li * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*a97c2a1fSXin Li */
20*a97c2a1fSXin Li #include <string.h>
21*a97c2a1fSXin Li #include <stdio.h>
22*a97c2a1fSXin Li
23*a97c2a1fSXin Li #include "iv_datatypedef.h"
24*a97c2a1fSXin Li #include "iv.h"
25*a97c2a1fSXin Li #include "ivd.h"
26*a97c2a1fSXin Li #include "impeg2d.h"
27*a97c2a1fSXin Li
28*a97c2a1fSXin Li #include "impeg2_buf_mgr.h"
29*a97c2a1fSXin Li #include "impeg2_disp_mgr.h"
30*a97c2a1fSXin Li #include "impeg2_macros.h"
31*a97c2a1fSXin Li #include "impeg2_defs.h"
32*a97c2a1fSXin Li #include "impeg2_platform_macros.h"
33*a97c2a1fSXin Li #include "impeg2_inter_pred.h"
34*a97c2a1fSXin Li #include "impeg2_idct.h"
35*a97c2a1fSXin Li #include "impeg2_format_conv.h"
36*a97c2a1fSXin Li #include "impeg2_mem_func.h"
37*a97c2a1fSXin Li #include "impeg2_globals.h"
38*a97c2a1fSXin Li
39*a97c2a1fSXin Li #include "impeg2d_bitstream.h"
40*a97c2a1fSXin Li #include "impeg2d_api.h"
41*a97c2a1fSXin Li #include "impeg2d_structs.h"
42*a97c2a1fSXin Li #include "impeg2d_debug.h"
43*a97c2a1fSXin Li
44*a97c2a1fSXin Li #if STATISTICS
45*a97c2a1fSXin Li WORD32 gai4_impeg2d_idct_inp_last_nonzero_histogram[64] = {0};
46*a97c2a1fSXin Li WORD32 gai4_impeg2d_idct_inp_num_nonzero_histogram[64] = {0};
47*a97c2a1fSXin Li WORD32 gai4_impeg2d_idct_inp_last_non_zero_row_histogram[8] = {0};
48*a97c2a1fSXin Li
49*a97c2a1fSXin Li WORD32 gai4_impeg2d_iqnt_inp_last_nonzero_histogram[64] = {0};
50*a97c2a1fSXin Li WORD32 gai4_impeg2d_iqnt_inp_num_nonzero_histogram[64] = {0};
51*a97c2a1fSXin Li WORD32 gai4_impeg2d_iqnt_inp_last_non_zero_row_histogram[8] = {0};
52*a97c2a1fSXin Li
53*a97c2a1fSXin Li WORD32 gi4_impeg2d_idct_inp_only_first_coeff = 0;
54*a97c2a1fSXin Li WORD32 gi4_impeg2d_idct_inp_only_last_coeff = 0;
55*a97c2a1fSXin Li WORD32 gi4_impeg2d_idct_inp_only_first_n_last_coeff = 0;
56*a97c2a1fSXin Li WORD32 gi4_impeg2d_idct_cnt = 0;
57*a97c2a1fSXin Li
58*a97c2a1fSXin Li
59*a97c2a1fSXin Li WORD32 gi4_impeg2d_iqnt_inp_only_first_coeff = 0;
60*a97c2a1fSXin Li WORD32 gi4_impeg2d_iqnt_inp_only_last_coeff = 0;
61*a97c2a1fSXin Li WORD32 gi4_impeg2d_iqnt_inp_only_first_n_last_coeff = 0;
62*a97c2a1fSXin Li WORD32 gi4_impeg2d_iqnt_cnt = 0;
63*a97c2a1fSXin Li
64*a97c2a1fSXin Li
impeg2d_iqnt_inp_statistics(WORD16 * pi2_iqnt_inp,WORD32 i4_non_zero_cols,WORD32 i4_non_zero_rows)65*a97c2a1fSXin Li void impeg2d_iqnt_inp_statistics(WORD16 *pi2_iqnt_inp,
66*a97c2a1fSXin Li WORD32 i4_non_zero_cols,
67*a97c2a1fSXin Li WORD32 i4_non_zero_rows)
68*a97c2a1fSXin Li {
69*a97c2a1fSXin Li WORD32 i, j;
70*a97c2a1fSXin Li WORD32 i4_last_row = 0, i4_last_col = 0;
71*a97c2a1fSXin Li WORD32 i4_num_non_zero = 0;
72*a97c2a1fSXin Li WORD32 i4_non_zero_cols_computed = 0;
73*a97c2a1fSXin Li WORD32 i4_non_zero_rows_computed = 0;
74*a97c2a1fSXin Li
75*a97c2a1fSXin Li for(i = 0; i < 8; i++)
76*a97c2a1fSXin Li {
77*a97c2a1fSXin Li for(j = 0; j < 8; j++)
78*a97c2a1fSXin Li {
79*a97c2a1fSXin Li if(pi2_iqnt_inp[i * 8 + j])
80*a97c2a1fSXin Li {
81*a97c2a1fSXin Li i4_non_zero_cols_computed |= (1 << j);
82*a97c2a1fSXin Li i4_non_zero_rows_computed |= (1 << i);
83*a97c2a1fSXin Li }
84*a97c2a1fSXin Li }
85*a97c2a1fSXin Li }
86*a97c2a1fSXin Li
87*a97c2a1fSXin Li if(i4_non_zero_cols_computed != i4_non_zero_cols)
88*a97c2a1fSXin Li {
89*a97c2a1fSXin Li printf("IQ Input: Invalid non_zero_cols 0x%x non_zero_cols_computed 0x%x\n", i4_non_zero_cols, i4_non_zero_cols_computed);
90*a97c2a1fSXin Li }
91*a97c2a1fSXin Li if(i4_non_zero_rows_computed != i4_non_zero_rows)
92*a97c2a1fSXin Li {
93*a97c2a1fSXin Li printf("IQ Input: Invalid non_zero_rows 0x%x non_zero_rows_computed 0x%x\n", i4_non_zero_rows, i4_non_zero_rows_computed);
94*a97c2a1fSXin Li }
95*a97c2a1fSXin Li {
96*a97c2a1fSXin Li WORD32 last_non_zero_row = 32 - CLZ(i4_non_zero_rows);
97*a97c2a1fSXin Li gai4_impeg2d_iqnt_inp_last_non_zero_row_histogram[last_non_zero_row - 1]++;
98*a97c2a1fSXin Li }
99*a97c2a1fSXin Li for(i = 0; i < 8; i++)
100*a97c2a1fSXin Li {
101*a97c2a1fSXin Li for(j = 0; j < 8; j++)
102*a97c2a1fSXin Li {
103*a97c2a1fSXin Li if(pi2_iqnt_inp[i * 8 + j])
104*a97c2a1fSXin Li {
105*a97c2a1fSXin Li i4_last_col = MAX(i4_last_col, j);
106*a97c2a1fSXin Li i4_last_row = MAX(i4_last_row, i);
107*a97c2a1fSXin Li i4_num_non_zero++;
108*a97c2a1fSXin Li }
109*a97c2a1fSXin Li }
110*a97c2a1fSXin Li }
111*a97c2a1fSXin Li gai4_impeg2d_iqnt_inp_last_nonzero_histogram[i4_last_row * 8 + i4_last_col]++;
112*a97c2a1fSXin Li gai4_impeg2d_iqnt_inp_num_nonzero_histogram[i4_num_non_zero]++;
113*a97c2a1fSXin Li gi4_impeg2d_iqnt_cnt++;
114*a97c2a1fSXin Li /* Check if only (0,0) and (7,7) are non zero */
115*a97c2a1fSXin Li if(i4_num_non_zero == 1)
116*a97c2a1fSXin Li {
117*a97c2a1fSXin Li if(pi2_iqnt_inp[7 * 8 + 7])
118*a97c2a1fSXin Li gi4_impeg2d_iqnt_inp_only_last_coeff++;
119*a97c2a1fSXin Li }
120*a97c2a1fSXin Li if(i4_num_non_zero == 1)
121*a97c2a1fSXin Li {
122*a97c2a1fSXin Li if(pi2_iqnt_inp[0])
123*a97c2a1fSXin Li gi4_impeg2d_iqnt_inp_only_first_coeff++;
124*a97c2a1fSXin Li }
125*a97c2a1fSXin Li
126*a97c2a1fSXin Li if(i4_num_non_zero == 2)
127*a97c2a1fSXin Li {
128*a97c2a1fSXin Li if((pi2_iqnt_inp[0]) && (1 == pi2_iqnt_inp[7 * 8 + 7]))
129*a97c2a1fSXin Li gi4_impeg2d_iqnt_inp_only_first_n_last_coeff++;
130*a97c2a1fSXin Li }
131*a97c2a1fSXin Li }
132*a97c2a1fSXin Li
impeg2d_idct_inp_statistics(WORD16 * pi2_idct_inp,WORD32 i4_non_zero_cols,WORD32 i4_non_zero_rows)133*a97c2a1fSXin Li void impeg2d_idct_inp_statistics(WORD16 *pi2_idct_inp,
134*a97c2a1fSXin Li WORD32 i4_non_zero_cols,
135*a97c2a1fSXin Li WORD32 i4_non_zero_rows)
136*a97c2a1fSXin Li {
137*a97c2a1fSXin Li WORD32 i, j;
138*a97c2a1fSXin Li WORD32 i4_last_row = 0, i4_last_col = 0;
139*a97c2a1fSXin Li WORD32 i4_num_non_zero = 0;
140*a97c2a1fSXin Li WORD32 i4_non_zero_cols_computed = 0;
141*a97c2a1fSXin Li WORD32 i4_non_zero_rows_computed = 0;
142*a97c2a1fSXin Li
143*a97c2a1fSXin Li for(i = 0; i < 8; i++)
144*a97c2a1fSXin Li {
145*a97c2a1fSXin Li for(j = 0; j < 8; j++)
146*a97c2a1fSXin Li {
147*a97c2a1fSXin Li if(pi2_idct_inp[i * 8 + j])
148*a97c2a1fSXin Li {
149*a97c2a1fSXin Li i4_non_zero_cols_computed |= (1 << j);
150*a97c2a1fSXin Li i4_non_zero_rows_computed |= (1 << i);
151*a97c2a1fSXin Li }
152*a97c2a1fSXin Li }
153*a97c2a1fSXin Li }
154*a97c2a1fSXin Li
155*a97c2a1fSXin Li if(i4_non_zero_cols_computed != i4_non_zero_cols)
156*a97c2a1fSXin Li {
157*a97c2a1fSXin Li printf("IDCT Input: Invalid non_zero_cols 0x%x non_zero_cols_computed 0x%x\n", i4_non_zero_cols, i4_non_zero_cols_computed);
158*a97c2a1fSXin Li }
159*a97c2a1fSXin Li if(i4_non_zero_rows_computed != i4_non_zero_rows)
160*a97c2a1fSXin Li {
161*a97c2a1fSXin Li printf("IDCT Input: Invalid non_zero_rows 0x%x non_zero_rows_computed 0x%x\n", i4_non_zero_rows, i4_non_zero_rows_computed);
162*a97c2a1fSXin Li }
163*a97c2a1fSXin Li
164*a97c2a1fSXin Li {
165*a97c2a1fSXin Li WORD32 last_non_zero_row = 32 - CLZ(i4_non_zero_rows);
166*a97c2a1fSXin Li gai4_impeg2d_idct_inp_last_non_zero_row_histogram[last_non_zero_row - 1]++;
167*a97c2a1fSXin Li }
168*a97c2a1fSXin Li
169*a97c2a1fSXin Li for(i = 0; i < 8; i++)
170*a97c2a1fSXin Li {
171*a97c2a1fSXin Li for(j = 0; j < 8; j++)
172*a97c2a1fSXin Li {
173*a97c2a1fSXin Li if(pi2_idct_inp[i * 8 + j])
174*a97c2a1fSXin Li {
175*a97c2a1fSXin Li i4_last_col = MAX(i4_last_col, j);
176*a97c2a1fSXin Li i4_last_row = MAX(i4_last_row, i);
177*a97c2a1fSXin Li i4_num_non_zero++;
178*a97c2a1fSXin Li }
179*a97c2a1fSXin Li }
180*a97c2a1fSXin Li }
181*a97c2a1fSXin Li gai4_impeg2d_idct_inp_last_nonzero_histogram[i4_last_row * 8 + i4_last_col]++;
182*a97c2a1fSXin Li gai4_impeg2d_idct_inp_num_nonzero_histogram[i4_num_non_zero]++;
183*a97c2a1fSXin Li gi4_impeg2d_idct_cnt++;
184*a97c2a1fSXin Li /* Check if only (0,0) and (7,7) are non zero */
185*a97c2a1fSXin Li if(i4_num_non_zero == 1)
186*a97c2a1fSXin Li {
187*a97c2a1fSXin Li if(pi2_idct_inp[7 * 8 + 7])
188*a97c2a1fSXin Li gi4_impeg2d_idct_inp_only_last_coeff++;
189*a97c2a1fSXin Li }
190*a97c2a1fSXin Li if(i4_num_non_zero == 1)
191*a97c2a1fSXin Li {
192*a97c2a1fSXin Li if(pi2_idct_inp[0])
193*a97c2a1fSXin Li gi4_impeg2d_idct_inp_only_first_coeff++;
194*a97c2a1fSXin Li }
195*a97c2a1fSXin Li
196*a97c2a1fSXin Li if(i4_num_non_zero == 2)
197*a97c2a1fSXin Li {
198*a97c2a1fSXin Li if((pi2_idct_inp[0]) && (1 == pi2_idct_inp[7 * 8 + 7]))
199*a97c2a1fSXin Li gi4_impeg2d_idct_inp_only_first_n_last_coeff++;
200*a97c2a1fSXin Li }
201*a97c2a1fSXin Li }
impeg2d_print_idct_inp_statistics()202*a97c2a1fSXin Li void impeg2d_print_idct_inp_statistics()
203*a97c2a1fSXin Li {
204*a97c2a1fSXin Li WORD32 i, j;
205*a97c2a1fSXin Li WORD32 i4_sum;
206*a97c2a1fSXin Li WORD32 i4_accumulator;
207*a97c2a1fSXin Li i4_sum = 0;
208*a97c2a1fSXin Li for(i = 0; i < 8; i++)
209*a97c2a1fSXin Li {
210*a97c2a1fSXin Li for(j = 0; j < 8; j++)
211*a97c2a1fSXin Li {
212*a97c2a1fSXin Li i4_sum += gai4_impeg2d_idct_inp_last_nonzero_histogram[i * 8 + j];
213*a97c2a1fSXin Li }
214*a97c2a1fSXin Li }
215*a97c2a1fSXin Li printf("IDCT input : Only last coeff non-zero %8.2f\n", (gi4_impeg2d_idct_inp_only_last_coeff * 100.0) / gi4_impeg2d_idct_cnt);
216*a97c2a1fSXin Li printf("IDCT input : Only first coeff non-zero (Includes DC + mismatch) %8.2f\n", (gi4_impeg2d_idct_inp_only_first_coeff * 100.0) / gi4_impeg2d_idct_cnt);
217*a97c2a1fSXin Li
218*a97c2a1fSXin Li printf("IDCT input : Last non-zero coeff histogram\n");
219*a97c2a1fSXin Li for(i = 0; i < 8; i++)
220*a97c2a1fSXin Li {
221*a97c2a1fSXin Li for(j = 0; j < 8; j++)
222*a97c2a1fSXin Li {
223*a97c2a1fSXin Li double val = gai4_impeg2d_idct_inp_last_nonzero_histogram[i * 8 + j] * 100.0 / i4_sum;
224*a97c2a1fSXin Li printf("%8.2f \t", val);
225*a97c2a1fSXin Li
226*a97c2a1fSXin Li }
227*a97c2a1fSXin Li printf("\n");
228*a97c2a1fSXin Li }
229*a97c2a1fSXin Li
230*a97c2a1fSXin Li printf("IDCT input : Cumulative Last non-zero coeff histogram\n");
231*a97c2a1fSXin Li i4_accumulator = 0;
232*a97c2a1fSXin Li for(i = 0; i < 8; i++)
233*a97c2a1fSXin Li {
234*a97c2a1fSXin Li for(j = 0; j < 8; j++)
235*a97c2a1fSXin Li {
236*a97c2a1fSXin Li double val;
237*a97c2a1fSXin Li i4_accumulator += gai4_impeg2d_idct_inp_last_nonzero_histogram[i * 8 + j];
238*a97c2a1fSXin Li val = i4_accumulator * 100.0 / i4_sum;
239*a97c2a1fSXin Li
240*a97c2a1fSXin Li printf("%8.2f \t", val);
241*a97c2a1fSXin Li
242*a97c2a1fSXin Li }
243*a97c2a1fSXin Li printf("\n");
244*a97c2a1fSXin Li }
245*a97c2a1fSXin Li
246*a97c2a1fSXin Li
247*a97c2a1fSXin Li
248*a97c2a1fSXin Li printf("IDCT input : Number of non-zero coeff histogram\n");
249*a97c2a1fSXin Li i4_sum = 0;
250*a97c2a1fSXin Li for(i = 0; i < 8; i++)
251*a97c2a1fSXin Li {
252*a97c2a1fSXin Li for(j = 0; j < 8; j++)
253*a97c2a1fSXin Li {
254*a97c2a1fSXin Li i4_sum += gai4_impeg2d_idct_inp_num_nonzero_histogram[i * 8 + j];
255*a97c2a1fSXin Li }
256*a97c2a1fSXin Li }
257*a97c2a1fSXin Li for(i = 0; i < 8; i++)
258*a97c2a1fSXin Li {
259*a97c2a1fSXin Li for(j = 0; j < 8; j++)
260*a97c2a1fSXin Li {
261*a97c2a1fSXin Li double val = gai4_impeg2d_idct_inp_num_nonzero_histogram[i * 8 + j] * 100.0 / i4_sum;
262*a97c2a1fSXin Li printf("%8.2f \t", val);
263*a97c2a1fSXin Li
264*a97c2a1fSXin Li }
265*a97c2a1fSXin Li printf("\n");
266*a97c2a1fSXin Li }
267*a97c2a1fSXin Li
268*a97c2a1fSXin Li printf("IDCT input : Cumulative number of non-zero coeffs histogram\n");
269*a97c2a1fSXin Li i4_accumulator = 0;
270*a97c2a1fSXin Li for(i = 0; i < 8; i++)
271*a97c2a1fSXin Li {
272*a97c2a1fSXin Li for(j = 0; j < 8; j++)
273*a97c2a1fSXin Li {
274*a97c2a1fSXin Li double val;
275*a97c2a1fSXin Li i4_accumulator += gai4_impeg2d_idct_inp_num_nonzero_histogram[i * 8 + j];
276*a97c2a1fSXin Li val = i4_accumulator * 100.0 / i4_sum;
277*a97c2a1fSXin Li printf("%8.2f \t", val);
278*a97c2a1fSXin Li
279*a97c2a1fSXin Li }
280*a97c2a1fSXin Li printf("\n");
281*a97c2a1fSXin Li }
282*a97c2a1fSXin Li
283*a97c2a1fSXin Li printf("IDCT input : Last non-zero row histogram\n");
284*a97c2a1fSXin Li
285*a97c2a1fSXin Li
286*a97c2a1fSXin Li {
287*a97c2a1fSXin Li i4_accumulator = 0;
288*a97c2a1fSXin Li for(i = 0; i < 8; i++)
289*a97c2a1fSXin Li {
290*a97c2a1fSXin Li i4_accumulator += gai4_impeg2d_idct_inp_last_non_zero_row_histogram[i];
291*a97c2a1fSXin Li }
292*a97c2a1fSXin Li for(i = 0; i < 8; i++)
293*a97c2a1fSXin Li {
294*a97c2a1fSXin Li double val = gai4_impeg2d_idct_inp_last_non_zero_row_histogram[i] * 100.0 / i4_accumulator;
295*a97c2a1fSXin Li printf("%8.2f \t", val);
296*a97c2a1fSXin Li }
297*a97c2a1fSXin Li printf("\n");
298*a97c2a1fSXin Li }
299*a97c2a1fSXin Li
300*a97c2a1fSXin Li
301*a97c2a1fSXin Li
302*a97c2a1fSXin Li
303*a97c2a1fSXin Li }
304*a97c2a1fSXin Li
impeg2d_print_iqnt_inp_statistics()305*a97c2a1fSXin Li void impeg2d_print_iqnt_inp_statistics()
306*a97c2a1fSXin Li {
307*a97c2a1fSXin Li WORD32 i, j;
308*a97c2a1fSXin Li WORD32 i4_sum;
309*a97c2a1fSXin Li WORD32 i4_accumulator;
310*a97c2a1fSXin Li i4_sum = 0;
311*a97c2a1fSXin Li for(i = 0; i < 8; i++)
312*a97c2a1fSXin Li {
313*a97c2a1fSXin Li for(j = 0; j < 8; j++)
314*a97c2a1fSXin Li {
315*a97c2a1fSXin Li i4_sum += gai4_impeg2d_iqnt_inp_last_nonzero_histogram[i * 8 + j];
316*a97c2a1fSXin Li }
317*a97c2a1fSXin Li }
318*a97c2a1fSXin Li printf("IQnt input : Only last coeff non-zero %8.2f\n", (gi4_impeg2d_iqnt_inp_only_last_coeff * 100.0) / gi4_impeg2d_iqnt_cnt);
319*a97c2a1fSXin Li printf("IQnt input : Only first coeff non-zero (Includes DC + mismatch) %8.2f\n", (gi4_impeg2d_iqnt_inp_only_first_coeff * 100.0) / gi4_impeg2d_idct_cnt);
320*a97c2a1fSXin Li
321*a97c2a1fSXin Li printf("IQnt input : Last non-zero coeff histogram\n");
322*a97c2a1fSXin Li for(i = 0; i < 8; i++)
323*a97c2a1fSXin Li {
324*a97c2a1fSXin Li for(j = 0; j < 8; j++)
325*a97c2a1fSXin Li {
326*a97c2a1fSXin Li double val = gai4_impeg2d_iqnt_inp_last_nonzero_histogram[i * 8 + j] * 100.0 / i4_sum;
327*a97c2a1fSXin Li printf("%8.2f \t", val);
328*a97c2a1fSXin Li
329*a97c2a1fSXin Li }
330*a97c2a1fSXin Li printf("\n");
331*a97c2a1fSXin Li }
332*a97c2a1fSXin Li
333*a97c2a1fSXin Li printf("IQnt input : Cumulative Last non-zero coeff histogram\n");
334*a97c2a1fSXin Li i4_accumulator = 0;
335*a97c2a1fSXin Li for(i = 0; i < 8; i++)
336*a97c2a1fSXin Li {
337*a97c2a1fSXin Li for(j = 0; j < 8; j++)
338*a97c2a1fSXin Li {
339*a97c2a1fSXin Li double val;
340*a97c2a1fSXin Li i4_accumulator += gai4_impeg2d_iqnt_inp_last_nonzero_histogram[i * 8 + j];
341*a97c2a1fSXin Li val = i4_accumulator * 100.0 / i4_sum;
342*a97c2a1fSXin Li
343*a97c2a1fSXin Li printf("%8.2f \t", val);
344*a97c2a1fSXin Li
345*a97c2a1fSXin Li }
346*a97c2a1fSXin Li printf("\n");
347*a97c2a1fSXin Li }
348*a97c2a1fSXin Li
349*a97c2a1fSXin Li
350*a97c2a1fSXin Li
351*a97c2a1fSXin Li printf("IQnt input : Number of non-zero coeff histogram\n");
352*a97c2a1fSXin Li i4_sum = 0;
353*a97c2a1fSXin Li for(i = 0; i < 8; i++)
354*a97c2a1fSXin Li {
355*a97c2a1fSXin Li for(j = 0; j < 8; j++)
356*a97c2a1fSXin Li {
357*a97c2a1fSXin Li i4_sum += gai4_impeg2d_iqnt_inp_num_nonzero_histogram[i * 8 + j];
358*a97c2a1fSXin Li }
359*a97c2a1fSXin Li }
360*a97c2a1fSXin Li for(i = 0; i < 8; i++)
361*a97c2a1fSXin Li {
362*a97c2a1fSXin Li for(j = 0; j < 8; j++)
363*a97c2a1fSXin Li {
364*a97c2a1fSXin Li double val = gai4_impeg2d_iqnt_inp_num_nonzero_histogram[i * 8 + j] * 100.0 / i4_sum;
365*a97c2a1fSXin Li printf("%8.2f \t", val);
366*a97c2a1fSXin Li
367*a97c2a1fSXin Li }
368*a97c2a1fSXin Li printf("\n");
369*a97c2a1fSXin Li }
370*a97c2a1fSXin Li
371*a97c2a1fSXin Li printf("IQnt input : Cumulative number of non-zero coeffs histogram\n");
372*a97c2a1fSXin Li i4_accumulator = 0;
373*a97c2a1fSXin Li for(i = 0; i < 8; i++)
374*a97c2a1fSXin Li {
375*a97c2a1fSXin Li for(j = 0; j < 8; j++)
376*a97c2a1fSXin Li {
377*a97c2a1fSXin Li double val;
378*a97c2a1fSXin Li i4_accumulator += gai4_impeg2d_iqnt_inp_num_nonzero_histogram[i * 8 + j];
379*a97c2a1fSXin Li val = i4_accumulator * 100.0 / i4_sum;
380*a97c2a1fSXin Li printf("%8.2f \t", val);
381*a97c2a1fSXin Li
382*a97c2a1fSXin Li }
383*a97c2a1fSXin Li printf("\n");
384*a97c2a1fSXin Li }
385*a97c2a1fSXin Li
386*a97c2a1fSXin Li printf("IQnt input : Last non-zero row histogram\n");
387*a97c2a1fSXin Li
388*a97c2a1fSXin Li
389*a97c2a1fSXin Li {
390*a97c2a1fSXin Li i4_accumulator = 0;
391*a97c2a1fSXin Li for(i = 0; i < 8; i++)
392*a97c2a1fSXin Li {
393*a97c2a1fSXin Li i4_accumulator += gai4_impeg2d_iqnt_inp_last_non_zero_row_histogram[i];
394*a97c2a1fSXin Li }
395*a97c2a1fSXin Li for(i = 0; i < 8; i++)
396*a97c2a1fSXin Li {
397*a97c2a1fSXin Li double val = gai4_impeg2d_iqnt_inp_last_non_zero_row_histogram[i] * 100.0 / i4_accumulator;
398*a97c2a1fSXin Li printf("%8.2f \t", val);
399*a97c2a1fSXin Li }
400*a97c2a1fSXin Li printf("\n");
401*a97c2a1fSXin Li }
402*a97c2a1fSXin Li
403*a97c2a1fSXin Li }
404*a97c2a1fSXin Li
impeg2d_print_statistics()405*a97c2a1fSXin Li void impeg2d_print_statistics()
406*a97c2a1fSXin Li {
407*a97c2a1fSXin Li impeg2d_print_idct_inp_statistics();
408*a97c2a1fSXin Li impeg2d_print_iqnt_inp_statistics();
409*a97c2a1fSXin Li }
410*a97c2a1fSXin Li
411*a97c2a1fSXin Li
412*a97c2a1fSXin Li #endif
413*a97c2a1fSXin Li
414*a97c2a1fSXin Li #if DEBUG_MB
415*a97c2a1fSXin Li
416*a97c2a1fSXin Li static UWORD32 u4_debug_frm = 12;
417*a97c2a1fSXin Li static UWORD32 u4_debug_mb_x = 3;
418*a97c2a1fSXin Li static UWORD32 u4_debug_mb_y = 0;
419*a97c2a1fSXin Li
420*a97c2a1fSXin Li static UWORD32 u4_debug_frm_num = 0;
421*a97c2a1fSXin Li
422*a97c2a1fSXin Li /*****************************************************************************/
423*a97c2a1fSXin Li /* */
424*a97c2a1fSXin Li /* Function Name : example_of_a_function */
425*a97c2a1fSXin Li /* */
426*a97c2a1fSXin Li /* Description : This function illustrates the use of C coding standards. */
427*a97c2a1fSXin Li /* switch/case, if, for, block comments have been shown */
428*a97c2a1fSXin Li /* here. */
429*a97c2a1fSXin Li /* Inputs : <What inputs does the function take?> */
430*a97c2a1fSXin Li /* Globals : <Does it use any global variables?> */
431*a97c2a1fSXin Li /* Processing : <Describe how the function operates - include algorithm */
432*a97c2a1fSXin Li /* description> */
433*a97c2a1fSXin Li /* Outputs : <What does the function produce?> */
434*a97c2a1fSXin Li /* Returns : <What does the function return?> */
435*a97c2a1fSXin Li /* */
436*a97c2a1fSXin Li /* Issues : <List any issues or problems with this function> */
437*a97c2a1fSXin Li /* */
438*a97c2a1fSXin Li /* Revision History: */
439*a97c2a1fSXin Li /* */
440*a97c2a1fSXin Li /* DD MM YYYY Author(s) Changes (Describe the changes made) */
441*a97c2a1fSXin Li /* 13 07 2002 Ittiam Draft */
442*a97c2a1fSXin Li /* */
443*a97c2a1fSXin Li /*****************************************************************************/
impeg2d_trace_mb_start(UWORD32 u4_mb_x,UWORD32 u4_mb_y)444*a97c2a1fSXin Li void impeg2d_trace_mb_start(UWORD32 u4_mb_x, UWORD32 u4_mb_y)
445*a97c2a1fSXin Li {
446*a97c2a1fSXin Li UWORD32 u4_frm_num = impeg2d_frm_num_get();
447*a97c2a1fSXin Li
448*a97c2a1fSXin Li if(u4_frm_num == u4_debug_frm && u4_mb_x == u4_debug_mb_x && u4_mb_y == u4_debug_mb_y)
449*a97c2a1fSXin Li {
450*a97c2a1fSXin Li // printf("");
451*a97c2a1fSXin Li }
452*a97c2a1fSXin Li }
453*a97c2a1fSXin Li
454*a97c2a1fSXin Li /*****************************************************************************/
455*a97c2a1fSXin Li /* */
456*a97c2a1fSXin Li /* Function Name : example_of_a_function */
457*a97c2a1fSXin Li /* */
458*a97c2a1fSXin Li /* Description : This function illustrates the use of C coding standards. */
459*a97c2a1fSXin Li /* switch/case, if, for, block comments have been shown */
460*a97c2a1fSXin Li /* here. */
461*a97c2a1fSXin Li /* Inputs : <What inputs does the function take?> */
462*a97c2a1fSXin Li /* Globals : <Does it use any global variables?> */
463*a97c2a1fSXin Li /* Processing : <Describe how the function operates - include algorithm */
464*a97c2a1fSXin Li /* description> */
465*a97c2a1fSXin Li /* Outputs : <What does the function produce?> */
466*a97c2a1fSXin Li /* Returns : <What does the function return?> */
467*a97c2a1fSXin Li /* */
468*a97c2a1fSXin Li /* Issues : <List any issues or problems with this function> */
469*a97c2a1fSXin Li /* */
470*a97c2a1fSXin Li /* Revision History: */
471*a97c2a1fSXin Li /* */
472*a97c2a1fSXin Li /* DD MM YYYY Author(s) Changes (Describe the changes made) */
473*a97c2a1fSXin Li /* 13 07 2002 Ittiam Draft */
474*a97c2a1fSXin Li /* */
475*a97c2a1fSXin Li /*****************************************************************************/
impeg2d_frm_num_set(void)476*a97c2a1fSXin Li void impeg2d_frm_num_set(void)
477*a97c2a1fSXin Li {
478*a97c2a1fSXin Li u4_debug_frm_num++;
479*a97c2a1fSXin Li }
480*a97c2a1fSXin Li
481*a97c2a1fSXin Li
482*a97c2a1fSXin Li /*****************************************************************************/
483*a97c2a1fSXin Li /* */
484*a97c2a1fSXin Li /* Function Name : example_of_a_function */
485*a97c2a1fSXin Li /* */
486*a97c2a1fSXin Li /* Description : This function illustrates the use of C coding standards. */
487*a97c2a1fSXin Li /* switch/case, if, for, block comments have been shown */
488*a97c2a1fSXin Li /* here. */
489*a97c2a1fSXin Li /* Inputs : <What inputs does the function take?> */
490*a97c2a1fSXin Li /* Globals : <Does it use any global variables?> */
491*a97c2a1fSXin Li /* Processing : <Describe how the function operates - include algorithm */
492*a97c2a1fSXin Li /* description> */
493*a97c2a1fSXin Li /* Outputs : <What does the function produce?> */
494*a97c2a1fSXin Li /* Returns : <What does the function return?> */
495*a97c2a1fSXin Li /* */
496*a97c2a1fSXin Li /* Issues : <List any issues or problems with this function> */
497*a97c2a1fSXin Li /* */
498*a97c2a1fSXin Li /* Revision History: */
499*a97c2a1fSXin Li /* */
500*a97c2a1fSXin Li /* DD MM YYYY Author(s) Changes (Describe the changes made) */
501*a97c2a1fSXin Li /* 13 07 2002 Ittiam Draft */
502*a97c2a1fSXin Li /* */
503*a97c2a1fSXin Li /*****************************************************************************/
impeg2d_frm_num_get(void)504*a97c2a1fSXin Li UWORD32 impeg2d_frm_num_get(void)
505*a97c2a1fSXin Li {
506*a97c2a1fSXin Li return(u4_debug_frm_num);
507*a97c2a1fSXin Li }
508*a97c2a1fSXin Li
509*a97c2a1fSXin Li #endif
510