1 /* 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 12 #ifndef VP8_COMMON_ONYXC_INT_H_ 13 #define VP8_COMMON_ONYXC_INT_H_ 14 15 #include "vpx_config.h" 16 #include "vp8_rtcd.h" 17 #include "vpx/internal/vpx_codec_internal.h" 18 #include "loopfilter.h" 19 #include "entropymv.h" 20 #include "entropy.h" 21 #if CONFIG_POSTPROC 22 #include "postproc.h" 23 #endif 24 25 /*#ifdef PACKET_TESTING*/ 26 #include "header.h" 27 /*#endif*/ 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 #define MINQ 0 34 #define MAXQ 127 35 #define QINDEX_RANGE (MAXQ + 1) 36 37 #define NUM_YV12_BUFFERS 4 38 39 #define MAX_PARTITIONS 9 40 41 typedef struct frame_contexts 42 { 43 vp8_prob bmode_prob [VP8_BINTRAMODES-1]; 44 vp8_prob ymode_prob [VP8_YMODES-1]; /* interframe intra mode probs */ 45 vp8_prob uv_mode_prob [VP8_UV_MODES-1]; 46 vp8_prob sub_mv_ref_prob [VP8_SUBMVREFS-1]; 47 vp8_prob coef_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES]; 48 MV_CONTEXT mvc[2]; 49 } FRAME_CONTEXT; 50 51 typedef enum 52 { 53 ONE_PARTITION = 0, 54 TWO_PARTITION = 1, 55 FOUR_PARTITION = 2, 56 EIGHT_PARTITION = 3 57 } TOKEN_PARTITION; 58 59 typedef enum 60 { 61 RECON_CLAMP_REQUIRED = 0, 62 RECON_CLAMP_NOTREQUIRED = 1 63 } CLAMP_TYPE; 64 65 typedef struct VP8Common 66 67 { 68 struct vpx_internal_error_info error; 69 70 DECLARE_ALIGNED(16, short, Y1dequant[QINDEX_RANGE][2]); 71 DECLARE_ALIGNED(16, short, Y2dequant[QINDEX_RANGE][2]); 72 DECLARE_ALIGNED(16, short, UVdequant[QINDEX_RANGE][2]); 73 74 int Width; 75 int Height; 76 int horiz_scale; 77 int vert_scale; 78 79 CLAMP_TYPE clamp_type; 80 81 YV12_BUFFER_CONFIG *frame_to_show; 82 83 YV12_BUFFER_CONFIG yv12_fb[NUM_YV12_BUFFERS]; 84 int fb_idx_ref_cnt[NUM_YV12_BUFFERS]; 85 int new_fb_idx, lst_fb_idx, gld_fb_idx, alt_fb_idx; 86 87 YV12_BUFFER_CONFIG temp_scale_frame; 88 89 #if CONFIG_POSTPROC 90 YV12_BUFFER_CONFIG post_proc_buffer; 91 YV12_BUFFER_CONFIG post_proc_buffer_int; 92 int post_proc_buffer_int_used; 93 unsigned char *pp_limits_buffer; /* post-processing filter coefficients */ 94 #endif 95 96 FRAME_TYPE last_frame_type; /* Save last frame's frame type for motion search. */ 97 FRAME_TYPE frame_type; 98 99 int show_frame; 100 101 int frame_flags; 102 int MBs; 103 int mb_rows; 104 int mb_cols; 105 int mode_info_stride; 106 107 /* profile settings */ 108 int mb_no_coeff_skip; 109 int no_lpf; 110 int use_bilinear_mc_filter; 111 int full_pixel; 112 113 int base_qindex; 114 115 int y1dc_delta_q; 116 int y2dc_delta_q; 117 int y2ac_delta_q; 118 int uvdc_delta_q; 119 int uvac_delta_q; 120 121 /* We allocate a MODE_INFO struct for each macroblock, together with 122 an extra row on top and column on the left to simplify prediction. */ 123 124 MODE_INFO *mip; /* Base of allocated array */ 125 MODE_INFO *mi; /* Corresponds to upper left visible macroblock */ 126 #if CONFIG_ERROR_CONCEALMENT 127 MODE_INFO *prev_mip; /* MODE_INFO array 'mip' from last decoded frame */ 128 MODE_INFO *prev_mi; /* 'mi' from last frame (points into prev_mip) */ 129 #endif 130 MODE_INFO *show_frame_mi; /* MODE_INFO for the last decoded frame 131 to show */ 132 LOOPFILTERTYPE filter_type; 133 134 loop_filter_info_n lf_info; 135 136 int filter_level; 137 int last_sharpness_level; 138 int sharpness_level; 139 140 int refresh_last_frame; /* Two state 0 = NO, 1 = YES */ 141 int refresh_golden_frame; /* Two state 0 = NO, 1 = YES */ 142 int refresh_alt_ref_frame; /* Two state 0 = NO, 1 = YES */ 143 144 int copy_buffer_to_gf; /* 0 none, 1 Last to GF, 2 ARF to GF */ 145 int copy_buffer_to_arf; /* 0 none, 1 Last to ARF, 2 GF to ARF */ 146 147 int refresh_entropy_probs; /* Two state 0 = NO, 1 = YES */ 148 149 int ref_frame_sign_bias[MAX_REF_FRAMES]; /* Two state 0, 1 */ 150 151 /* Y,U,V,Y2 */ 152 ENTROPY_CONTEXT_PLANES *above_context; /* row of context for each plane */ 153 ENTROPY_CONTEXT_PLANES left_context; /* (up to) 4 contexts "" */ 154 155 FRAME_CONTEXT lfc; /* last frame entropy */ 156 FRAME_CONTEXT fc; /* this frame entropy */ 157 158 unsigned int current_video_frame; 159 160 int version; 161 162 TOKEN_PARTITION multi_token_partition; 163 164 #ifdef PACKET_TESTING 165 VP8_HEADER oh; 166 #endif 167 #if CONFIG_POSTPROC_VISUALIZER 168 double bitrate; 169 double framerate; 170 #endif 171 172 #if CONFIG_MULTITHREAD 173 int processor_core_count; 174 #endif 175 #if CONFIG_POSTPROC 176 struct postproc_state postproc_state; 177 #endif 178 int cpu_caps; 179 } VP8_COMMON; 180 181 #ifdef __cplusplus 182 } // extern "C" 183 #endif 184 185 #endif // VP8_COMMON_ONYXC_INT_H_ 186