onyxc_int.h revision ba164dffc5a6795bce97fae02b51ccf3330e15e4
190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*
2f71323e297a928af368937089d3ed71239786f86Andreas Huber *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber *
4f71323e297a928af368937089d3ed71239786f86Andreas Huber *  Use of this source code is governed by a BSD-style license
5f71323e297a928af368937089d3ed71239786f86Andreas Huber *  that can be found in the LICENSE file in the root of the source
6f71323e297a928af368937089d3ed71239786f86Andreas Huber *  tree. An additional intellectual property rights grant can be found
7f71323e297a928af368937089d3ed71239786f86Andreas Huber *  in the file PATENTS.  All contributing project authors may
8f71323e297a928af368937089d3ed71239786f86Andreas Huber *  be found in the AUTHORS file in the root of the source tree.
990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */
1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifndef __INC_VP8C_INT_H
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define __INC_VP8C_INT_H
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15f71323e297a928af368937089d3ed71239786f86Andreas Huber#include "vpx_config.h"
16ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "vp8_rtcd.h"
17f71323e297a928af368937089d3ed71239786f86Andreas Huber#include "vpx/internal/vpx_codec_internal.h"
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "loopfilter.h"
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "entropymv.h"
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "entropy.h"
211b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_POSTPROC
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "postproc.h"
231b362b15af34006e6a11974088a46d42b903418eJohann#endif
2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
25538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/*#ifdef PACKET_TESTING*/
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "header.h"
27538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/*#endif*/
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define MINQ 0
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define MAXQ 127
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define QINDEX_RANGE (MAXQ + 1)
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
33f71323e297a928af368937089d3ed71239786f86Andreas Huber#define NUM_YV12_BUFFERS 4
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
351b362b15af34006e6a11974088a46d42b903418eJohann#define MAX_PARTITIONS 9
361b362b15af34006e6a11974088a46d42b903418eJohann
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct frame_contexts
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_prob bmode_prob [VP8_BINTRAMODES-1];
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_prob ymode_prob [VP8_YMODES-1];   /* interframe intra mode probs */
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_prob uv_mode_prob [VP8_UV_MODES-1];
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vp8_prob sub_mv_ref_prob [VP8_SUBMVREFS-1];
431b362b15af34006e6a11974088a46d42b903418eJohann    vp8_prob coef_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES];
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    MV_CONTEXT mvc[2];
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} FRAME_CONTEXT;
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef enum
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ONE_PARTITION  = 0,
5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    TWO_PARTITION  = 1,
5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    FOUR_PARTITION = 2,
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    EIGHT_PARTITION = 3
5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} TOKEN_PARTITION;
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef enum
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    RECON_CLAMP_REQUIRED        = 0,
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    RECON_CLAMP_NOTREQUIRED     = 1
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} CLAMP_TYPE;
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct VP8Common
621b362b15af34006e6a11974088a46d42b903418eJohann
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    struct vpx_internal_error_info  error;
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
661b362b15af34006e6a11974088a46d42b903418eJohann    DECLARE_ALIGNED(16, short, Y1dequant[QINDEX_RANGE][2]);
671b362b15af34006e6a11974088a46d42b903418eJohann    DECLARE_ALIGNED(16, short, Y2dequant[QINDEX_RANGE][2]);
681b362b15af34006e6a11974088a46d42b903418eJohann    DECLARE_ALIGNED(16, short, UVdequant[QINDEX_RANGE][2]);
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int Width;
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int Height;
7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int horiz_scale;
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int vert_scale;
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    YUV_TYPE clr_type;
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    CLAMP_TYPE  clamp_type;
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    YV12_BUFFER_CONFIG *frame_to_show;
79f71323e297a928af368937089d3ed71239786f86Andreas Huber
80f71323e297a928af368937089d3ed71239786f86Andreas Huber    YV12_BUFFER_CONFIG yv12_fb[NUM_YV12_BUFFERS];
81f71323e297a928af368937089d3ed71239786f86Andreas Huber    int fb_idx_ref_cnt[NUM_YV12_BUFFERS];
82f71323e297a928af368937089d3ed71239786f86Andreas Huber    int new_fb_idx, lst_fb_idx, gld_fb_idx, alt_fb_idx;
83f71323e297a928af368937089d3ed71239786f86Andreas Huber
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    YV12_BUFFER_CONFIG temp_scale_frame;
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
861b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_POSTPROC
871b362b15af34006e6a11974088a46d42b903418eJohann    YV12_BUFFER_CONFIG post_proc_buffer;
881b362b15af34006e6a11974088a46d42b903418eJohann    YV12_BUFFER_CONFIG post_proc_buffer_int;
891b362b15af34006e6a11974088a46d42b903418eJohann    int post_proc_buffer_int_used;
901b362b15af34006e6a11974088a46d42b903418eJohann    unsigned char *pp_limits_buffer;   /* post-processing filter coefficients */
911b362b15af34006e6a11974088a46d42b903418eJohann#endif
921b362b15af34006e6a11974088a46d42b903418eJohann
931b362b15af34006e6a11974088a46d42b903418eJohann    FRAME_TYPE last_frame_type;  /* Save last frame's frame type for motion search. */
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    FRAME_TYPE frame_type;
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int show_frame;
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int frame_flags;
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int MBs;
10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mb_rows;
10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mb_cols;
10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mode_info_stride;
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
104538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* profile settings */
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mb_no_coeff_skip;
10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int no_lpf;
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int use_bilinear_mc_filter;
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int full_pixel;
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int base_qindex;
11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int y1dc_delta_q;
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int y2dc_delta_q;
11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int y2ac_delta_q;
11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int uvdc_delta_q;
11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int uvac_delta_q;
11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned int frames_since_golden;
11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned int frames_till_alt_ref_frame;
12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    /* We allocate a MODE_INFO struct for each macroblock, together with
12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber       an extra row on top and column on the left to simplify prediction. */
12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    MODE_INFO *mip; /* Base of allocated array */
12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    MODE_INFO *mi;  /* Corresponds to upper left visible macroblock */
1261b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_ERROR_CONCEALMENT
1271b362b15af34006e6a11974088a46d42b903418eJohann    MODE_INFO *prev_mip; /* MODE_INFO array 'mip' from last decoded frame */
1281b362b15af34006e6a11974088a46d42b903418eJohann    MODE_INFO *prev_mi;  /* 'mi' from last frame (points into prev_mip) */
1291b362b15af34006e6a11974088a46d42b903418eJohann#endif
130ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    MODE_INFO *show_frame_mi;  /* MODE_INFO for the last decoded frame
131ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang                                  to show */
13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    LOOPFILTERTYPE filter_type;
1331b362b15af34006e6a11974088a46d42b903418eJohann
1341b362b15af34006e6a11974088a46d42b903418eJohann    loop_filter_info_n lf_info;
1351b362b15af34006e6a11974088a46d42b903418eJohann
13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int filter_level;
13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int last_sharpness_level;
13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int sharpness_level;
13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
140538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    int refresh_last_frame;       /* Two state 0 = NO, 1 = YES */
141538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    int refresh_golden_frame;     /* Two state 0 = NO, 1 = YES */
142538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    int refresh_alt_ref_frame;     /* Two state 0 = NO, 1 = YES */
14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
144538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    int copy_buffer_to_gf;         /* 0 none, 1 Last to GF, 2 ARF to GF */
145538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    int copy_buffer_to_arf;        /* 0 none, 1 Last to ARF, 2 GF to ARF */
14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
147538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    int refresh_entropy_probs;    /* Two state 0 = NO, 1 = YES */
14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
149538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    int ref_frame_sign_bias[MAX_REF_FRAMES];    /* Two state 0, 1 */
15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
151538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* Y,U,V,Y2 */
152538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    ENTROPY_CONTEXT_PLANES *above_context;   /* row of context for each plane */
153538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    ENTROPY_CONTEXT_PLANES left_context;  /* (up to) 4 contexts "" */
15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
155538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    FRAME_CONTEXT lfc; /* last frame entropy */
156538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    FRAME_CONTEXT fc;  /* this frame entropy */
15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    unsigned int current_video_frame;
15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int near_boffset[3];
16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int version;
16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    TOKEN_PARTITION multi_token_partition;
16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifdef PACKET_TESTING
16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    VP8_HEADER oh;
16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    double bitrate;
16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    double framerate;
17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1711b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_MULTITHREAD
1721b362b15af34006e6a11974088a46d42b903418eJohann    int processor_core_count;
17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
1741b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_POSTPROC
17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    struct postproc_state  postproc_state;
1761b362b15af34006e6a11974088a46d42b903418eJohann#endif
1771b362b15af34006e6a11974088a46d42b903418eJohann    int cpu_caps;
17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} VP8_COMMON;
17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif
181