• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /******************************************************************************
2  *
3  * Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at:
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  ******************************************************************************/
18  /**
19  *******************************************************************************
20  * @file
21  *  ihevcd_statistics.h
22  *
23  * @brief
24  *  Contains macros for generating stats about hevc decoder
25  *
26  * @author
27  *  Naveen SR
28  *
29  * @par List of Functions:
30  *
31  * @remarks
32  *  None
33  *
34  *******************************************************************************
35  */
36  
37  #ifndef _IHEVCD_STATISTICS_H_
38  #define _IHEVCD_STATISTICS_H_
39  
40  #include <stdio.h>
41  #include "ihevc_typedefs.h"
42  #include "iv.h"
43  #include "ivd.h"
44  #include "ihevcd_cxa.h"
45  #include "ithread.h"
46  
47  #include "ihevc_defs.h"
48  #include "ihevc_structs.h"
49  
50  #include "ihevc_cabac_tables.h"
51  #include "ihevcd_defs.h"
52  
53  #include "ihevcd_structs.h"
54  #include "ihevcd_iquant_itrans_recon_ctb.h"
55  #include "ihevcd_statistics.h"
56  
57  #define STATISTICS_ENABLE 0
58  
59  #if STATISTICS_ENABLE
60  
61  typedef struct
62  {
63      UWORD32 num_4x4_dst;
64      UWORD32 num_4x4;
65      UWORD32 num_8x8;
66      UWORD32 num_16x16;
67      UWORD32 num_32x32;
68      UWORD32 num_64x64;
69  }stat_trans_t;
70  
71  typedef struct
72  {
73      /* 4x4 Subblock count */
74      UWORD32 trans_4x4_dst[1];
75      UWORD32 trans_4x4[1];
76      UWORD32 trans_8x8[4];
77      UWORD32 trans_16x16[16];
78      UWORD32 trans_32x32[64];
79  }stat_sblk_histogram_t;
80  
81  typedef struct
82  {
83      /* 4x4 Subblock count */
84      UWORD32 trans_4x4_dst[16];
85      UWORD32 trans_4x4[16];
86      UWORD32 trans_8x8[64];
87      UWORD32 trans_16x16[256];
88      UWORD32 trans_32x32[1024];
89  }stat_coeff_histogram_t;
90  
91  typedef struct
92  {
93      stat_trans_t stat_num_all_trans_block[2]; /* Y and UV */
94      stat_trans_t stat_num_coded_trans_block[2]; /* Y and UV */
95      stat_trans_t stat_num_coded_dc_block[2]; /* Y and UV */
96      stat_trans_t stat_num_coded_one_coeff_block[2]; /* Y and UV */
97      stat_sblk_histogram_t stat_last_sblk_pos_histogram; /* Y + UV */
98      stat_sblk_histogram_t stat_num_coded_sblk_histogram; /* Y + UV */
99      stat_coeff_histogram_t stat_num_coded_coeff_histogram; /* Y + UV */
100      UWORD32   stat_pu_all_size_hist[16][16]; /* PU Sizes [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
101      UWORD32   stat_pu_skip_size_hist[16][16]; /* PU sizes for skip [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
102      UWORD32   stat_pu_inter_size_hist[16][16]; /* PU sizes for inter [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
103      UWORD32   stat_pu_intra_size_hist[16][16]; /* PU sizes for intra [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
104      UWORD32   stat_pu_bipred_size_hist[16][16]; /* PU sizes for bipred [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
105      UWORD32   stat_pu_merge_size_hist[16][16]; /* PU sizes for merge [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
106      UWORD32   stat_pu_zeromv_size_hist[16][16]; /* PU sizes for Zero MV [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
107      UWORD32   stat_pu_zeromvfpel_size_hist[16][16]; /* PU sizes for Zero MV (includes subpel less than +/- 1 full pel units [Width from 4 to 64 in steps of 4] [Height from 4 to 64 in steps of 4]*/
108      UWORD32 last_sblk_pos_x; /* Last sblk pos of transform block in processing */
109      UWORD32 last_sblk_pos_y;
110      UWORD32 num_coded_sblk;
111      UWORD32 num_coded_coeffs;
112  }statistics_t;
113  
114  void ihevcd_update_num_all_trans_blocks(TRANSFORM_TYPE e_trans_type, WORD32 c_idx);
115  void ihevcd_update_num_trans_blocks(TRANSFORM_TYPE e_trans_type, WORD32 c_idx, WORD32 update_type);
116  void ihevcd_update_sblk_and_coeff_histogram(TRANSFORM_TYPE e_trans_type, WORD32 t_skip_or_tq_bypass);
117  void ihevcd_sblk_pos_init();
118  void ihevcd_sblk_pos_update(TRANSFORM_TYPE e_trans_type, WORD32 t_skip_or_tq_bypass, UWORD32 sblk_x, UWORD32 sblk_y);
119  void ihevcd_print_transform_statistics();
120  void ihevcd_update_coeff_count();
121  void ihevcd_update_pu_size(pu_t *ps_pu);
122  void ihevcd_update_pu_skip_size(pu_t *ps_pu);
123  #endif //STATISTICS_ENABLE
124  
125  #if STATISTICS_ENABLE
126  #define STATS_INIT()  ihevcd_init_statistics();
127  #define STATS_UPDATE_ALL_TRANS(e_trans_type, c_idx) ihevcd_update_num_all_trans_blocks(e_trans_type, c_idx);
128  #define STATS_UPDATE_CODED_TRANS(e_trans_type, c_idx, update_type) ihevcd_update_num_trans_blocks(e_trans_type, c_idx, update_type);
129  #define STATS_PRINT() ihevcd_print_statistics();
130  #define STATS_INIT_SBLK_AND_COEFF_POS() ihevcd_sblk_pos_init();
131  #define STATS_LAST_SBLK_POS_UPDATE(e_trans_type, t_skip_or_tq_bypass, sblk_x, sblk_y) ihevcd_sblk_pos_update(e_trans_type, t_skip_or_tq_bypass, sblk_x, sblk_y);
132  #define STATS_UPDATE_SBLK_AND_COEFF_HISTOGRAM(e_trans_type, t_skip_or_tq_bypass) ihevcd_update_sblk_and_coeff_histogram(e_trans_type, t_skip_or_tq_bypass);
133  #define STATS_UPDATE_COEFF_COUNT() ihevcd_update_coeff_count();
134  #define STATS_UPDATE_PU_SIZE(ps_pu) ihevcd_update_pu_size(ps_pu);
135  #define STATS_UPDATE_PU_SKIP_SIZE(ps_pu) ihevcd_update_pu_skip_size(ps_pu);
136  #else
137  #define STATS_INIT()  ;
138  #define STATS_UPDATE_ALL_TRANS(e_trans_type, c_idx) ;
139  #define STATS_UPDATE_CODED_TRANS(e_trans_type, c_idx, update_type) ;
140  #define STATS_PRINT() ;
141  #define STATS_INIT_SBLK_AND_COEFF_POS() ;
142  #define STATS_LAST_SBLK_POS_UPDATE(e_trans_type, t_skip_or_tq_bypass, sblk_x, sblk_y) ;
143  #define STATS_UPDATE_SBLK_AND_COEFF_HISTOGRAM(e_trans_type, t_skip_or_tq_bypass) ;
144  #define STATS_UPDATE_COEFF_COUNT() ;
145  #define STATS_UPDATE_PU_SIZE(ps_pu) ;
146  #define STATS_UPDATE_PU_SKIP_SIZE(ps_pu) ;
147  #endif
148  
149  #endif /* _IHEVCD_STATISTICS_H_ */
150