• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 __INC_VP8C_INT_H
13  #define __INC_VP8C_INT_H
14  
15  #include "vpx_config.h"
16  #include "vpx/internal/vpx_codec_internal.h"
17  #include "loopfilter.h"
18  #include "entropymv.h"
19  #include "entropy.h"
20  #include "idct.h"
21  #include "recon.h"
22  #include "postproc.h"
23  
24  /*#ifdef PACKET_TESTING*/
25  #include "header.h"
26  /*#endif*/
27  
28  /* Create/destroy static data structures. */
29  
30  void vp8_initialize_common(void);
31  
32  #define MINQ 0
33  #define MAXQ 127
34  #define QINDEX_RANGE (MAXQ + 1)
35  
36  #define NUM_YV12_BUFFERS 4
37  
38  typedef struct frame_contexts
39  {
40      vp8_prob bmode_prob [VP8_BINTRAMODES-1];
41      vp8_prob ymode_prob [VP8_YMODES-1];   /* interframe intra mode probs */
42      vp8_prob uv_mode_prob [VP8_UV_MODES-1];
43      vp8_prob sub_mv_ref_prob [VP8_SUBMVREFS-1];
44      vp8_prob coef_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [vp8_coef_tokens-1];
45      MV_CONTEXT mvc[2];
46      MV_CONTEXT pre_mvc[2];  /* not to caculate the mvcost for the frame if mvc doesn't change. */
47  } FRAME_CONTEXT;
48  
49  typedef enum
50  {
51      ONE_PARTITION  = 0,
52      TWO_PARTITION  = 1,
53      FOUR_PARTITION = 2,
54      EIGHT_PARTITION = 3
55  } TOKEN_PARTITION;
56  
57  typedef enum
58  {
59      RECON_CLAMP_REQUIRED        = 0,
60      RECON_CLAMP_NOTREQUIRED     = 1
61  } CLAMP_TYPE;
62  
63  typedef enum
64  {
65      SIXTAP   = 0,
66      BILINEAR = 1
67  } INTERPOLATIONFILTERTYPE;
68  
69  typedef struct VP8_COMMON_RTCD
70  {
71  #if CONFIG_RUNTIME_CPU_DETECT
72      vp8_idct_rtcd_vtable_t        idct;
73      vp8_recon_rtcd_vtable_t       recon;
74      vp8_subpix_rtcd_vtable_t      subpix;
75      vp8_loopfilter_rtcd_vtable_t  loopfilter;
76      vp8_postproc_rtcd_vtable_t    postproc;
77      int                           flags;
78  #else
79      int unused;
80  #endif
81  } VP8_COMMON_RTCD;
82  
83  typedef struct VP8Common
84  {
85      struct vpx_internal_error_info  error;
86  
87      DECLARE_ALIGNED(16, short, Y1dequant[QINDEX_RANGE][16]);
88      DECLARE_ALIGNED(16, short, Y2dequant[QINDEX_RANGE][16]);
89      DECLARE_ALIGNED(16, short, UVdequant[QINDEX_RANGE][16]);
90  
91      int Width;
92      int Height;
93      int horiz_scale;
94      int vert_scale;
95  
96      YUV_TYPE clr_type;
97      CLAMP_TYPE  clamp_type;
98  
99      YV12_BUFFER_CONFIG *frame_to_show;
100  
101      YV12_BUFFER_CONFIG yv12_fb[NUM_YV12_BUFFERS];
102      int fb_idx_ref_cnt[NUM_YV12_BUFFERS];
103      int new_fb_idx, lst_fb_idx, gld_fb_idx, alt_fb_idx;
104  
105      YV12_BUFFER_CONFIG post_proc_buffer;
106      YV12_BUFFER_CONFIG temp_scale_frame;
107  
108      FRAME_TYPE last_frame_type;  /* Save last frame's frame type for loopfilter init checking and motion search. */
109      FRAME_TYPE frame_type;
110  
111      int show_frame;
112  
113      int frame_flags;
114      int MBs;
115      int mb_rows;
116      int mb_cols;
117      int mode_info_stride;
118  
119      /* profile settings */
120      int mb_no_coeff_skip;
121      int no_lpf;
122      int simpler_lpf;
123      int use_bilinear_mc_filter;
124      int full_pixel;
125  
126      int base_qindex;
127      int last_kf_gf_q;  /* Q used on the last GF or KF */
128  
129      int y1dc_delta_q;
130      int y2dc_delta_q;
131      int y2ac_delta_q;
132      int uvdc_delta_q;
133      int uvac_delta_q;
134  
135      unsigned int frames_since_golden;
136      unsigned int frames_till_alt_ref_frame;
137  
138      /* We allocate a MODE_INFO struct for each macroblock, together with
139         an extra row on top and column on the left to simplify prediction. */
140  
141      MODE_INFO *mip; /* Base of allocated array */
142      MODE_INFO *mi;  /* Corresponds to upper left visible macroblock */
143  
144  
145      INTERPOLATIONFILTERTYPE mcomp_filter_type;
146      LOOPFILTERTYPE last_filter_type;
147      LOOPFILTERTYPE filter_type;
148      loop_filter_info lf_info[MAX_LOOP_FILTER+1];
149      prototype_loopfilter_block((*lf_mbv));
150      prototype_loopfilter_block((*lf_mbh));
151      prototype_loopfilter_block((*lf_bv));
152      prototype_loopfilter_block((*lf_bh));
153      int filter_level;
154      int last_sharpness_level;
155      int sharpness_level;
156  
157      int refresh_last_frame;       /* Two state 0 = NO, 1 = YES */
158      int refresh_golden_frame;     /* Two state 0 = NO, 1 = YES */
159      int refresh_alt_ref_frame;     /* Two state 0 = NO, 1 = YES */
160  
161      int copy_buffer_to_gf;         /* 0 none, 1 Last to GF, 2 ARF to GF */
162      int copy_buffer_to_arf;        /* 0 none, 1 Last to ARF, 2 GF to ARF */
163  
164      int refresh_entropy_probs;    /* Two state 0 = NO, 1 = YES */
165  
166      int ref_frame_sign_bias[MAX_REF_FRAMES];    /* Two state 0, 1 */
167  
168      /* Y,U,V,Y2 */
169      ENTROPY_CONTEXT_PLANES *above_context;   /* row of context for each plane */
170      ENTROPY_CONTEXT_PLANES left_context;  /* (up to) 4 contexts "" */
171  
172  
173      /* keyframe block modes are predicted by their above, left neighbors */
174  
175      vp8_prob kf_bmode_prob [VP8_BINTRAMODES] [VP8_BINTRAMODES] [VP8_BINTRAMODES-1];
176      vp8_prob kf_ymode_prob [VP8_YMODES-1];  /* keyframe "" */
177      vp8_prob kf_uv_mode_prob [VP8_UV_MODES-1];
178  
179  
180      FRAME_CONTEXT lfc; /* last frame entropy */
181      FRAME_CONTEXT fc;  /* this frame entropy */
182  
183      unsigned int current_video_frame;
184  
185      int near_boffset[3];
186      int version;
187  
188      TOKEN_PARTITION multi_token_partition;
189  
190  #ifdef PACKET_TESTING
191      VP8_HEADER oh;
192  #endif
193      double bitrate;
194      double framerate;
195  
196  #if CONFIG_RUNTIME_CPU_DETECT
197      VP8_COMMON_RTCD rtcd;
198  #endif
199      struct postproc_state  postproc_state;
200  } VP8_COMMON;
201  
202  
203  int vp8_adjust_mb_lf_value(MACROBLOCKD *mbd, int filter_level);
204  void vp8_init_loop_filter(VP8_COMMON *cm);
205  void vp8_frame_init_loop_filter(loop_filter_info *lfi, int frame_type);
206  extern void vp8_loop_filter_frame(VP8_COMMON *cm,    MACROBLOCKD *mbd,  int filt_val);
207  
208  #endif
209