1233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* 2233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3233d2500723e5594f3e7c70896ffeeef32b9c950ywan * 4233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Use of this source code is governed by a BSD-style license 5233d2500723e5594f3e7c70896ffeeef32b9c950ywan * that can be found in the LICENSE file in the root of the source 6233d2500723e5594f3e7c70896ffeeef32b9c950ywan * tree. An additional intellectual property rights grant can be found 7233d2500723e5594f3e7c70896ffeeef32b9c950ywan * in the file PATENTS. All contributing project authors may 8233d2500723e5594f3e7c70896ffeeef32b9c950ywan * be found in the AUTHORS file in the root of the source tree. 9233d2500723e5594f3e7c70896ffeeef32b9c950ywan */ 10233d2500723e5594f3e7c70896ffeeef32b9c950ywan 11233d2500723e5594f3e7c70896ffeeef32b9c950ywan 12233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifndef VP8_COMMON_ONYXC_INT_H_ 13233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define VP8_COMMON_ONYXC_INT_H_ 14233d2500723e5594f3e7c70896ffeeef32b9c950ywan 15233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx_config.h" 16233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vp8_rtcd.h" 17233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx/internal/vpx_codec_internal.h" 18233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "loopfilter.h" 19233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "entropymv.h" 20233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "entropy.h" 21233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if CONFIG_POSTPROC 22233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "postproc.h" 23233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 24233d2500723e5594f3e7c70896ffeeef32b9c950ywan 25233d2500723e5594f3e7c70896ffeeef32b9c950ywan/*#ifdef PACKET_TESTING*/ 26233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "header.h" 27233d2500723e5594f3e7c70896ffeeef32b9c950ywan/*#endif*/ 28233d2500723e5594f3e7c70896ffeeef32b9c950ywan 29233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef __cplusplus 30233d2500723e5594f3e7c70896ffeeef32b9c950ywanextern "C" { 31233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 32233d2500723e5594f3e7c70896ffeeef32b9c950ywan 33233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define MINQ 0 34233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define MAXQ 127 35233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define QINDEX_RANGE (MAXQ + 1) 36233d2500723e5594f3e7c70896ffeeef32b9c950ywan 37233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define NUM_YV12_BUFFERS 4 38233d2500723e5594f3e7c70896ffeeef32b9c950ywan 39233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define MAX_PARTITIONS 9 40233d2500723e5594f3e7c70896ffeeef32b9c950ywan 41233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef struct frame_contexts 42233d2500723e5594f3e7c70896ffeeef32b9c950ywan{ 43233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp8_prob bmode_prob [VP8_BINTRAMODES-1]; 44233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp8_prob ymode_prob [VP8_YMODES-1]; /* interframe intra mode probs */ 45233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp8_prob uv_mode_prob [VP8_UV_MODES-1]; 46233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp8_prob sub_mv_ref_prob [VP8_SUBMVREFS-1]; 47233d2500723e5594f3e7c70896ffeeef32b9c950ywan vp8_prob coef_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES]; 48233d2500723e5594f3e7c70896ffeeef32b9c950ywan MV_CONTEXT mvc[2]; 49233d2500723e5594f3e7c70896ffeeef32b9c950ywan} FRAME_CONTEXT; 50233d2500723e5594f3e7c70896ffeeef32b9c950ywan 51233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef enum 52233d2500723e5594f3e7c70896ffeeef32b9c950ywan{ 53233d2500723e5594f3e7c70896ffeeef32b9c950ywan ONE_PARTITION = 0, 54233d2500723e5594f3e7c70896ffeeef32b9c950ywan TWO_PARTITION = 1, 55233d2500723e5594f3e7c70896ffeeef32b9c950ywan FOUR_PARTITION = 2, 56233d2500723e5594f3e7c70896ffeeef32b9c950ywan EIGHT_PARTITION = 3 57233d2500723e5594f3e7c70896ffeeef32b9c950ywan} TOKEN_PARTITION; 58233d2500723e5594f3e7c70896ffeeef32b9c950ywan 59233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef enum 60233d2500723e5594f3e7c70896ffeeef32b9c950ywan{ 61233d2500723e5594f3e7c70896ffeeef32b9c950ywan RECON_CLAMP_REQUIRED = 0, 62233d2500723e5594f3e7c70896ffeeef32b9c950ywan RECON_CLAMP_NOTREQUIRED = 1 63233d2500723e5594f3e7c70896ffeeef32b9c950ywan} CLAMP_TYPE; 64233d2500723e5594f3e7c70896ffeeef32b9c950ywan 65233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef struct VP8Common 66233d2500723e5594f3e7c70896ffeeef32b9c950ywan 67233d2500723e5594f3e7c70896ffeeef32b9c950ywan{ 68233d2500723e5594f3e7c70896ffeeef32b9c950ywan struct vpx_internal_error_info error; 69233d2500723e5594f3e7c70896ffeeef32b9c950ywan 70233d2500723e5594f3e7c70896ffeeef32b9c950ywan DECLARE_ALIGNED(16, short, Y1dequant[QINDEX_RANGE][2]); 71233d2500723e5594f3e7c70896ffeeef32b9c950ywan DECLARE_ALIGNED(16, short, Y2dequant[QINDEX_RANGE][2]); 72233d2500723e5594f3e7c70896ffeeef32b9c950ywan DECLARE_ALIGNED(16, short, UVdequant[QINDEX_RANGE][2]); 73233d2500723e5594f3e7c70896ffeeef32b9c950ywan 74233d2500723e5594f3e7c70896ffeeef32b9c950ywan int Width; 75233d2500723e5594f3e7c70896ffeeef32b9c950ywan int Height; 76233d2500723e5594f3e7c70896ffeeef32b9c950ywan int horiz_scale; 77233d2500723e5594f3e7c70896ffeeef32b9c950ywan int vert_scale; 78233d2500723e5594f3e7c70896ffeeef32b9c950ywan 79233d2500723e5594f3e7c70896ffeeef32b9c950ywan CLAMP_TYPE clamp_type; 80233d2500723e5594f3e7c70896ffeeef32b9c950ywan 81233d2500723e5594f3e7c70896ffeeef32b9c950ywan YV12_BUFFER_CONFIG *frame_to_show; 82233d2500723e5594f3e7c70896ffeeef32b9c950ywan 83233d2500723e5594f3e7c70896ffeeef32b9c950ywan YV12_BUFFER_CONFIG yv12_fb[NUM_YV12_BUFFERS]; 84233d2500723e5594f3e7c70896ffeeef32b9c950ywan int fb_idx_ref_cnt[NUM_YV12_BUFFERS]; 85233d2500723e5594f3e7c70896ffeeef32b9c950ywan int new_fb_idx, lst_fb_idx, gld_fb_idx, alt_fb_idx; 86233d2500723e5594f3e7c70896ffeeef32b9c950ywan 87233d2500723e5594f3e7c70896ffeeef32b9c950ywan YV12_BUFFER_CONFIG temp_scale_frame; 88233d2500723e5594f3e7c70896ffeeef32b9c950ywan 89233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if CONFIG_POSTPROC 90233d2500723e5594f3e7c70896ffeeef32b9c950ywan YV12_BUFFER_CONFIG post_proc_buffer; 91233d2500723e5594f3e7c70896ffeeef32b9c950ywan YV12_BUFFER_CONFIG post_proc_buffer_int; 92233d2500723e5594f3e7c70896ffeeef32b9c950ywan int post_proc_buffer_int_used; 93233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned char *pp_limits_buffer; /* post-processing filter coefficients */ 94233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 95233d2500723e5594f3e7c70896ffeeef32b9c950ywan 96233d2500723e5594f3e7c70896ffeeef32b9c950ywan FRAME_TYPE last_frame_type; /* Save last frame's frame type for motion search. */ 97233d2500723e5594f3e7c70896ffeeef32b9c950ywan FRAME_TYPE frame_type; 98233d2500723e5594f3e7c70896ffeeef32b9c950ywan 99233d2500723e5594f3e7c70896ffeeef32b9c950ywan int show_frame; 100233d2500723e5594f3e7c70896ffeeef32b9c950ywan 101233d2500723e5594f3e7c70896ffeeef32b9c950ywan int frame_flags; 102233d2500723e5594f3e7c70896ffeeef32b9c950ywan int MBs; 103233d2500723e5594f3e7c70896ffeeef32b9c950ywan int mb_rows; 104233d2500723e5594f3e7c70896ffeeef32b9c950ywan int mb_cols; 105233d2500723e5594f3e7c70896ffeeef32b9c950ywan int mode_info_stride; 106233d2500723e5594f3e7c70896ffeeef32b9c950ywan 107233d2500723e5594f3e7c70896ffeeef32b9c950ywan /* profile settings */ 108233d2500723e5594f3e7c70896ffeeef32b9c950ywan int mb_no_coeff_skip; 109233d2500723e5594f3e7c70896ffeeef32b9c950ywan int no_lpf; 110233d2500723e5594f3e7c70896ffeeef32b9c950ywan int use_bilinear_mc_filter; 111233d2500723e5594f3e7c70896ffeeef32b9c950ywan int full_pixel; 112233d2500723e5594f3e7c70896ffeeef32b9c950ywan 113233d2500723e5594f3e7c70896ffeeef32b9c950ywan int base_qindex; 114233d2500723e5594f3e7c70896ffeeef32b9c950ywan 115233d2500723e5594f3e7c70896ffeeef32b9c950ywan int y1dc_delta_q; 116233d2500723e5594f3e7c70896ffeeef32b9c950ywan int y2dc_delta_q; 117233d2500723e5594f3e7c70896ffeeef32b9c950ywan int y2ac_delta_q; 118233d2500723e5594f3e7c70896ffeeef32b9c950ywan int uvdc_delta_q; 119233d2500723e5594f3e7c70896ffeeef32b9c950ywan int uvac_delta_q; 120233d2500723e5594f3e7c70896ffeeef32b9c950ywan 121233d2500723e5594f3e7c70896ffeeef32b9c950ywan /* We allocate a MODE_INFO struct for each macroblock, together with 122233d2500723e5594f3e7c70896ffeeef32b9c950ywan an extra row on top and column on the left to simplify prediction. */ 123233d2500723e5594f3e7c70896ffeeef32b9c950ywan 124233d2500723e5594f3e7c70896ffeeef32b9c950ywan MODE_INFO *mip; /* Base of allocated array */ 125233d2500723e5594f3e7c70896ffeeef32b9c950ywan MODE_INFO *mi; /* Corresponds to upper left visible macroblock */ 126233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if CONFIG_ERROR_CONCEALMENT 127233d2500723e5594f3e7c70896ffeeef32b9c950ywan MODE_INFO *prev_mip; /* MODE_INFO array 'mip' from last decoded frame */ 128233d2500723e5594f3e7c70896ffeeef32b9c950ywan MODE_INFO *prev_mi; /* 'mi' from last frame (points into prev_mip) */ 129233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 130233d2500723e5594f3e7c70896ffeeef32b9c950ywan MODE_INFO *show_frame_mi; /* MODE_INFO for the last decoded frame 131233d2500723e5594f3e7c70896ffeeef32b9c950ywan to show */ 132233d2500723e5594f3e7c70896ffeeef32b9c950ywan LOOPFILTERTYPE filter_type; 133233d2500723e5594f3e7c70896ffeeef32b9c950ywan 134233d2500723e5594f3e7c70896ffeeef32b9c950ywan loop_filter_info_n lf_info; 135233d2500723e5594f3e7c70896ffeeef32b9c950ywan 136233d2500723e5594f3e7c70896ffeeef32b9c950ywan int filter_level; 137233d2500723e5594f3e7c70896ffeeef32b9c950ywan int last_sharpness_level; 138233d2500723e5594f3e7c70896ffeeef32b9c950ywan int sharpness_level; 139233d2500723e5594f3e7c70896ffeeef32b9c950ywan 140233d2500723e5594f3e7c70896ffeeef32b9c950ywan int refresh_last_frame; /* Two state 0 = NO, 1 = YES */ 141233d2500723e5594f3e7c70896ffeeef32b9c950ywan int refresh_golden_frame; /* Two state 0 = NO, 1 = YES */ 142233d2500723e5594f3e7c70896ffeeef32b9c950ywan int refresh_alt_ref_frame; /* Two state 0 = NO, 1 = YES */ 143233d2500723e5594f3e7c70896ffeeef32b9c950ywan 144233d2500723e5594f3e7c70896ffeeef32b9c950ywan int copy_buffer_to_gf; /* 0 none, 1 Last to GF, 2 ARF to GF */ 145233d2500723e5594f3e7c70896ffeeef32b9c950ywan int copy_buffer_to_arf; /* 0 none, 1 Last to ARF, 2 GF to ARF */ 146233d2500723e5594f3e7c70896ffeeef32b9c950ywan 147233d2500723e5594f3e7c70896ffeeef32b9c950ywan int refresh_entropy_probs; /* Two state 0 = NO, 1 = YES */ 148233d2500723e5594f3e7c70896ffeeef32b9c950ywan 149233d2500723e5594f3e7c70896ffeeef32b9c950ywan int ref_frame_sign_bias[MAX_REF_FRAMES]; /* Two state 0, 1 */ 150233d2500723e5594f3e7c70896ffeeef32b9c950ywan 151233d2500723e5594f3e7c70896ffeeef32b9c950ywan /* Y,U,V,Y2 */ 152233d2500723e5594f3e7c70896ffeeef32b9c950ywan ENTROPY_CONTEXT_PLANES *above_context; /* row of context for each plane */ 153233d2500723e5594f3e7c70896ffeeef32b9c950ywan ENTROPY_CONTEXT_PLANES left_context; /* (up to) 4 contexts "" */ 154233d2500723e5594f3e7c70896ffeeef32b9c950ywan 155233d2500723e5594f3e7c70896ffeeef32b9c950ywan FRAME_CONTEXT lfc; /* last frame entropy */ 156233d2500723e5594f3e7c70896ffeeef32b9c950ywan FRAME_CONTEXT fc; /* this frame entropy */ 157233d2500723e5594f3e7c70896ffeeef32b9c950ywan 158233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int current_video_frame; 159233d2500723e5594f3e7c70896ffeeef32b9c950ywan 160233d2500723e5594f3e7c70896ffeeef32b9c950ywan int version; 161233d2500723e5594f3e7c70896ffeeef32b9c950ywan 162233d2500723e5594f3e7c70896ffeeef32b9c950ywan TOKEN_PARTITION multi_token_partition; 163233d2500723e5594f3e7c70896ffeeef32b9c950ywan 164233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef PACKET_TESTING 165233d2500723e5594f3e7c70896ffeeef32b9c950ywan VP8_HEADER oh; 166233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 167233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if CONFIG_POSTPROC_VISUALIZER 168233d2500723e5594f3e7c70896ffeeef32b9c950ywan double bitrate; 169233d2500723e5594f3e7c70896ffeeef32b9c950ywan double framerate; 170233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 171233d2500723e5594f3e7c70896ffeeef32b9c950ywan 172233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if CONFIG_MULTITHREAD 173233d2500723e5594f3e7c70896ffeeef32b9c950ywan int processor_core_count; 174233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 175233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if CONFIG_POSTPROC 176233d2500723e5594f3e7c70896ffeeef32b9c950ywan struct postproc_state postproc_state; 177233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 178233d2500723e5594f3e7c70896ffeeef32b9c950ywan int cpu_caps; 179233d2500723e5594f3e7c70896ffeeef32b9c950ywan} VP8_COMMON; 180233d2500723e5594f3e7c70896ffeeef32b9c950ywan 181233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef __cplusplus 182233d2500723e5594f3e7c70896ffeeef32b9c950ywan} // extern "C" 183233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 184233d2500723e5594f3e7c70896ffeeef32b9c950ywan 185233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif // VP8_COMMON_ONYXC_INT_H_ 186