| File: | root/firefox-clang/media/libvpx/libvpx/vp8/common/blockd.h |
| Warning: | line 209, column 16 Excessive padding in 'struct macroblockd' (38 padding bytes, where 6 is optimal). Optimal fields order: y_buf, eobs, segmentation_enabled, update_mb_segmentation_map, update_mb_segmentation_data, fullpixel_mask, dequant_y1, dequant_y1_dc, dequant_y2, dequant_uv, predictor, qcoeff, dqcoeff, mode_info_context, above_context, left_context, subpixel_predict, subpixel_predict8x4, subpixel_predict8x8, subpixel_predict16x16, current_bc, recon_above, recon_left, pre, dst, error_info, block, mode_info_stride, frame_type, up_available, left_available, mb_to_left_edge, mb_to_right_edge, mb_to_top_edge, mb_to_bottom_edge, corrupted, recon_left_stride, mb_segment_abs_delta, mode_ref_lf_delta_enabled, mode_ref_lf_delta_update, mb_segment_tree_probs, last_ref_lf_deltas, ref_lf_deltas, last_mode_lf_deltas, mode_lf_deltas, segment_feature_data, consider reordering the fields or adding explicit padding members |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 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 | #ifndef VPX_VP8_COMMON_BLOCKD_H_ |
| 12 | #define VPX_VP8_COMMON_BLOCKD_H_ |
| 13 | |
| 14 | void vpx_log(const char *format, ...); |
| 15 | |
| 16 | #include "vpx/internal/vpx_codec_internal.h" |
| 17 | #include "vpx_config.h" |
| 18 | #include "vpx_scale/yv12config.h" |
| 19 | #include "mv.h" |
| 20 | #include "treecoder.h" |
| 21 | #include "vpx_ports/mem.h" |
| 22 | |
| 23 | #ifdef __cplusplus |
| 24 | extern "C" { |
| 25 | #endif |
| 26 | |
| 27 | /*#define DCPRED 1*/ |
| 28 | #define DCPREDSIMTHRESH0 0 |
| 29 | #define DCPREDCNTTHRESH3 3 |
| 30 | |
| 31 | #define MB_FEATURE_TREE_PROBS3 3 |
| 32 | #define MAX_MB_SEGMENTS4 4 |
| 33 | |
| 34 | #define MAX_REF_LF_DELTAS4 4 |
| 35 | #define MAX_MODE_LF_DELTAS4 4 |
| 36 | |
| 37 | /* Segment Feature Masks */ |
| 38 | #define SEGMENT_DELTADATA0 0 |
| 39 | #define SEGMENT_ABSDATA1 1 |
| 40 | |
| 41 | typedef struct { |
| 42 | int r, c; |
| 43 | } POS; |
| 44 | |
| 45 | #define PLANE_TYPE_Y_NO_DC0 0 |
| 46 | #define PLANE_TYPE_Y21 1 |
| 47 | #define PLANE_TYPE_UV2 2 |
| 48 | #define PLANE_TYPE_Y_WITH_DC3 3 |
| 49 | |
| 50 | typedef char ENTROPY_CONTEXT; |
| 51 | typedef struct { |
| 52 | ENTROPY_CONTEXT y1[4]; |
| 53 | ENTROPY_CONTEXT u[2]; |
| 54 | ENTROPY_CONTEXT v[2]; |
| 55 | ENTROPY_CONTEXT y2; |
| 56 | } ENTROPY_CONTEXT_PLANES; |
| 57 | |
| 58 | extern const unsigned char vp8_block2left[25]; |
| 59 | extern const unsigned char vp8_block2above[25]; |
| 60 | |
| 61 | #define VP8_COMBINEENTROPYCONTEXTS(Dest, A, B)Dest = (A) + (B) Dest = (A) + (B) |
| 62 | |
| 63 | typedef enum { KEY_FRAME = 0, INTER_FRAME = 1 } FRAME_TYPE; |
| 64 | |
| 65 | typedef enum { |
| 66 | DC_PRED, /* average of above and left pixels */ |
| 67 | V_PRED, /* vertical prediction */ |
| 68 | H_PRED, /* horizontal prediction */ |
| 69 | TM_PRED, /* Truemotion prediction */ |
| 70 | B_PRED, /* block based prediction, each block has its own prediction mode */ |
| 71 | |
| 72 | NEARESTMV, |
| 73 | NEARMV, |
| 74 | ZEROMV, |
| 75 | NEWMV, |
| 76 | SPLITMV, |
| 77 | |
| 78 | MB_MODE_COUNT |
| 79 | } MB_PREDICTION_MODE; |
| 80 | |
| 81 | /* Macroblock level features */ |
| 82 | typedef enum { |
| 83 | MB_LVL_ALT_Q = 0, /* Use alternate Quantizer .... */ |
| 84 | MB_LVL_ALT_LF = 1, /* Use alternate loop filter value... */ |
| 85 | MB_LVL_MAX = 2 /* Number of MB level features supported */ |
| 86 | |
| 87 | } MB_LVL_FEATURES; |
| 88 | |
| 89 | /* Segment Feature Masks */ |
| 90 | #define SEGMENT_ALTQ0x01 0x01 |
| 91 | #define SEGMENT_ALT_LF0x02 0x02 |
| 92 | |
| 93 | #define VP8_YMODES(B_PRED + 1) (B_PRED + 1) |
| 94 | #define VP8_UV_MODES(TM_PRED + 1) (TM_PRED + 1) |
| 95 | |
| 96 | #define VP8_MVREFS(1 + SPLITMV - NEARESTMV) (1 + SPLITMV - NEARESTMV) |
| 97 | |
| 98 | typedef enum { |
| 99 | B_DC_PRED, /* average of above and left pixels */ |
| 100 | B_TM_PRED, |
| 101 | |
| 102 | B_VE_PRED, /* vertical prediction */ |
| 103 | B_HE_PRED, /* horizontal prediction */ |
| 104 | |
| 105 | B_LD_PRED, |
| 106 | B_RD_PRED, |
| 107 | |
| 108 | B_VR_PRED, |
| 109 | B_VL_PRED, |
| 110 | B_HD_PRED, |
| 111 | B_HU_PRED, |
| 112 | |
| 113 | LEFT4X4, |
| 114 | ABOVE4X4, |
| 115 | ZERO4X4, |
| 116 | NEW4X4, |
| 117 | |
| 118 | B_MODE_COUNT |
| 119 | } B_PREDICTION_MODE; |
| 120 | |
| 121 | #define VP8_BINTRAMODES(B_HU_PRED + 1) (B_HU_PRED + 1) /* 10 */ |
| 122 | #define VP8_SUBMVREFS(1 + NEW4X4 - LEFT4X4) (1 + NEW4X4 - LEFT4X4) |
| 123 | |
| 124 | /* For keyframes, intra block modes are predicted by the (already decoded) |
| 125 | modes for the Y blocks to the left and above us; for interframes, there |
| 126 | is a single probability table. */ |
| 127 | |
| 128 | union b_mode_info { |
| 129 | B_PREDICTION_MODE as_mode; |
| 130 | int_mv mv; |
| 131 | }; |
| 132 | |
| 133 | typedef enum { |
| 134 | INTRA_FRAME = 0, |
| 135 | LAST_FRAME = 1, |
| 136 | GOLDEN_FRAME = 2, |
| 137 | ALTREF_FRAME = 3, |
| 138 | MAX_REF_FRAMES = 4 |
| 139 | } MV_REFERENCE_FRAME; |
| 140 | |
| 141 | typedef struct { |
| 142 | uint8_t mode, uv_mode; |
| 143 | uint8_t ref_frame; |
| 144 | uint8_t is_4x4; |
| 145 | int_mv mv; |
| 146 | |
| 147 | uint8_t partitioning; |
| 148 | /* does this mb has coefficients at all, 1=no coefficients, 0=need decode |
| 149 | tokens */ |
| 150 | uint8_t mb_skip_coeff; |
| 151 | uint8_t need_to_clamp_mvs; |
| 152 | /* Which set of segmentation parameters should be used for this MB */ |
| 153 | uint8_t segment_id; |
| 154 | } MB_MODE_INFO; |
| 155 | |
| 156 | typedef struct modeinfo { |
| 157 | MB_MODE_INFO mbmi; |
| 158 | union b_mode_info bmi[16]; |
| 159 | } MODE_INFO; |
| 160 | |
| 161 | #if CONFIG_MULTI_RES_ENCODING1 |
| 162 | /* The mb-level information needed to be stored for higher-resolution encoder */ |
| 163 | typedef struct { |
| 164 | MB_PREDICTION_MODE mode; |
| 165 | MV_REFERENCE_FRAME ref_frame; |
| 166 | int_mv mv; |
| 167 | int dissim; /* dissimilarity level of the macroblock */ |
| 168 | } LOWER_RES_MB_INFO; |
| 169 | |
| 170 | /* The frame-level information needed to be stored for higher-resolution |
| 171 | * encoder */ |
| 172 | typedef struct { |
| 173 | FRAME_TYPE frame_type; |
| 174 | int is_frame_dropped; |
| 175 | // If frame is dropped due to overshoot after encode_frame. This triggers a |
| 176 | // drop and resets rate control with Q forced to max for following frame. |
| 177 | // The check for this dropping due to overshoot is only done on lowest stream, |
| 178 | // and if set will force drop on all spatial streams for that current frame. |
| 179 | int is_frame_dropped_overshoot_maxqp; |
| 180 | // The frame rate for the lowest resolution. |
| 181 | double low_res_framerate; |
| 182 | /* The frame number of each reference frames */ |
| 183 | unsigned int low_res_ref_frames[MAX_REF_FRAMES]; |
| 184 | // The video frame counter value for the key frame, for lowest resolution. |
| 185 | unsigned int key_frame_counter_value; |
| 186 | // Flags to signal skipped encoding of previous and base layer stream. |
| 187 | unsigned int skip_encoding_prev_stream; |
| 188 | unsigned int skip_encoding_base_stream; |
| 189 | LOWER_RES_MB_INFO *mb_info; |
| 190 | } LOWER_RES_FRAME_INFO; |
| 191 | #endif |
| 192 | |
| 193 | typedef struct blockd { |
| 194 | short *qcoeff; |
| 195 | short *dqcoeff; |
| 196 | unsigned char *predictor; |
| 197 | short *dequant; |
| 198 | |
| 199 | int offset; |
| 200 | char *eob; |
| 201 | |
| 202 | union b_mode_info bmi; |
| 203 | } BLOCKD; |
| 204 | |
| 205 | typedef void (*vp8_subpix_fn_t)(unsigned char *src_ptr, int src_pixels_per_line, |
| 206 | int xoffset, int yoffset, |
| 207 | unsigned char *dst_ptr, int dst_pitch); |
| 208 | |
| 209 | typedef struct macroblockd { |
Excessive padding in 'struct macroblockd' (38 padding bytes, where 6 is optimal). Optimal fields order: y_buf, eobs, segmentation_enabled, update_mb_segmentation_map, update_mb_segmentation_data, fullpixel_mask, dequant_y1, dequant_y1_dc, dequant_y2, dequant_uv, predictor, qcoeff, dqcoeff, mode_info_context, above_context, left_context, subpixel_predict, subpixel_predict8x4, subpixel_predict8x8, subpixel_predict16x16, current_bc, recon_above, recon_left, pre, dst, error_info, block, mode_info_stride, frame_type, up_available, left_available, mb_to_left_edge, mb_to_right_edge, mb_to_top_edge, mb_to_bottom_edge, corrupted, recon_left_stride, mb_segment_abs_delta, mode_ref_lf_delta_enabled, mode_ref_lf_delta_update, mb_segment_tree_probs, last_ref_lf_deltas, ref_lf_deltas, last_mode_lf_deltas, mode_lf_deltas, segment_feature_data, consider reordering the fields or adding explicit padding members | |
| 210 | DECLARE_ALIGNED(16, unsigned char, predictor[384])unsigned char predictor[384] __attribute__((aligned(16))); |
| 211 | DECLARE_ALIGNED(16, short, qcoeff[400])short qcoeff[400] __attribute__((aligned(16))); |
| 212 | DECLARE_ALIGNED(16, short, dqcoeff[400])short dqcoeff[400] __attribute__((aligned(16))); |
| 213 | DECLARE_ALIGNED(16, char, eobs[25])char eobs[25] __attribute__((aligned(16))); |
| 214 | |
| 215 | DECLARE_ALIGNED(16, short, dequant_y1[16])short dequant_y1[16] __attribute__((aligned(16))); |
| 216 | DECLARE_ALIGNED(16, short, dequant_y1_dc[16])short dequant_y1_dc[16] __attribute__((aligned(16))); |
| 217 | DECLARE_ALIGNED(16, short, dequant_y2[16])short dequant_y2[16] __attribute__((aligned(16))); |
| 218 | DECLARE_ALIGNED(16, short, dequant_uv[16])short dequant_uv[16] __attribute__((aligned(16))); |
| 219 | |
| 220 | /* 16 Y blocks, 4 U, 4 V, 1 DC 2nd order block, each with 16 entries. */ |
| 221 | BLOCKD block[25]; |
| 222 | int fullpixel_mask; |
| 223 | |
| 224 | YV12_BUFFER_CONFIG pre; /* Filtered copy of previous frame reconstruction */ |
| 225 | YV12_BUFFER_CONFIG dst; |
| 226 | |
| 227 | MODE_INFO *mode_info_context; |
| 228 | int mode_info_stride; |
| 229 | |
| 230 | FRAME_TYPE frame_type; |
| 231 | |
| 232 | int up_available; |
| 233 | int left_available; |
| 234 | |
| 235 | unsigned char *recon_above[3]; |
| 236 | unsigned char *recon_left[3]; |
| 237 | int recon_left_stride[2]; |
| 238 | |
| 239 | /* Y,U,V,Y2 */ |
| 240 | ENTROPY_CONTEXT_PLANES *above_context; |
| 241 | ENTROPY_CONTEXT_PLANES *left_context; |
| 242 | |
| 243 | /* 0 indicates segmentation at MB level is not enabled. Otherwise the |
| 244 | * individual bits indicate which features are active. */ |
| 245 | unsigned char segmentation_enabled; |
| 246 | |
| 247 | /* 0 (do not update) 1 (update) the macroblock segmentation map. */ |
| 248 | unsigned char update_mb_segmentation_map; |
| 249 | |
| 250 | /* 0 (do not update) 1 (update) the macroblock segmentation feature data. */ |
| 251 | unsigned char update_mb_segmentation_data; |
| 252 | |
| 253 | /* 0 (do not update) 1 (update) the macroblock segmentation feature data. */ |
| 254 | unsigned char mb_segment_abs_delta; |
| 255 | |
| 256 | /* Per frame flags that define which MB level features (such as quantizer or |
| 257 | * loop filter level) */ |
| 258 | /* are enabled and when enabled the proabilities used to decode the per MB |
| 259 | * flags in MB_MODE_INFO */ |
| 260 | /* Probability Tree used to code Segment number */ |
| 261 | vp8_prob mb_segment_tree_probs[MB_FEATURE_TREE_PROBS3]; |
| 262 | /* Segment parameters */ |
| 263 | signed char segment_feature_data[MB_LVL_MAX][MAX_MB_SEGMENTS4]; |
| 264 | |
| 265 | /* mode_based Loop filter adjustment */ |
| 266 | unsigned char mode_ref_lf_delta_enabled; |
| 267 | unsigned char mode_ref_lf_delta_update; |
| 268 | |
| 269 | /* Delta values have the range +/- MAX_LOOP_FILTER */ |
| 270 | signed char |
| 271 | last_ref_lf_deltas[MAX_REF_LF_DELTAS4]; /* 0 = Intra, Last, GF, ARF */ |
| 272 | signed char ref_lf_deltas[MAX_REF_LF_DELTAS4]; /* 0 = Intra, Last, GF, ARF */ |
| 273 | /* 0 = BPRED, ZERO_MV, MV, SPLIT */ |
| 274 | signed char last_mode_lf_deltas[MAX_MODE_LF_DELTAS4]; |
| 275 | signed char |
| 276 | mode_lf_deltas[MAX_MODE_LF_DELTAS4]; /* 0 = BPRED, ZERO_MV, MV, SPLIT */ |
| 277 | |
| 278 | /* Distance of MB away from frame edges */ |
| 279 | int mb_to_left_edge; |
| 280 | int mb_to_right_edge; |
| 281 | int mb_to_top_edge; |
| 282 | int mb_to_bottom_edge; |
| 283 | |
| 284 | vp8_subpix_fn_t subpixel_predict; |
| 285 | vp8_subpix_fn_t subpixel_predict8x4; |
| 286 | vp8_subpix_fn_t subpixel_predict8x8; |
| 287 | vp8_subpix_fn_t subpixel_predict16x16; |
| 288 | |
| 289 | void *current_bc; |
| 290 | |
| 291 | int corrupted; |
| 292 | |
| 293 | struct vpx_internal_error_info error_info; |
| 294 | |
| 295 | #if VPX_ARCH_X860 || VPX_ARCH_X86_641 |
| 296 | /* This is an intermediate buffer currently used in sub-pixel motion search |
| 297 | * to keep a copy of the reference area. This buffer can be used for other |
| 298 | * purpose. |
| 299 | */ |
| 300 | DECLARE_ALIGNED(32, unsigned char, y_buf[22 * 32])unsigned char y_buf[22 * 32] __attribute__((aligned(32))); |
| 301 | #endif |
| 302 | } MACROBLOCKD; |
| 303 | |
| 304 | extern void vp8_build_block_doffsets(MACROBLOCKD *x); |
| 305 | extern void vp8_setup_block_dptrs(MACROBLOCKD *x); |
| 306 | |
| 307 | #ifdef __cplusplus |
| 308 | } // extern "C" |
| 309 | #endif |
| 310 | |
| 311 | #endif // VPX_VP8_COMMON_BLOCKD_H_ |