onyx_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_VP8_INT_H 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define __INC_VP8_INT_H 1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include <stdio.h> 161b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx_config.h" 1779f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "vp8/common/onyx.h" 1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "treewriter.h" 1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "tokenize.h" 2079f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "vp8/common/onyxc_int.h" 211b362b15af34006e6a11974088a46d42b903418eJohann#include "vp8/common/variance.h" 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "encodemb.h" 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "quantize.h" 2479f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "vp8/common/entropy.h" 2579f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "vp8/common/threading.h" 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "vpx_ports/mem.h" 27f71323e297a928af368937089d3ed71239786f86Andreas Huber#include "vpx/internal/vpx_codec_internal.h" 281b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx/vp8.h" 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "mcomp.h" 3079f15823c34ae1e423108295e416213200bb280fAndreas Huber#include "vp8/common/findnearmv.h" 311b362b15af34006e6a11974088a46d42b903418eJohann#include "lookahead.h" 321b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_TEMPORAL_DENOISING 331b362b15af34006e6a11974088a46d42b903418eJohann#include "vp8/encoder/denoising.h" 341b362b15af34006e6a11974088a46d42b903418eJohann#endif 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define MIN_GF_INTERVAL 4 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define DEFAULT_GF_INTERVAL 7 3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define KEY_FRAME_CONTEXT 5 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define MAX_LAG_BUFFERS (CONFIG_REALTIME_ONLY? 1 : 25) 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define AF_THRESH 25 4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define AF_THRESH2 100 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define ARF_DECAY_THRESH 12 46ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define MIN_THRESHMULT 32 4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define MAX_THRESHMULT 512 5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 511b362b15af34006e6a11974088a46d42b903418eJohann#define GF_ZEROMV_ZBIN_BOOST 12 521b362b15af34006e6a11974088a46d42b903418eJohann#define LF_ZEROMV_ZBIN_BOOST 6 5379f15823c34ae1e423108295e416213200bb280fAndreas Huber#define MV_ZBIN_BOOST 4 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define ZBIN_OQ_MAX 192 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5679f15823c34ae1e423108295e416213200bb280fAndreas Huber#if !(CONFIG_REALTIME_ONLY) 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define VP8_TEMPORAL_ALT_REF 1 5879f15823c34ae1e423108295e416213200bb280fAndreas Huber#endif 5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 601b362b15af34006e6a11974088a46d42b903418eJohann#define MAX(x,y) (((x)>(y))?(x):(y)) 611b362b15af34006e6a11974088a46d42b903418eJohann#define MIN(x,y) (((x)<(y))?(x):(y)) 621b362b15af34006e6a11974088a46d42b903418eJohann 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int kf_indicated; 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned int frames_since_key; 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned int frames_since_golden; 6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int filter_level; 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int frames_till_gf_update_due; 7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int recent_ref_frame_usage[MAX_REF_FRAMES]; 7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber MV_CONTEXT mvc[2]; 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int mvcosts[2][MVvals+1]; 7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#ifdef MODE_STATS 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int y_modes[5]; 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int uv_modes[4]; 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int b_modes[10]; 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int inter_y_modes[10]; 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int inter_uv_modes[4]; 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int inter_b_modes[10]; 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_prob ymode_prob[4], uv_mode_prob[3]; /* interframe intra mode probs */ 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_prob kf_ymode_prob[4], kf_uv_mode_prob[3]; /* keyframe "" */ 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int ymode_count[5], uv_mode_count[4]; /* intra MB type cts this frame */ 8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int count_mb_ref_frame_usage[MAX_REF_FRAMES]; 9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int this_frame_percent_intra; 9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int last_frame_percent_intra; 9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} CODING_CONTEXT; 9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct 9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double frame; 10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double intra_error; 10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double coded_error; 10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double ssim_weighted_pred_err; 10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double pcnt_inter; 10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double pcnt_motion; 10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double pcnt_second_ref; 10679f15823c34ae1e423108295e416213200bb280fAndreas Huber double pcnt_neutral; 10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double MVr; 10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double mvr_abs; 10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double MVc; 11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double mvc_abs; 11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double MVrv; 11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double MVcv; 11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double mv_in_out_count; 1141b362b15af34006e6a11974088a46d42b903418eJohann double new_mv_count; 11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double duration; 11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double count; 11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberFIRSTPASS_STATS; 11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct 12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int frames_so_far; 12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double frame_intra_error; 12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double frame_coded_error; 12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double frame_pcnt_inter; 12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double frame_pcnt_motion; 12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double frame_mvr; 12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double frame_mvr_abs; 12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double frame_mvc; 13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double frame_mvc_abs; 13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} ONEPASS_FRAMESTATS; 13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef enum 13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 1371b362b15af34006e6a11974088a46d42b903418eJohann THR_ZERO1 = 0, 13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber THR_DC = 1, 13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1401b362b15af34006e6a11974088a46d42b903418eJohann THR_NEAREST1 = 2, 1411b362b15af34006e6a11974088a46d42b903418eJohann THR_NEAR1 = 3, 14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1431b362b15af34006e6a11974088a46d42b903418eJohann THR_ZERO2 = 4, 1441b362b15af34006e6a11974088a46d42b903418eJohann THR_NEAREST2 = 5, 14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1461b362b15af34006e6a11974088a46d42b903418eJohann THR_ZERO3 = 6, 1471b362b15af34006e6a11974088a46d42b903418eJohann THR_NEAREST3 = 7, 14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1491b362b15af34006e6a11974088a46d42b903418eJohann THR_NEAR2 = 8, 1501b362b15af34006e6a11974088a46d42b903418eJohann THR_NEAR3 = 9, 15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber THR_V_PRED = 10, 15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber THR_H_PRED = 11, 15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber THR_TM = 12, 15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1561b362b15af34006e6a11974088a46d42b903418eJohann THR_NEW1 = 13, 1571b362b15af34006e6a11974088a46d42b903418eJohann THR_NEW2 = 14, 1581b362b15af34006e6a11974088a46d42b903418eJohann THR_NEW3 = 15, 15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1601b362b15af34006e6a11974088a46d42b903418eJohann THR_SPLIT1 = 16, 1611b362b15af34006e6a11974088a46d42b903418eJohann THR_SPLIT2 = 17, 1621b362b15af34006e6a11974088a46d42b903418eJohann THR_SPLIT3 = 18, 16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1641b362b15af34006e6a11974088a46d42b903418eJohann THR_B_PRED = 19 16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} 16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberTHR_MODES; 16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef enum 16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber DIAMOND = 0, 17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber NSTEP = 1, 17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber HEX = 2 17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} SEARCH_METHODS; 17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct 17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int RD; 17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SEARCH_METHODS search_method; 17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int improved_quant; 18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int improved_dct; 18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int auto_filter; 18290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int recode_loop; 18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int iterative_sub_pixel; 18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int half_pixel_search; 18590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int quarter_pixel_search; 18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int thresh_mult[MAX_MODES]; 18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int max_step_search_steps; 18890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int first_step; 18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int optimize_coefficients; 19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 19179f15823c34ae1e423108295e416213200bb280fAndreas Huber int use_fastquant_for_pick; 19279f15823c34ae1e423108295e416213200bb280fAndreas Huber int no_skip_block4x4_search; 19379f15823c34ae1e423108295e416213200bb280fAndreas Huber int improved_mv_pred; 19479f15823c34ae1e423108295e416213200bb280fAndreas Huber 19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} SPEED_FEATURES; 19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 19790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct 19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber MACROBLOCK mb; 20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int segment_counts[MAX_MB_SEGMENTS]; 20190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int totalrate; 20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} MB_ROW_COMP; 20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 20490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct 20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 20690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber TOKENEXTRA *start; 20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber TOKENEXTRA *stop; 20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} TOKENLIST; 20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct 21190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int ithread; 21390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber void *ptr1; 21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber void *ptr2; 21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} ENCODETHREAD_DATA; 21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct 21790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 21890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int ithread; 21990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber void *ptr1; 22090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber} LPFTHREAD_DATA; 22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 222538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberenum 223538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber{ 224538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber BLOCK_16X8, 225538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber BLOCK_8X16, 226538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber BLOCK_8X8, 227538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber BLOCK_4X4, 228538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber BLOCK_16X16, 229538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber BLOCK_MAX_SEGMENTS 230538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber}; 231538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 23290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubertypedef struct 23390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{ 2341b362b15af34006e6a11974088a46d42b903418eJohann /* Layer configuration */ 2351b362b15af34006e6a11974088a46d42b903418eJohann double frame_rate; 2361b362b15af34006e6a11974088a46d42b903418eJohann int target_bandwidth; 2371b362b15af34006e6a11974088a46d42b903418eJohann 2381b362b15af34006e6a11974088a46d42b903418eJohann /* Layer specific coding parameters */ 2391b362b15af34006e6a11974088a46d42b903418eJohann int64_t starting_buffer_level; 2401b362b15af34006e6a11974088a46d42b903418eJohann int64_t optimal_buffer_level; 2411b362b15af34006e6a11974088a46d42b903418eJohann int64_t maximum_buffer_size; 2421b362b15af34006e6a11974088a46d42b903418eJohann int64_t starting_buffer_level_in_ms; 2431b362b15af34006e6a11974088a46d42b903418eJohann int64_t optimal_buffer_level_in_ms; 2441b362b15af34006e6a11974088a46d42b903418eJohann int64_t maximum_buffer_size_in_ms; 2451b362b15af34006e6a11974088a46d42b903418eJohann 2461b362b15af34006e6a11974088a46d42b903418eJohann int avg_frame_size_for_layer; 2471b362b15af34006e6a11974088a46d42b903418eJohann 2481b362b15af34006e6a11974088a46d42b903418eJohann int64_t buffer_level; 2491b362b15af34006e6a11974088a46d42b903418eJohann int64_t bits_off_target; 2501b362b15af34006e6a11974088a46d42b903418eJohann 2511b362b15af34006e6a11974088a46d42b903418eJohann int64_t total_actual_bits; 2521b362b15af34006e6a11974088a46d42b903418eJohann int total_target_vs_actual; 2531b362b15af34006e6a11974088a46d42b903418eJohann 2541b362b15af34006e6a11974088a46d42b903418eJohann int worst_quality; 2551b362b15af34006e6a11974088a46d42b903418eJohann int active_worst_quality; 2561b362b15af34006e6a11974088a46d42b903418eJohann int best_quality; 2571b362b15af34006e6a11974088a46d42b903418eJohann int active_best_quality; 2581b362b15af34006e6a11974088a46d42b903418eJohann 2591b362b15af34006e6a11974088a46d42b903418eJohann int ni_av_qi; 2601b362b15af34006e6a11974088a46d42b903418eJohann int ni_tot_qi; 2611b362b15af34006e6a11974088a46d42b903418eJohann int ni_frames; 2621b362b15af34006e6a11974088a46d42b903418eJohann int avg_frame_qindex; 2631b362b15af34006e6a11974088a46d42b903418eJohann 2641b362b15af34006e6a11974088a46d42b903418eJohann double rate_correction_factor; 2651b362b15af34006e6a11974088a46d42b903418eJohann double key_frame_rate_correction_factor; 2661b362b15af34006e6a11974088a46d42b903418eJohann double gf_rate_correction_factor; 2671b362b15af34006e6a11974088a46d42b903418eJohann 2681b362b15af34006e6a11974088a46d42b903418eJohann int zbin_over_quant; 2691b362b15af34006e6a11974088a46d42b903418eJohann 2701b362b15af34006e6a11974088a46d42b903418eJohann int inter_frame_target; 2711b362b15af34006e6a11974088a46d42b903418eJohann int64_t total_byte_count; 2721b362b15af34006e6a11974088a46d42b903418eJohann 2731b362b15af34006e6a11974088a46d42b903418eJohann int filter_level; 2741b362b15af34006e6a11974088a46d42b903418eJohann 2751b362b15af34006e6a11974088a46d42b903418eJohann int last_frame_percent_intra; 2761b362b15af34006e6a11974088a46d42b903418eJohann 2771b362b15af34006e6a11974088a46d42b903418eJohann int count_mb_ref_frame_usage[MAX_REF_FRAMES]; 2781b362b15af34006e6a11974088a46d42b903418eJohann 2791b362b15af34006e6a11974088a46d42b903418eJohann} LAYER_CONTEXT; 2801b362b15af34006e6a11974088a46d42b903418eJohann 2811b362b15af34006e6a11974088a46d42b903418eJohanntypedef struct VP8_COMP 2821b362b15af34006e6a11974088a46d42b903418eJohann{ 28390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 284538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber DECLARE_ALIGNED(16, short, Y1quant[QINDEX_RANGE][16]); 285ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang DECLARE_ALIGNED(16, short, Y1quant_shift[QINDEX_RANGE][16]); 286538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber DECLARE_ALIGNED(16, short, Y1zbin[QINDEX_RANGE][16]); 287538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber DECLARE_ALIGNED(16, short, Y1round[QINDEX_RANGE][16]); 28890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 289538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber DECLARE_ALIGNED(16, short, Y2quant[QINDEX_RANGE][16]); 290ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang DECLARE_ALIGNED(16, short, Y2quant_shift[QINDEX_RANGE][16]); 291538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber DECLARE_ALIGNED(16, short, Y2zbin[QINDEX_RANGE][16]); 292538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber DECLARE_ALIGNED(16, short, Y2round[QINDEX_RANGE][16]); 29390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 294538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber DECLARE_ALIGNED(16, short, UVquant[QINDEX_RANGE][16]); 295ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang DECLARE_ALIGNED(16, short, UVquant_shift[QINDEX_RANGE][16]); 296538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber DECLARE_ALIGNED(16, short, UVzbin[QINDEX_RANGE][16]); 297538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber DECLARE_ALIGNED(16, short, UVround[QINDEX_RANGE][16]); 29890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 29990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber DECLARE_ALIGNED(16, short, zrun_zbin_boost_y1[QINDEX_RANGE][16]); 30090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber DECLARE_ALIGNED(16, short, zrun_zbin_boost_y2[QINDEX_RANGE][16]); 30190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber DECLARE_ALIGNED(16, short, zrun_zbin_boost_uv[QINDEX_RANGE][16]); 30279f15823c34ae1e423108295e416213200bb280fAndreas Huber DECLARE_ALIGNED(16, short, Y1quant_fast[QINDEX_RANGE][16]); 30379f15823c34ae1e423108295e416213200bb280fAndreas Huber DECLARE_ALIGNED(16, short, Y2quant_fast[QINDEX_RANGE][16]); 30479f15823c34ae1e423108295e416213200bb280fAndreas Huber DECLARE_ALIGNED(16, short, UVquant_fast[QINDEX_RANGE][16]); 30590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 30690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 30790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber MACROBLOCK mb; 30890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber VP8_COMMON common; 3091b362b15af34006e6a11974088a46d42b903418eJohann vp8_writer bc[9]; /* one boolcoder for each partition */ 31090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 31190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber VP8_CONFIG oxcf; 31290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3131b362b15af34006e6a11974088a46d42b903418eJohann struct lookahead_ctx *lookahead; 3141b362b15af34006e6a11974088a46d42b903418eJohann struct lookahead_entry *source; 3151b362b15af34006e6a11974088a46d42b903418eJohann struct lookahead_entry *alt_ref_source; 3161b362b15af34006e6a11974088a46d42b903418eJohann struct lookahead_entry *last_source; 3171b362b15af34006e6a11974088a46d42b903418eJohann 31890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber YV12_BUFFER_CONFIG *Source; 31990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber YV12_BUFFER_CONFIG *un_scaled_source; 32090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber YV12_BUFFER_CONFIG scaled_source; 3211b362b15af34006e6a11974088a46d42b903418eJohann YV12_BUFFER_CONFIG *last_frame_unscaled_source; 32290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3231b362b15af34006e6a11974088a46d42b903418eJohann /* frame in src_buffers has been identified to be encoded as an alt ref */ 3241b362b15af34006e6a11974088a46d42b903418eJohann int source_alt_ref_pending; 3251b362b15af34006e6a11974088a46d42b903418eJohann /* an alt ref frame has been encoded and is usable */ 3261b362b15af34006e6a11974088a46d42b903418eJohann int source_alt_ref_active; 3271b362b15af34006e6a11974088a46d42b903418eJohann /* source of frame to encode is an exact copy of an alt ref frame */ 3281b362b15af34006e6a11974088a46d42b903418eJohann int is_src_frame_alt_ref; 32990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3301b362b15af34006e6a11974088a46d42b903418eJohann /* golden frame same as last frame ( short circuit gold searches) */ 3311b362b15af34006e6a11974088a46d42b903418eJohann int gold_is_last; 3321b362b15af34006e6a11974088a46d42b903418eJohann /* Alt reference frame same as last ( short circuit altref search) */ 3331b362b15af34006e6a11974088a46d42b903418eJohann int alt_is_last; 3341b362b15af34006e6a11974088a46d42b903418eJohann /* don't do both alt and gold search ( just do gold). */ 3351b362b15af34006e6a11974088a46d42b903418eJohann int gold_is_alt; 33690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3371b362b15af34006e6a11974088a46d42b903418eJohann YV12_BUFFER_CONFIG pick_lf_lvl_frame; 33890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 33990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber TOKENEXTRA *tok; 34090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned int tok_count; 34190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 34290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 34390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned int frames_since_key; 34490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned int key_frame_frequency; 34579f15823c34ae1e423108295e416213200bb280fAndreas Huber unsigned int this_key_frame_forced; 34679f15823c34ae1e423108295e416213200bb280fAndreas Huber unsigned int next_key_frame_forced; 34779f15823c34ae1e423108295e416213200bb280fAndreas Huber 3481b362b15af34006e6a11974088a46d42b903418eJohann /* Ambient reconstruction err target for force key frames */ 34979f15823c34ae1e423108295e416213200bb280fAndreas Huber int ambient_err; 35090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 35190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned int mode_check_freq[MAX_MODES]; 35290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 35390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int rd_baseline_thresh[MAX_MODES]; 35490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 35590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int RDMULT; 35690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int RDDIV ; 35790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 35890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber CODING_CONTEXT coding_context; 35990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3601b362b15af34006e6a11974088a46d42b903418eJohann /* Rate targetting variables */ 3611b362b15af34006e6a11974088a46d42b903418eJohann int64_t last_prediction_error; 3621b362b15af34006e6a11974088a46d42b903418eJohann int64_t last_intra_error; 36390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 36490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int this_frame_target; 36590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int projected_frame_size; 3661b362b15af34006e6a11974088a46d42b903418eJohann int last_q[2]; /* Separate values for Intra/Inter */ 36790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 36890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double rate_correction_factor; 36990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double key_frame_rate_correction_factor; 37090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double gf_rate_correction_factor; 37190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3721b362b15af34006e6a11974088a46d42b903418eJohann /* Count down till next GF */ 3731b362b15af34006e6a11974088a46d42b903418eJohann int frames_till_gf_update_due; 374f71323e297a928af368937089d3ed71239786f86Andreas Huber 3751b362b15af34006e6a11974088a46d42b903418eJohann /* GF interval chosen when we coded the last GF */ 3761b362b15af34006e6a11974088a46d42b903418eJohann int current_gf_interval; 377f71323e297a928af368937089d3ed71239786f86Andreas Huber 3781b362b15af34006e6a11974088a46d42b903418eJohann /* Total bits overspent becasue of GF boost (cumulative) */ 3791b362b15af34006e6a11974088a46d42b903418eJohann int gf_overspend_bits; 38090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3811b362b15af34006e6a11974088a46d42b903418eJohann /* Used in the few frames following a GF to recover the extra bits 3821b362b15af34006e6a11974088a46d42b903418eJohann * spent in that GF 3831b362b15af34006e6a11974088a46d42b903418eJohann */ 3841b362b15af34006e6a11974088a46d42b903418eJohann int non_gf_bitrate_adjustment; 38590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3861b362b15af34006e6a11974088a46d42b903418eJohann /* Extra bits spent on key frames that need to be recovered */ 3871b362b15af34006e6a11974088a46d42b903418eJohann int kf_overspend_bits; 38890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3891b362b15af34006e6a11974088a46d42b903418eJohann /* Current number of bit s to try and recover on each inter frame. */ 3901b362b15af34006e6a11974088a46d42b903418eJohann int kf_bitrate_adjustment; 39190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int max_gf_interval; 39290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int baseline_gf_interval; 3931b362b15af34006e6a11974088a46d42b903418eJohann int active_arnr_frames; 39490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3951b362b15af34006e6a11974088a46d42b903418eJohann int64_t key_frame_count; 39690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int prior_key_frame_distance[KEY_FRAME_CONTEXT]; 3971b362b15af34006e6a11974088a46d42b903418eJohann /* Current section per frame bandwidth target */ 3981b362b15af34006e6a11974088a46d42b903418eJohann int per_frame_bandwidth; 3991b362b15af34006e6a11974088a46d42b903418eJohann /* Average frame size target for clip */ 4001b362b15af34006e6a11974088a46d42b903418eJohann int av_per_frame_bandwidth; 4011b362b15af34006e6a11974088a46d42b903418eJohann /* Minimum allocation that should be used for any frame */ 4021b362b15af34006e6a11974088a46d42b903418eJohann int min_frame_bandwidth; 40390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int inter_frame_target; 40490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double output_frame_rate; 4051b362b15af34006e6a11974088a46d42b903418eJohann int64_t last_time_stamp_seen; 4061b362b15af34006e6a11974088a46d42b903418eJohann int64_t last_end_time_stamp_seen; 4071b362b15af34006e6a11974088a46d42b903418eJohann int64_t first_time_stamp_ever; 40890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 40990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int ni_av_qi; 41090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int ni_tot_qi; 41190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int ni_frames; 41290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int avg_frame_qindex; 41390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4141b362b15af34006e6a11974088a46d42b903418eJohann int64_t total_byte_count; 41590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 41690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int buffered_mode; 41790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4181b362b15af34006e6a11974088a46d42b903418eJohann double frame_rate; 4191b362b15af34006e6a11974088a46d42b903418eJohann double ref_frame_rate; 4201b362b15af34006e6a11974088a46d42b903418eJohann int64_t buffer_level; 4211b362b15af34006e6a11974088a46d42b903418eJohann int64_t bits_off_target; 42290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 42390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int rolling_target_bits; 42490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int rolling_actual_bits; 42590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 42690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int long_rolling_target_bits; 42790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int long_rolling_actual_bits; 42890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4291b362b15af34006e6a11974088a46d42b903418eJohann int64_t total_actual_bits; 4301b362b15af34006e6a11974088a46d42b903418eJohann int total_target_vs_actual; /* debug stats */ 43190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 43290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int worst_quality; 43390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int active_worst_quality; 43490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int best_quality; 43590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int active_best_quality; 43690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 43779f15823c34ae1e423108295e416213200bb280fAndreas Huber int cq_target_quality; 43890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4391b362b15af34006e6a11974088a46d42b903418eJohann int drop_frames_allowed; /* Are we permitted to drop frames? */ 4401b362b15af34006e6a11974088a46d42b903418eJohann int drop_frame; /* Drop this frame? */ 44190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4421b362b15af34006e6a11974088a46d42b903418eJohann vp8_prob frame_coef_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES]; 4431b362b15af34006e6a11974088a46d42b903418eJohann char update_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES]; 44490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4451b362b15af34006e6a11974088a46d42b903418eJohann unsigned int frame_branch_ct [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES][2]; 44690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 44790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int gfu_boost; 44890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int kf_boost; 44990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int last_boost; 45090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 45190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int target_bandwidth; 45290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber struct vpx_codec_pkt_list *output_pkt_list; 45390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 45490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if 0 4551b362b15af34006e6a11974088a46d42b903418eJohann /* Experimental code for lagged and one pass */ 45690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ONEPASS_FRAMESTATS one_pass_frame_stats[MAX_LAG_BUFFERS]; 45790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int one_pass_frame_index; 45890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 45990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 46090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int decimation_factor; 46190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int decimation_count; 46290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4631b362b15af34006e6a11974088a46d42b903418eJohann /* for real time encoding */ 4641b362b15af34006e6a11974088a46d42b903418eJohann int avg_encode_time; /* microsecond */ 4651b362b15af34006e6a11974088a46d42b903418eJohann int avg_pick_mode_time; /* microsecond */ 46690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int Speed; 46790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int compressor_speed; 46890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 46990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int auto_gold; 47090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int auto_adjust_gold_quantizer; 47190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int auto_worst_q; 47290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int cpu_used; 47390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int pass; 47490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 47590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 47690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int prob_intra_coded; 47790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int prob_last_coded; 47890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int prob_gf_coded; 47990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int prob_skip_false; 48090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int last_skip_false_probs[3]; 48190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int last_skip_probs_q[3]; 48290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int recent_ref_frame_usage[MAX_REF_FRAMES]; 48390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 48490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int this_frame_percent_intra; 48590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int last_frame_percent_intra; 48690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 48790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int ref_frame_flags; 48890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 48990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SPEED_FEATURES sf; 49090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4911b362b15af34006e6a11974088a46d42b903418eJohann /* Count ZEROMV on all reference frames. */ 4921b362b15af34006e6a11974088a46d42b903418eJohann int zeromv_count; 4931b362b15af34006e6a11974088a46d42b903418eJohann int lf_zeromv_pct; 49490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 49590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned char *segmentation_map; 4961b362b15af34006e6a11974088a46d42b903418eJohann signed char segment_feature_data[MB_LVL_MAX][MAX_MB_SEGMENTS]; 4971b362b15af34006e6a11974088a46d42b903418eJohann int segment_encode_breakout[MAX_MB_SEGMENTS]; 49890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 49990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned char *active_map; 50090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned int active_map_enabled; 5011b362b15af34006e6a11974088a46d42b903418eJohann 5021b362b15af34006e6a11974088a46d42b903418eJohann /* Video conferencing cyclic refresh mode flags. This is a mode 5031b362b15af34006e6a11974088a46d42b903418eJohann * designed to clean up the background over time in live encoding 5041b362b15af34006e6a11974088a46d42b903418eJohann * scenarious. It uses segmentation. 5051b362b15af34006e6a11974088a46d42b903418eJohann */ 50690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int cyclic_refresh_mode_enabled; 50790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int cyclic_refresh_mode_max_mbs_perframe; 50890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int cyclic_refresh_mode_index; 50990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int cyclic_refresh_q; 51090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber signed char *cyclic_refresh_map; 51190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 512ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang // Frame counter for the temporal pattern. Counter is rest when the temporal 513ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang // layers are changed dynamically (run-time change). 514ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang unsigned int temporal_pattern_counter; 515ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 51679f15823c34ae1e423108295e416213200bb280fAndreas Huber#if CONFIG_MULTITHREAD 5171b362b15af34006e6a11974088a46d42b903418eJohann /* multithread data */ 51879f15823c34ae1e423108295e416213200bb280fAndreas Huber int * mt_current_mb_col; 51979f15823c34ae1e423108295e416213200bb280fAndreas Huber int mt_sync_range; 52090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int b_multi_threaded; 52190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int encoding_thread_count; 5221b362b15af34006e6a11974088a46d42b903418eJohann int b_lpf_running; 52390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 52490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber pthread_t *h_encoding_thread; 52579f15823c34ae1e423108295e416213200bb280fAndreas Huber pthread_t h_filter_thread; 52679f15823c34ae1e423108295e416213200bb280fAndreas Huber 52790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber MB_ROW_COMP *mb_row_ei; 52890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ENCODETHREAD_DATA *en_thread_data; 52979f15823c34ae1e423108295e416213200bb280fAndreas Huber LPFTHREAD_DATA lpf_thread_data; 53090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5311b362b15af34006e6a11974088a46d42b903418eJohann /* events */ 53279f15823c34ae1e423108295e416213200bb280fAndreas Huber sem_t *h_event_start_encoding; 53379f15823c34ae1e423108295e416213200bb280fAndreas Huber sem_t h_event_end_encoding; 53479f15823c34ae1e423108295e416213200bb280fAndreas Huber sem_t h_event_start_lpf; 53579f15823c34ae1e423108295e416213200bb280fAndreas Huber sem_t h_event_end_lpf; 53690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 53790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 53890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber TOKENLIST *tplist; 5391b362b15af34006e6a11974088a46d42b903418eJohann unsigned int partition_sz[MAX_PARTITIONS]; 5401b362b15af34006e6a11974088a46d42b903418eJohann unsigned char *partition_d[MAX_PARTITIONS]; 5411b362b15af34006e6a11974088a46d42b903418eJohann unsigned char *partition_d_end[MAX_PARTITIONS]; 54290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 54390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 54490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber fractional_mv_step_fp *find_fractional_mv_step; 54590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_full_search_fn_t full_search_sad; 5461b362b15af34006e6a11974088a46d42b903418eJohann vp8_refining_search_fn_t refining_search_sad; 54790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_diamond_search_fn_t diamond_search_sad; 548538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber vp8_variance_fn_ptr_t fn_ptr[BLOCK_MAX_SEGMENTS]; 5491b362b15af34006e6a11974088a46d42b903418eJohann uint64_t time_receive_data; 5501b362b15af34006e6a11974088a46d42b903418eJohann uint64_t time_compress_data; 5511b362b15af34006e6a11974088a46d42b903418eJohann uint64_t time_pick_lpf; 5521b362b15af34006e6a11974088a46d42b903418eJohann uint64_t time_encode_mb_row; 55390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 55490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int base_skip_false_prob[128]; 55590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5561b362b15af34006e6a11974088a46d42b903418eJohann FRAME_CONTEXT lfc_n; /* last frame entropy */ 5571b362b15af34006e6a11974088a46d42b903418eJohann FRAME_CONTEXT lfc_a; /* last alt ref entropy */ 5581b362b15af34006e6a11974088a46d42b903418eJohann FRAME_CONTEXT lfc_g; /* last gold ref entropy */ 5591b362b15af34006e6a11974088a46d42b903418eJohann 5601b362b15af34006e6a11974088a46d42b903418eJohann 5611b362b15af34006e6a11974088a46d42b903418eJohann struct twopass_rc 5621b362b15af34006e6a11974088a46d42b903418eJohann { 5631b362b15af34006e6a11974088a46d42b903418eJohann unsigned int section_intra_rating; 5641b362b15af34006e6a11974088a46d42b903418eJohann double section_max_qfactor; 5651b362b15af34006e6a11974088a46d42b903418eJohann unsigned int next_iiratio; 5661b362b15af34006e6a11974088a46d42b903418eJohann unsigned int this_iiratio; 5671b362b15af34006e6a11974088a46d42b903418eJohann FIRSTPASS_STATS total_stats; 5681b362b15af34006e6a11974088a46d42b903418eJohann FIRSTPASS_STATS this_frame_stats; 5691b362b15af34006e6a11974088a46d42b903418eJohann FIRSTPASS_STATS *stats_in, *stats_in_end, *stats_in_start; 5701b362b15af34006e6a11974088a46d42b903418eJohann FIRSTPASS_STATS total_left_stats; 5711b362b15af34006e6a11974088a46d42b903418eJohann int first_pass_done; 5721b362b15af34006e6a11974088a46d42b903418eJohann int64_t bits_left; 5731b362b15af34006e6a11974088a46d42b903418eJohann int64_t clip_bits_total; 5741b362b15af34006e6a11974088a46d42b903418eJohann double avg_iiratio; 5751b362b15af34006e6a11974088a46d42b903418eJohann double modified_error_total; 5761b362b15af34006e6a11974088a46d42b903418eJohann double modified_error_used; 5771b362b15af34006e6a11974088a46d42b903418eJohann double modified_error_left; 5781b362b15af34006e6a11974088a46d42b903418eJohann double kf_intra_err_min; 5791b362b15af34006e6a11974088a46d42b903418eJohann double gf_intra_err_min; 5801b362b15af34006e6a11974088a46d42b903418eJohann int frames_to_key; 5811b362b15af34006e6a11974088a46d42b903418eJohann int maxq_max_limit; 5821b362b15af34006e6a11974088a46d42b903418eJohann int maxq_min_limit; 5831b362b15af34006e6a11974088a46d42b903418eJohann int gf_decay_rate; 5841b362b15af34006e6a11974088a46d42b903418eJohann int static_scene_max_gf_interval; 5851b362b15af34006e6a11974088a46d42b903418eJohann int kf_bits; 5861b362b15af34006e6a11974088a46d42b903418eJohann /* Remaining error from uncoded frames in a gf group. */ 5871b362b15af34006e6a11974088a46d42b903418eJohann int gf_group_error_left; 5881b362b15af34006e6a11974088a46d42b903418eJohann /* Projected total bits available for a key frame group of frames */ 5891b362b15af34006e6a11974088a46d42b903418eJohann int64_t kf_group_bits; 5901b362b15af34006e6a11974088a46d42b903418eJohann /* Error score of frames still to be coded in kf group */ 5911b362b15af34006e6a11974088a46d42b903418eJohann int64_t kf_group_error_left; 5921b362b15af34006e6a11974088a46d42b903418eJohann /* Projected Bits available for a group including 1 GF or ARF */ 593ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang int64_t gf_group_bits; 5941b362b15af34006e6a11974088a46d42b903418eJohann /* Bits for the golden frame or ARF */ 5951b362b15af34006e6a11974088a46d42b903418eJohann int gf_bits; 5961b362b15af34006e6a11974088a46d42b903418eJohann int alt_extra_bits; 5971b362b15af34006e6a11974088a46d42b903418eJohann double est_max_qcorrection_factor; 5981b362b15af34006e6a11974088a46d42b903418eJohann } twopass; 59990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 60090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if VP8_TEMPORAL_ALT_REF 6011b362b15af34006e6a11974088a46d42b903418eJohann YV12_BUFFER_CONFIG alt_ref_buffer; 602538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber YV12_BUFFER_CONFIG *frames[MAX_LAG_BUFFERS]; 603538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber int fixed_divide[512]; 60490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 60590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6061b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_INTERNAL_STATS 60790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int count; 60890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_y; 60990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_u; 61090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_v; 61190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total ; 61290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_sq_error; 61390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double totalp_y; 61490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double totalp_u; 61590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double totalp_v; 61690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double totalp; 61790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_sq_error2; 61890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int bytes; 61990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double summed_quality; 62090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double summed_weights; 62190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned int tot_recode_hits; 62290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 62390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 62490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_ssimg_y; 62590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_ssimg_u; 62690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_ssimg_v; 62790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_ssimg_all; 62890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 62990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int b_calculate_ssimg; 63090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 63190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int b_calculate_psnr; 632f71323e297a928af368937089d3ed71239786f86Andreas Huber 6331b362b15af34006e6a11974088a46d42b903418eJohann /* Per MB activity measurement */ 6341b362b15af34006e6a11974088a46d42b903418eJohann unsigned int activity_avg; 6351b362b15af34006e6a11974088a46d42b903418eJohann unsigned int * mb_activity_map; 636f71323e297a928af368937089d3ed71239786f86Andreas Huber 6371b362b15af34006e6a11974088a46d42b903418eJohann /* Record of which MBs still refer to last golden frame either 6381b362b15af34006e6a11974088a46d42b903418eJohann * directly or through 0,0 6391b362b15af34006e6a11974088a46d42b903418eJohann */ 6401b362b15af34006e6a11974088a46d42b903418eJohann unsigned char *gf_active_flags; 641f71323e297a928af368937089d3ed71239786f86Andreas Huber int gf_active_count; 642f71323e297a928af368937089d3ed71239786f86Andreas Huber 6431b362b15af34006e6a11974088a46d42b903418eJohann int output_partition; 6441b362b15af34006e6a11974088a46d42b903418eJohann 6451b362b15af34006e6a11974088a46d42b903418eJohann /* Store last frame's MV info for next frame MV prediction */ 64679f15823c34ae1e423108295e416213200bb280fAndreas Huber int_mv *lfmv; 64779f15823c34ae1e423108295e416213200bb280fAndreas Huber int *lf_ref_frame_sign_bias; 64879f15823c34ae1e423108295e416213200bb280fAndreas Huber int *lf_ref_frame; 649f71323e297a928af368937089d3ed71239786f86Andreas Huber 6501b362b15af34006e6a11974088a46d42b903418eJohann /* force next frame to intra when kf_auto says so */ 6511b362b15af34006e6a11974088a46d42b903418eJohann int force_next_frame_intra; 6521b362b15af34006e6a11974088a46d42b903418eJohann 6531b362b15af34006e6a11974088a46d42b903418eJohann int droppable; 6541b362b15af34006e6a11974088a46d42b903418eJohann 6551b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_TEMPORAL_DENOISING 6561b362b15af34006e6a11974088a46d42b903418eJohann VP8_DENOISER denoiser; 65779f15823c34ae1e423108295e416213200bb280fAndreas Huber#endif 65890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6591b362b15af34006e6a11974088a46d42b903418eJohann /* Coding layer state variables */ 6601b362b15af34006e6a11974088a46d42b903418eJohann unsigned int current_layer; 6611b362b15af34006e6a11974088a46d42b903418eJohann LAYER_CONTEXT layer_context[VPX_TS_MAX_LAYERS]; 6621b362b15af34006e6a11974088a46d42b903418eJohann 6631b362b15af34006e6a11974088a46d42b903418eJohann int64_t frames_in_layer[VPX_TS_MAX_LAYERS]; 6641b362b15af34006e6a11974088a46d42b903418eJohann int64_t bytes_in_layer[VPX_TS_MAX_LAYERS]; 6651b362b15af34006e6a11974088a46d42b903418eJohann double sum_psnr[VPX_TS_MAX_LAYERS]; 6661b362b15af34006e6a11974088a46d42b903418eJohann double sum_psnr_p[VPX_TS_MAX_LAYERS]; 6671b362b15af34006e6a11974088a46d42b903418eJohann double total_error2[VPX_TS_MAX_LAYERS]; 6681b362b15af34006e6a11974088a46d42b903418eJohann double total_error2_p[VPX_TS_MAX_LAYERS]; 6691b362b15af34006e6a11974088a46d42b903418eJohann double sum_ssim[VPX_TS_MAX_LAYERS]; 6701b362b15af34006e6a11974088a46d42b903418eJohann double sum_weights[VPX_TS_MAX_LAYERS]; 6711b362b15af34006e6a11974088a46d42b903418eJohann 6721b362b15af34006e6a11974088a46d42b903418eJohann double total_ssimg_y_in_layer[VPX_TS_MAX_LAYERS]; 6731b362b15af34006e6a11974088a46d42b903418eJohann double total_ssimg_u_in_layer[VPX_TS_MAX_LAYERS]; 6741b362b15af34006e6a11974088a46d42b903418eJohann double total_ssimg_v_in_layer[VPX_TS_MAX_LAYERS]; 6751b362b15af34006e6a11974088a46d42b903418eJohann double total_ssimg_all_in_layer[VPX_TS_MAX_LAYERS]; 6761b362b15af34006e6a11974088a46d42b903418eJohann 6771b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_MULTI_RES_ENCODING 6781b362b15af34006e6a11974088a46d42b903418eJohann /* Number of MBs per row at lower-resolution level */ 6791b362b15af34006e6a11974088a46d42b903418eJohann int mr_low_res_mb_cols; 6801b362b15af34006e6a11974088a46d42b903418eJohann /* Indicate if lower-res mv info is available */ 6811b362b15af34006e6a11974088a46d42b903418eJohann unsigned char mr_low_res_mv_avail; 6821b362b15af34006e6a11974088a46d42b903418eJohann /* The frame number of each reference frames */ 6831b362b15af34006e6a11974088a46d42b903418eJohann unsigned int current_ref_frames[MAX_REF_FRAMES]; 6841b362b15af34006e6a11974088a46d42b903418eJohann#endif 68590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6861b362b15af34006e6a11974088a46d42b903418eJohann struct rd_costs_struct 6871b362b15af34006e6a11974088a46d42b903418eJohann { 6881b362b15af34006e6a11974088a46d42b903418eJohann int mvcosts[2][MVvals+1]; 6891b362b15af34006e6a11974088a46d42b903418eJohann int mvsadcosts[2][MVfpvals+1]; 6901b362b15af34006e6a11974088a46d42b903418eJohann int mbmode_cost[2][MB_MODE_COUNT]; 6911b362b15af34006e6a11974088a46d42b903418eJohann int intra_uv_mode_cost[2][MB_MODE_COUNT]; 6921b362b15af34006e6a11974088a46d42b903418eJohann int bmode_costs[10][10][10]; 6931b362b15af34006e6a11974088a46d42b903418eJohann int inter_bmode_costs[B_MODE_COUNT]; 6941b362b15af34006e6a11974088a46d42b903418eJohann int token_costs[BLOCK_TYPES][COEF_BANDS] 6951b362b15af34006e6a11974088a46d42b903418eJohann [PREV_COEF_CONTEXTS][MAX_ENTROPY_TOKENS]; 6961b362b15af34006e6a11974088a46d42b903418eJohann } rd_costs; 6971b362b15af34006e6a11974088a46d42b903418eJohann} VP8_COMP; 69890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 699ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangvoid vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest, 700ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang unsigned char *dest_end, unsigned long *size); 70190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7021b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_tokenize_mb(VP8_COMP *, MACROBLOCK *, TOKENEXTRA **); 70390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 70490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_set_speed_features(VP8_COMP *cpi); 70590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 70690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if CONFIG_DEBUG 70790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define CHECK_MEM_ERROR(lval,expr) do {\ 70890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lval = (expr); \ 70990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if(!lval) \ 71090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR,\ 71190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber "Failed to allocate "#lval" at %s:%d", \ 71290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber __FILE__,__LINE__);\ 71390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } while(0) 71490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#else 71590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define CHECK_MEM_ERROR(lval,expr) do {\ 71690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lval = (expr); \ 71790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if(!lval) \ 71890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR,\ 71990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber "Failed to allocate "#lval);\ 72090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } while(0) 72190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 72290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 723