onyx_int.h revision 1b362b15af34006e6a11974088a46d42b903418e
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 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define MAX_MODES 20 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]); 2851b362b15af34006e6a11974088a46d42b903418eJohann DECLARE_ALIGNED(16, unsigned char, 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]); 2901b362b15af34006e6a11974088a46d42b903418eJohann DECLARE_ALIGNED(16, unsigned char, 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]); 2951b362b15af34006e6a11974088a46d42b903418eJohann DECLARE_ALIGNED(16, unsigned char, 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 unsigned int mode_test_hit_counts[MAX_MODES]; 35390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned int mode_chosen_counts[MAX_MODES]; 35490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned int mbs_tested_so_far; 35590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 35690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int rd_thresh_mult[MAX_MODES]; 35790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int rd_baseline_thresh[MAX_MODES]; 35890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int rd_threshes[MAX_MODES]; 35990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 36090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int RDMULT; 36190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int RDDIV ; 36290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 36390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber CODING_CONTEXT coding_context; 36490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3651b362b15af34006e6a11974088a46d42b903418eJohann /* Rate targetting variables */ 3661b362b15af34006e6a11974088a46d42b903418eJohann int64_t last_prediction_error; 3671b362b15af34006e6a11974088a46d42b903418eJohann int64_t last_intra_error; 36890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 36990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int this_frame_target; 37090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int projected_frame_size; 3711b362b15af34006e6a11974088a46d42b903418eJohann int last_q[2]; /* Separate values for Intra/Inter */ 37290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 37390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double rate_correction_factor; 37490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double key_frame_rate_correction_factor; 37590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double gf_rate_correction_factor; 37690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3771b362b15af34006e6a11974088a46d42b903418eJohann /* Count down till next GF */ 3781b362b15af34006e6a11974088a46d42b903418eJohann int frames_till_gf_update_due; 379f71323e297a928af368937089d3ed71239786f86Andreas Huber 3801b362b15af34006e6a11974088a46d42b903418eJohann /* GF interval chosen when we coded the last GF */ 3811b362b15af34006e6a11974088a46d42b903418eJohann int current_gf_interval; 382f71323e297a928af368937089d3ed71239786f86Andreas Huber 3831b362b15af34006e6a11974088a46d42b903418eJohann /* Total bits overspent becasue of GF boost (cumulative) */ 3841b362b15af34006e6a11974088a46d42b903418eJohann int gf_overspend_bits; 38590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3861b362b15af34006e6a11974088a46d42b903418eJohann /* Used in the few frames following a GF to recover the extra bits 3871b362b15af34006e6a11974088a46d42b903418eJohann * spent in that GF 3881b362b15af34006e6a11974088a46d42b903418eJohann */ 3891b362b15af34006e6a11974088a46d42b903418eJohann int non_gf_bitrate_adjustment; 39090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3911b362b15af34006e6a11974088a46d42b903418eJohann /* Extra bits spent on key frames that need to be recovered */ 3921b362b15af34006e6a11974088a46d42b903418eJohann int kf_overspend_bits; 39390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3941b362b15af34006e6a11974088a46d42b903418eJohann /* Current number of bit s to try and recover on each inter frame. */ 3951b362b15af34006e6a11974088a46d42b903418eJohann int kf_bitrate_adjustment; 39690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int max_gf_interval; 39790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int baseline_gf_interval; 3981b362b15af34006e6a11974088a46d42b903418eJohann int active_arnr_frames; 39990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4001b362b15af34006e6a11974088a46d42b903418eJohann int64_t key_frame_count; 40190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int prior_key_frame_distance[KEY_FRAME_CONTEXT]; 4021b362b15af34006e6a11974088a46d42b903418eJohann /* Current section per frame bandwidth target */ 4031b362b15af34006e6a11974088a46d42b903418eJohann int per_frame_bandwidth; 4041b362b15af34006e6a11974088a46d42b903418eJohann /* Average frame size target for clip */ 4051b362b15af34006e6a11974088a46d42b903418eJohann int av_per_frame_bandwidth; 4061b362b15af34006e6a11974088a46d42b903418eJohann /* Minimum allocation that should be used for any frame */ 4071b362b15af34006e6a11974088a46d42b903418eJohann int min_frame_bandwidth; 40890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int inter_frame_target; 40990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double output_frame_rate; 4101b362b15af34006e6a11974088a46d42b903418eJohann int64_t last_time_stamp_seen; 4111b362b15af34006e6a11974088a46d42b903418eJohann int64_t last_end_time_stamp_seen; 4121b362b15af34006e6a11974088a46d42b903418eJohann int64_t first_time_stamp_ever; 41390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 41490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int ni_av_qi; 41590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int ni_tot_qi; 41690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int ni_frames; 41790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int avg_frame_qindex; 41890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 41990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int zbin_over_quant; 42090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int zbin_mode_boost; 42190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int zbin_mode_boost_enabled; 4221b362b15af34006e6a11974088a46d42b903418eJohann int last_zbin_over_quant; 4231b362b15af34006e6a11974088a46d42b903418eJohann int last_zbin_mode_boost; 42490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4251b362b15af34006e6a11974088a46d42b903418eJohann int64_t total_byte_count; 42690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 42790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int buffered_mode; 42890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4291b362b15af34006e6a11974088a46d42b903418eJohann double frame_rate; 4301b362b15af34006e6a11974088a46d42b903418eJohann double ref_frame_rate; 4311b362b15af34006e6a11974088a46d42b903418eJohann int64_t buffer_level; 4321b362b15af34006e6a11974088a46d42b903418eJohann int64_t bits_off_target; 43390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 43490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int rolling_target_bits; 43590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int rolling_actual_bits; 43690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 43790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int long_rolling_target_bits; 43890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int long_rolling_actual_bits; 43990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4401b362b15af34006e6a11974088a46d42b903418eJohann int64_t total_actual_bits; 4411b362b15af34006e6a11974088a46d42b903418eJohann int total_target_vs_actual; /* debug stats */ 44290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 44390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int worst_quality; 44490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int active_worst_quality; 44590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int best_quality; 44690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int active_best_quality; 44790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 44879f15823c34ae1e423108295e416213200bb280fAndreas Huber int cq_target_quality; 44990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4501b362b15af34006e6a11974088a46d42b903418eJohann int drop_frames_allowed; /* Are we permitted to drop frames? */ 4511b362b15af34006e6a11974088a46d42b903418eJohann int drop_frame; /* Drop this frame? */ 45290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4531b362b15af34006e6a11974088a46d42b903418eJohann vp8_prob frame_coef_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES]; 4541b362b15af34006e6a11974088a46d42b903418eJohann char update_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES]; 45590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4561b362b15af34006e6a11974088a46d42b903418eJohann unsigned int frame_branch_ct [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES][2]; 45790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 45890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int gfu_boost; 45990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int kf_boost; 46090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int last_boost; 46190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 46290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int target_bandwidth; 46390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber struct vpx_codec_pkt_list *output_pkt_list; 46490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 46590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if 0 4661b362b15af34006e6a11974088a46d42b903418eJohann /* Experimental code for lagged and one pass */ 46790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ONEPASS_FRAMESTATS one_pass_frame_stats[MAX_LAG_BUFFERS]; 46890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int one_pass_frame_index; 46990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 47090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 47190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int decimation_factor; 47290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int decimation_count; 47390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4741b362b15af34006e6a11974088a46d42b903418eJohann /* for real time encoding */ 4751b362b15af34006e6a11974088a46d42b903418eJohann int avg_encode_time; /* microsecond */ 4761b362b15af34006e6a11974088a46d42b903418eJohann int avg_pick_mode_time; /* microsecond */ 47790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int Speed; 47890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int compressor_speed; 47990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 48090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int interquantizer; 48190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int auto_gold; 48290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int auto_adjust_gold_quantizer; 48390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int auto_worst_q; 48490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int cpu_used; 48590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int pass; 48690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 48790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 48890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int prob_intra_coded; 48990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int prob_last_coded; 49090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int prob_gf_coded; 49190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int prob_skip_false; 49290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int last_skip_false_probs[3]; 49390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int last_skip_probs_q[3]; 49490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int recent_ref_frame_usage[MAX_REF_FRAMES]; 49590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 49690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int count_mb_ref_frame_usage[MAX_REF_FRAMES]; 49790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int this_frame_percent_intra; 49890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int last_frame_percent_intra; 49990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 50090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int ref_frame_flags; 50190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 50290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SPEED_FEATURES sf; 50390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int error_bins[1024]; 50490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5051b362b15af34006e6a11974088a46d42b903418eJohann /* Data used for real time conferencing mode to help determine if it 5061b362b15af34006e6a11974088a46d42b903418eJohann * would be good to update the gf 5071b362b15af34006e6a11974088a46d42b903418eJohann */ 50890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int inter_zz_count; 5091b362b15af34006e6a11974088a46d42b903418eJohann /* Count ZEROMV on all reference frames. */ 5101b362b15af34006e6a11974088a46d42b903418eJohann int zeromv_count; 5111b362b15af34006e6a11974088a46d42b903418eJohann int lf_zeromv_pct; 51290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int gf_bad_count; 51390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int gf_update_recommended; 51490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 51590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned char *segmentation_map; 5161b362b15af34006e6a11974088a46d42b903418eJohann signed char segment_feature_data[MB_LVL_MAX][MAX_MB_SEGMENTS]; 5171b362b15af34006e6a11974088a46d42b903418eJohann int segment_encode_breakout[MAX_MB_SEGMENTS]; 51890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 51990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned char *active_map; 52090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned int active_map_enabled; 5211b362b15af34006e6a11974088a46d42b903418eJohann 5221b362b15af34006e6a11974088a46d42b903418eJohann /* Video conferencing cyclic refresh mode flags. This is a mode 5231b362b15af34006e6a11974088a46d42b903418eJohann * designed to clean up the background over time in live encoding 5241b362b15af34006e6a11974088a46d42b903418eJohann * scenarious. It uses segmentation. 5251b362b15af34006e6a11974088a46d42b903418eJohann */ 52690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int cyclic_refresh_mode_enabled; 52790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int cyclic_refresh_mode_max_mbs_perframe; 52890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int cyclic_refresh_mode_index; 52990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int cyclic_refresh_q; 53090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber signed char *cyclic_refresh_map; 53190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 53279f15823c34ae1e423108295e416213200bb280fAndreas Huber#if CONFIG_MULTITHREAD 5331b362b15af34006e6a11974088a46d42b903418eJohann /* multithread data */ 53479f15823c34ae1e423108295e416213200bb280fAndreas Huber int * mt_current_mb_col; 53579f15823c34ae1e423108295e416213200bb280fAndreas Huber int mt_sync_range; 53690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int b_multi_threaded; 53790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int encoding_thread_count; 5381b362b15af34006e6a11974088a46d42b903418eJohann int b_lpf_running; 53990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 54090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber pthread_t *h_encoding_thread; 54179f15823c34ae1e423108295e416213200bb280fAndreas Huber pthread_t h_filter_thread; 54279f15823c34ae1e423108295e416213200bb280fAndreas Huber 54390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber MB_ROW_COMP *mb_row_ei; 54490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ENCODETHREAD_DATA *en_thread_data; 54579f15823c34ae1e423108295e416213200bb280fAndreas Huber LPFTHREAD_DATA lpf_thread_data; 54690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5471b362b15af34006e6a11974088a46d42b903418eJohann /* events */ 54879f15823c34ae1e423108295e416213200bb280fAndreas Huber sem_t *h_event_start_encoding; 54979f15823c34ae1e423108295e416213200bb280fAndreas Huber sem_t h_event_end_encoding; 55079f15823c34ae1e423108295e416213200bb280fAndreas Huber sem_t h_event_start_lpf; 55179f15823c34ae1e423108295e416213200bb280fAndreas Huber sem_t h_event_end_lpf; 55290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 55390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 55490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber TOKENLIST *tplist; 5551b362b15af34006e6a11974088a46d42b903418eJohann unsigned int partition_sz[MAX_PARTITIONS]; 5561b362b15af34006e6a11974088a46d42b903418eJohann unsigned char *partition_d[MAX_PARTITIONS]; 5571b362b15af34006e6a11974088a46d42b903418eJohann unsigned char *partition_d_end[MAX_PARTITIONS]; 55890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 55990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 56090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber fractional_mv_step_fp *find_fractional_mv_step; 56190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_full_search_fn_t full_search_sad; 5621b362b15af34006e6a11974088a46d42b903418eJohann vp8_refining_search_fn_t refining_search_sad; 56390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vp8_diamond_search_fn_t diamond_search_sad; 564538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber vp8_variance_fn_ptr_t fn_ptr[BLOCK_MAX_SEGMENTS]; 5651b362b15af34006e6a11974088a46d42b903418eJohann uint64_t time_receive_data; 5661b362b15af34006e6a11974088a46d42b903418eJohann uint64_t time_compress_data; 5671b362b15af34006e6a11974088a46d42b903418eJohann uint64_t time_pick_lpf; 5681b362b15af34006e6a11974088a46d42b903418eJohann uint64_t time_encode_mb_row; 56990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 57090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int base_skip_false_prob[128]; 57190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5721b362b15af34006e6a11974088a46d42b903418eJohann FRAME_CONTEXT lfc_n; /* last frame entropy */ 5731b362b15af34006e6a11974088a46d42b903418eJohann FRAME_CONTEXT lfc_a; /* last alt ref entropy */ 5741b362b15af34006e6a11974088a46d42b903418eJohann FRAME_CONTEXT lfc_g; /* last gold ref entropy */ 5751b362b15af34006e6a11974088a46d42b903418eJohann 5761b362b15af34006e6a11974088a46d42b903418eJohann 5771b362b15af34006e6a11974088a46d42b903418eJohann struct twopass_rc 5781b362b15af34006e6a11974088a46d42b903418eJohann { 5791b362b15af34006e6a11974088a46d42b903418eJohann unsigned int section_intra_rating; 5801b362b15af34006e6a11974088a46d42b903418eJohann double section_max_qfactor; 5811b362b15af34006e6a11974088a46d42b903418eJohann unsigned int next_iiratio; 5821b362b15af34006e6a11974088a46d42b903418eJohann unsigned int this_iiratio; 5831b362b15af34006e6a11974088a46d42b903418eJohann FIRSTPASS_STATS total_stats; 5841b362b15af34006e6a11974088a46d42b903418eJohann FIRSTPASS_STATS this_frame_stats; 5851b362b15af34006e6a11974088a46d42b903418eJohann FIRSTPASS_STATS *stats_in, *stats_in_end, *stats_in_start; 5861b362b15af34006e6a11974088a46d42b903418eJohann FIRSTPASS_STATS total_left_stats; 5871b362b15af34006e6a11974088a46d42b903418eJohann int first_pass_done; 5881b362b15af34006e6a11974088a46d42b903418eJohann int64_t bits_left; 5891b362b15af34006e6a11974088a46d42b903418eJohann int64_t clip_bits_total; 5901b362b15af34006e6a11974088a46d42b903418eJohann double avg_iiratio; 5911b362b15af34006e6a11974088a46d42b903418eJohann double modified_error_total; 5921b362b15af34006e6a11974088a46d42b903418eJohann double modified_error_used; 5931b362b15af34006e6a11974088a46d42b903418eJohann double modified_error_left; 5941b362b15af34006e6a11974088a46d42b903418eJohann double kf_intra_err_min; 5951b362b15af34006e6a11974088a46d42b903418eJohann double gf_intra_err_min; 5961b362b15af34006e6a11974088a46d42b903418eJohann int frames_to_key; 5971b362b15af34006e6a11974088a46d42b903418eJohann int maxq_max_limit; 5981b362b15af34006e6a11974088a46d42b903418eJohann int maxq_min_limit; 5991b362b15af34006e6a11974088a46d42b903418eJohann int gf_decay_rate; 6001b362b15af34006e6a11974088a46d42b903418eJohann int static_scene_max_gf_interval; 6011b362b15af34006e6a11974088a46d42b903418eJohann int kf_bits; 6021b362b15af34006e6a11974088a46d42b903418eJohann /* Remaining error from uncoded frames in a gf group. */ 6031b362b15af34006e6a11974088a46d42b903418eJohann int gf_group_error_left; 6041b362b15af34006e6a11974088a46d42b903418eJohann /* Projected total bits available for a key frame group of frames */ 6051b362b15af34006e6a11974088a46d42b903418eJohann int64_t kf_group_bits; 6061b362b15af34006e6a11974088a46d42b903418eJohann /* Error score of frames still to be coded in kf group */ 6071b362b15af34006e6a11974088a46d42b903418eJohann int64_t kf_group_error_left; 6081b362b15af34006e6a11974088a46d42b903418eJohann /* Projected Bits available for a group including 1 GF or ARF */ 6091b362b15af34006e6a11974088a46d42b903418eJohann int gf_group_bits; 6101b362b15af34006e6a11974088a46d42b903418eJohann /* Bits for the golden frame or ARF */ 6111b362b15af34006e6a11974088a46d42b903418eJohann int gf_bits; 6121b362b15af34006e6a11974088a46d42b903418eJohann int alt_extra_bits; 6131b362b15af34006e6a11974088a46d42b903418eJohann double est_max_qcorrection_factor; 6141b362b15af34006e6a11974088a46d42b903418eJohann } twopass; 61590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 61690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if VP8_TEMPORAL_ALT_REF 6171b362b15af34006e6a11974088a46d42b903418eJohann YV12_BUFFER_CONFIG alt_ref_buffer; 618538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber YV12_BUFFER_CONFIG *frames[MAX_LAG_BUFFERS]; 619538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber int fixed_divide[512]; 62090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 62190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6221b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_INTERNAL_STATS 62390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int count; 62490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_y; 62590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_u; 62690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_v; 62790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total ; 62890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_sq_error; 62990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double totalp_y; 63090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double totalp_u; 63190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double totalp_v; 63290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double totalp; 63390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_sq_error2; 63490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int bytes; 63590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double summed_quality; 63690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double summed_weights; 63790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber unsigned int tot_recode_hits; 63890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 63990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 64090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_ssimg_y; 64190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_ssimg_u; 64290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_ssimg_v; 64390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber double total_ssimg_all; 64490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 64590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int b_calculate_ssimg; 64690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 64790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber int b_calculate_psnr; 648f71323e297a928af368937089d3ed71239786f86Andreas Huber 6491b362b15af34006e6a11974088a46d42b903418eJohann /* Per MB activity measurement */ 6501b362b15af34006e6a11974088a46d42b903418eJohann unsigned int activity_avg; 6511b362b15af34006e6a11974088a46d42b903418eJohann unsigned int * mb_activity_map; 652f71323e297a928af368937089d3ed71239786f86Andreas Huber 6531b362b15af34006e6a11974088a46d42b903418eJohann /* Record of which MBs still refer to last golden frame either 6541b362b15af34006e6a11974088a46d42b903418eJohann * directly or through 0,0 6551b362b15af34006e6a11974088a46d42b903418eJohann */ 6561b362b15af34006e6a11974088a46d42b903418eJohann unsigned char *gf_active_flags; 657f71323e297a928af368937089d3ed71239786f86Andreas Huber int gf_active_count; 658f71323e297a928af368937089d3ed71239786f86Andreas Huber 6591b362b15af34006e6a11974088a46d42b903418eJohann int output_partition; 6601b362b15af34006e6a11974088a46d42b903418eJohann 6611b362b15af34006e6a11974088a46d42b903418eJohann /* Store last frame's MV info for next frame MV prediction */ 66279f15823c34ae1e423108295e416213200bb280fAndreas Huber int_mv *lfmv; 66379f15823c34ae1e423108295e416213200bb280fAndreas Huber int *lf_ref_frame_sign_bias; 66479f15823c34ae1e423108295e416213200bb280fAndreas Huber int *lf_ref_frame; 665f71323e297a928af368937089d3ed71239786f86Andreas Huber 6661b362b15af34006e6a11974088a46d42b903418eJohann /* force next frame to intra when kf_auto says so */ 6671b362b15af34006e6a11974088a46d42b903418eJohann int force_next_frame_intra; 6681b362b15af34006e6a11974088a46d42b903418eJohann 6691b362b15af34006e6a11974088a46d42b903418eJohann int droppable; 6701b362b15af34006e6a11974088a46d42b903418eJohann 6711b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_TEMPORAL_DENOISING 6721b362b15af34006e6a11974088a46d42b903418eJohann VP8_DENOISER denoiser; 67379f15823c34ae1e423108295e416213200bb280fAndreas Huber#endif 67490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6751b362b15af34006e6a11974088a46d42b903418eJohann /* Coding layer state variables */ 6761b362b15af34006e6a11974088a46d42b903418eJohann unsigned int current_layer; 6771b362b15af34006e6a11974088a46d42b903418eJohann LAYER_CONTEXT layer_context[VPX_TS_MAX_LAYERS]; 6781b362b15af34006e6a11974088a46d42b903418eJohann 6791b362b15af34006e6a11974088a46d42b903418eJohann int64_t frames_in_layer[VPX_TS_MAX_LAYERS]; 6801b362b15af34006e6a11974088a46d42b903418eJohann int64_t bytes_in_layer[VPX_TS_MAX_LAYERS]; 6811b362b15af34006e6a11974088a46d42b903418eJohann double sum_psnr[VPX_TS_MAX_LAYERS]; 6821b362b15af34006e6a11974088a46d42b903418eJohann double sum_psnr_p[VPX_TS_MAX_LAYERS]; 6831b362b15af34006e6a11974088a46d42b903418eJohann double total_error2[VPX_TS_MAX_LAYERS]; 6841b362b15af34006e6a11974088a46d42b903418eJohann double total_error2_p[VPX_TS_MAX_LAYERS]; 6851b362b15af34006e6a11974088a46d42b903418eJohann double sum_ssim[VPX_TS_MAX_LAYERS]; 6861b362b15af34006e6a11974088a46d42b903418eJohann double sum_weights[VPX_TS_MAX_LAYERS]; 6871b362b15af34006e6a11974088a46d42b903418eJohann 6881b362b15af34006e6a11974088a46d42b903418eJohann double total_ssimg_y_in_layer[VPX_TS_MAX_LAYERS]; 6891b362b15af34006e6a11974088a46d42b903418eJohann double total_ssimg_u_in_layer[VPX_TS_MAX_LAYERS]; 6901b362b15af34006e6a11974088a46d42b903418eJohann double total_ssimg_v_in_layer[VPX_TS_MAX_LAYERS]; 6911b362b15af34006e6a11974088a46d42b903418eJohann double total_ssimg_all_in_layer[VPX_TS_MAX_LAYERS]; 6921b362b15af34006e6a11974088a46d42b903418eJohann 6931b362b15af34006e6a11974088a46d42b903418eJohann#if CONFIG_MULTI_RES_ENCODING 6941b362b15af34006e6a11974088a46d42b903418eJohann /* Number of MBs per row at lower-resolution level */ 6951b362b15af34006e6a11974088a46d42b903418eJohann int mr_low_res_mb_cols; 6961b362b15af34006e6a11974088a46d42b903418eJohann /* Indicate if lower-res mv info is available */ 6971b362b15af34006e6a11974088a46d42b903418eJohann unsigned char mr_low_res_mv_avail; 6981b362b15af34006e6a11974088a46d42b903418eJohann /* The frame number of each reference frames */ 6991b362b15af34006e6a11974088a46d42b903418eJohann unsigned int current_ref_frames[MAX_REF_FRAMES]; 7001b362b15af34006e6a11974088a46d42b903418eJohann#endif 70190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7021b362b15af34006e6a11974088a46d42b903418eJohann struct rd_costs_struct 7031b362b15af34006e6a11974088a46d42b903418eJohann { 7041b362b15af34006e6a11974088a46d42b903418eJohann int mvcosts[2][MVvals+1]; 7051b362b15af34006e6a11974088a46d42b903418eJohann int mvsadcosts[2][MVfpvals+1]; 7061b362b15af34006e6a11974088a46d42b903418eJohann int mbmode_cost[2][MB_MODE_COUNT]; 7071b362b15af34006e6a11974088a46d42b903418eJohann int intra_uv_mode_cost[2][MB_MODE_COUNT]; 7081b362b15af34006e6a11974088a46d42b903418eJohann int bmode_costs[10][10][10]; 7091b362b15af34006e6a11974088a46d42b903418eJohann int inter_bmode_costs[B_MODE_COUNT]; 7101b362b15af34006e6a11974088a46d42b903418eJohann int token_costs[BLOCK_TYPES][COEF_BANDS] 7111b362b15af34006e6a11974088a46d42b903418eJohann [PREV_COEF_CONTEXTS][MAX_ENTROPY_TOKENS]; 7121b362b15af34006e6a11974088a46d42b903418eJohann } rd_costs; 7131b362b15af34006e6a11974088a46d42b903418eJohann} VP8_COMP; 71490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7151b362b15af34006e6a11974088a46d42b903418eJohannvoid control_data_rate(VP8_COMP *cpi); 71690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7171b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest, unsigned char *dest_end, unsigned long *size); 71879f15823c34ae1e423108295e416213200bb280fAndreas Huber 71990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberint rd_cost_intra_mb(MACROBLOCKD *x); 72090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7211b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_tokenize_mb(VP8_COMP *, MACROBLOCK *, TOKENEXTRA **); 72290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 72390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_set_speed_features(VP8_COMP *cpi); 72490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 72590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#if CONFIG_DEBUG 72690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define CHECK_MEM_ERROR(lval,expr) do {\ 72790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lval = (expr); \ 72890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if(!lval) \ 72990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR,\ 73090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber "Failed to allocate "#lval" at %s:%d", \ 73190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber __FILE__,__LINE__);\ 73290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } while(0) 73390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#else 73490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#define CHECK_MEM_ERROR(lval,expr) do {\ 73590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lval = (expr); \ 73690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber if(!lval) \ 73790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR,\ 73890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber "Failed to allocate "#lval);\ 73990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber } while(0) 74090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 74190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#endif 742