10d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/****************************************************************************** 20d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 30d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore 40d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 50d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Licensed under the Apache License, Version 2.0 (the "License"); 60d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* you may not use this file except in compliance with the License. 70d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* You may obtain a copy of the License at: 80d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 90d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* http://www.apache.org/licenses/LICENSE-2.0 100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Unless required by applicable law or agreed to in writing, software 120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* distributed under the License is distributed on an "AS IS" BASIS, 130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* See the License for the specific language governing permissions and 150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* limitations under the License. 160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************/ 180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @file 210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* ihevcd_statistics.h 220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Contains macros for generating stats about hevc decoder 250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @author 270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Naveen SR 280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par List of Functions: 300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifndef _IHEVCD_STATISTICS_H_ 380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define _IHEVCD_STATISTICS_H_ 390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdio.h> 410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h" 420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "iv.h" 430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ivd.h" 440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_cxa.h" 450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ithread.h" 460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h" 480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_structs.h" 490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_cabac_tables.h" 510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_defs.h" 520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_structs.h" 540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_iquant_itrans_recon_ctb.h" 550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_statistics.h" 560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATISTICS_ENABLE 0 580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#if STATISTICS_ENABLE 600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakartypedef struct 620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 num_4x4_dst; 640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 num_4x4; 650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 num_8x8; 660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 num_16x16; 670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 num_32x32; 680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 num_64x64; 690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}stat_trans_t; 700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakartypedef struct 720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 4x4 Subblock count */ 740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 trans_4x4_dst[1]; 750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 trans_4x4[1]; 760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 trans_8x8[4]; 770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 trans_16x16[16]; 780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 trans_32x32[64]; 790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}stat_sblk_histogram_t; 800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakartypedef struct 820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 4x4 Subblock count */ 840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 trans_4x4_dst[16]; 850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 trans_4x4[16]; 860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 trans_8x8[64]; 870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 trans_16x16[256]; 880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 trans_32x32[1024]; 890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}stat_coeff_histogram_t; 900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakartypedef struct 920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar stat_trans_t stat_num_all_trans_block[2]; /* Y and UV */ 940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar stat_trans_t stat_num_coded_trans_block[2]; /* Y and UV */ 950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar stat_trans_t stat_num_coded_dc_block[2]; /* Y and UV */ 960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar stat_trans_t stat_num_coded_one_coeff_block[2]; /* Y and UV */ 970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar stat_sblk_histogram_t stat_last_sblk_pos_histogram; /* Y + UV */ 980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar stat_sblk_histogram_t stat_num_coded_sblk_histogram; /* Y + UV */ 990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar stat_coeff_histogram_t stat_num_coded_coeff_histogram; /* Y + UV */ 1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 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]*/ 1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 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]*/ 1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 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]*/ 1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 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]*/ 1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 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]*/ 1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 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]*/ 1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 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]*/ 1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 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]*/ 1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 last_sblk_pos_x; /* Last sblk pos of transform block in processing */ 1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 last_sblk_pos_y; 1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 num_coded_sblk; 1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 num_coded_coeffs; 1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}statistics_t; 1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_update_num_all_trans_blocks(TRANSFORM_TYPE e_trans_type, WORD32 c_idx); 1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_update_num_trans_blocks(TRANSFORM_TYPE e_trans_type, WORD32 c_idx, WORD32 update_type); 1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_update_sblk_and_coeff_histogram(TRANSFORM_TYPE e_trans_type, WORD32 t_skip_or_tq_bypass); 1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_sblk_pos_init(); 1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_sblk_pos_update(TRANSFORM_TYPE e_trans_type, WORD32 t_skip_or_tq_bypass, UWORD32 sblk_x, UWORD32 sblk_y); 1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_print_transform_statistics(); 1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_update_coeff_count(); 1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_update_pu_size(pu_t *ps_pu); 1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_update_pu_skip_size(pu_t *ps_pu); 1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif //STATISTICS_ENABLE 1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#if STATISTICS_ENABLE 1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_INIT() ihevcd_init_statistics(); 1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_ALL_TRANS(e_trans_type, c_idx) ihevcd_update_num_all_trans_blocks(e_trans_type, c_idx); 1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_CODED_TRANS(e_trans_type, c_idx, update_type) ihevcd_update_num_trans_blocks(e_trans_type, c_idx, update_type); 1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_PRINT() ihevcd_print_statistics(); 1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_INIT_SBLK_AND_COEFF_POS() ihevcd_sblk_pos_init(); 1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#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); 1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#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); 1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_COEFF_COUNT() ihevcd_update_coeff_count(); 1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_PU_SIZE(ps_pu) ihevcd_update_pu_size(ps_pu); 1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_PU_SKIP_SIZE(ps_pu) ihevcd_update_pu_skip_size(ps_pu); 1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else 1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_INIT() ; 1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_ALL_TRANS(e_trans_type, c_idx) ; 1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_CODED_TRANS(e_trans_type, c_idx, update_type) ; 1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_PRINT() ; 1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_INIT_SBLK_AND_COEFF_POS() ; 1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_LAST_SBLK_POS_UPDATE(e_trans_type, t_skip_or_tq_bypass, sblk_x, sblk_y) ; 1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_SBLK_AND_COEFF_HISTOGRAM(e_trans_type, t_skip_or_tq_bypass) ; 1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_COEFF_COUNT() ; 1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_PU_SIZE(ps_pu) ; 1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define STATS_UPDATE_PU_SKIP_SIZE(ps_pu) ; 1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif 1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif /* _IHEVCD_STATISTICS_H_ */ 150