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
30extern "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
41typedef 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
51typedef enum
52{
53    ONE_PARTITION  = 0,
54    TWO_PARTITION  = 1,
55    FOUR_PARTITION = 2,
56    EIGHT_PARTITION = 3
57} TOKEN_PARTITION;
58
59typedef enum
60{
61    RECON_CLAMP_REQUIRED        = 0,
62    RECON_CLAMP_NOTREQUIRED     = 1
63} CLAMP_TYPE;
64
65typedef 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