Home | History | Annotate | Download | only in decoder
      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