1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* 2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Use of this source code is governed by a BSD-style license 5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * that can be found in the LICENSE file in the root of the source 6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * tree. An additional intellectual property rights grant can be found 7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * in the file PATENTS. All contributing project authors may 8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * be found in the AUTHORS file in the root of the source tree. 9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */ 10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 128b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#ifndef VP8_ENCODER_ONYX_INT_H_ 138b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#define VP8_ENCODER_ONYX_INT_H_ 14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <stdio.h> 16167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#include "vpx_config.h" 17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vp8/common/onyx.h" 18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "treewriter.h" 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "tokenize.h" 20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vp8/common/onyxc_int.h" 215c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#include "vp8/common/variance.h" 22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "encodemb.h" 23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "quantize.h" 24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vp8/common/entropy.h" 25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vp8/common/threading.h" 26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vpx_ports/mem.h" 27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vpx/internal/vpx_codec_internal.h" 28ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org#include "vpx/vp8.h" 29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "mcomp.h" 30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vp8/common/findnearmv.h" 31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "lookahead.h" 325c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#if CONFIG_TEMPORAL_DENOISING 335c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#include "vp8/encoder/denoising.h" 345c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#endif 35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 36dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#ifdef __cplusplus 37dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.orgextern "C" { 38dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#endif 39dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org 40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define MIN_GF_INTERVAL 4 41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define DEFAULT_GF_INTERVAL 7 42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define KEY_FRAME_CONTEXT 5 44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define MAX_LAG_BUFFERS (CONFIG_REALTIME_ONLY? 1 : 25) 46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define AF_THRESH 25 48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define AF_THRESH2 100 49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define ARF_DECAY_THRESH 12 50d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org 51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define MIN_THRESHMULT 32 53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define MAX_THRESHMULT 512 54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define GF_ZEROMV_ZBIN_BOOST 12 56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define LF_ZEROMV_ZBIN_BOOST 6 57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define MV_ZBIN_BOOST 4 58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define ZBIN_OQ_MAX 192 59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if !(CONFIG_REALTIME_ONLY) 61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define VP8_TEMPORAL_ALT_REF 1 62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef struct 65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int kf_indicated; 67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int frames_since_key; 68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int frames_since_golden; 69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int filter_level; 70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int frames_till_gf_update_due; 71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int recent_ref_frame_usage[MAX_REF_FRAMES]; 72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MV_CONTEXT mvc[2]; 74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int mvcosts[2][MVvals+1]; 75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifdef MODE_STATS 77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int y_modes[5]; 78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int uv_modes[4]; 79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int b_modes[10]; 80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int inter_y_modes[10]; 81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int inter_uv_modes[4]; 82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int inter_b_modes[10]; 83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vp8_prob ymode_prob[4], uv_mode_prob[3]; /* interframe intra mode probs */ 86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vp8_prob kf_ymode_prob[4], kf_uv_mode_prob[3]; /* keyframe "" */ 87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int ymode_count[5], uv_mode_count[4]; /* intra MB type cts this frame */ 89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int count_mb_ref_frame_usage[MAX_REF_FRAMES]; 91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int this_frame_percent_intra; 93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int last_frame_percent_intra; 94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} CODING_CONTEXT; 97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef struct 99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double frame; 101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double intra_error; 102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double coded_error; 103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double ssim_weighted_pred_err; 104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double pcnt_inter; 105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double pcnt_motion; 106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double pcnt_second_ref; 107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double pcnt_neutral; 108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double MVr; 109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double mvr_abs; 110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double MVc; 111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double mvc_abs; 112474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double MVrv; 113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double MVcv; 114474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double mv_in_out_count; 115167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org double new_mv_count; 116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double duration; 117474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double count; 118474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 119474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgFIRSTPASS_STATS; 120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef struct 122474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int frames_so_far; 124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double frame_intra_error; 125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double frame_coded_error; 126474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double frame_pcnt_inter; 127474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double frame_pcnt_motion; 128474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double frame_mvr; 129474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double frame_mvr_abs; 130474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double frame_mvc; 131474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double frame_mvc_abs; 132474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 133474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} ONEPASS_FRAMESTATS; 134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 135474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef enum 137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 138167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_ZERO1 = 0, 139474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org THR_DC = 1, 140474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 141167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_NEAREST1 = 2, 142167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_NEAR1 = 3, 143474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 144167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_ZERO2 = 4, 145167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_NEAREST2 = 5, 146474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 147167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_ZERO3 = 6, 148167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_NEAREST3 = 7, 149474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 150167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_NEAR2 = 8, 151167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_NEAR3 = 9, 152474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 153474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org THR_V_PRED = 10, 154474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org THR_H_PRED = 11, 155474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org THR_TM = 12, 156474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 157167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_NEW1 = 13, 158167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_NEW2 = 14, 159167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_NEW3 = 15, 160474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 161167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_SPLIT1 = 16, 162167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_SPLIT2 = 17, 163167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org THR_SPLIT3 = 18, 164474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1655c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org THR_B_PRED = 19 166474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 167474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgTHR_MODES; 168474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 169474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef enum 170474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 171474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DIAMOND = 0, 172474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org NSTEP = 1, 173474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org HEX = 2 174474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} SEARCH_METHODS; 175474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 176474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef struct 177474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 178474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int RD; 179474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SEARCH_METHODS search_method; 180474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int improved_quant; 181474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int improved_dct; 182474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int auto_filter; 183474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int recode_loop; 184474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int iterative_sub_pixel; 185474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int half_pixel_search; 186474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int quarter_pixel_search; 187474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int thresh_mult[MAX_MODES]; 188474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int max_step_search_steps; 189474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int first_step; 190474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int optimize_coefficients; 191474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 192474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int use_fastquant_for_pick; 193474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int no_skip_block4x4_search; 194474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int improved_mv_pred; 195474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 196474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} SPEED_FEATURES; 197474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 198474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef struct 199474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 200474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MACROBLOCK mb; 201474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int segment_counts[MAX_MB_SEGMENTS]; 202474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int totalrate; 203474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} MB_ROW_COMP; 204474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 205474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef struct 206474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 207474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org TOKENEXTRA *start; 208474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org TOKENEXTRA *stop; 209474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} TOKENLIST; 210474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 211474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef struct 212474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 213474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int ithread; 214474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org void *ptr1; 215474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org void *ptr2; 216474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} ENCODETHREAD_DATA; 217474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef struct 218474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 219474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int ithread; 220474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org void *ptr1; 221474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} LPFTHREAD_DATA; 222474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 223474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgenum 224474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 225474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org BLOCK_16X8, 226474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org BLOCK_8X16, 227474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org BLOCK_8X8, 228474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org BLOCK_4X4, 229474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org BLOCK_16X16, 230474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org BLOCK_MAX_SEGMENTS 231474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}; 232474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 233167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgtypedef struct 234167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{ 235ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Layer configuration */ 23647265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org double framerate; 237167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int target_bandwidth; 238167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 239ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Layer specific coding parameters */ 240ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int64_t starting_buffer_level; 241ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int64_t optimal_buffer_level; 242ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int64_t maximum_buffer_size; 243ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int64_t starting_buffer_level_in_ms; 244ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int64_t optimal_buffer_level_in_ms; 245ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int64_t maximum_buffer_size_in_ms; 246167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 247167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int avg_frame_size_for_layer; 248167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 249ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int64_t buffer_level; 250ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int64_t bits_off_target; 251167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 252167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int64_t total_actual_bits; 253167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int total_target_vs_actual; 254167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 255167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int worst_quality; 256167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int active_worst_quality; 257167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int best_quality; 258167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int active_best_quality; 259167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 260167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int ni_av_qi; 261167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int ni_tot_qi; 262167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int ni_frames; 263167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int avg_frame_qindex; 264167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 265167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org double rate_correction_factor; 266167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org double key_frame_rate_correction_factor; 267167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org double gf_rate_correction_factor; 268167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 269167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int zbin_over_quant; 270167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 271167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int inter_frame_target; 272167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int64_t total_byte_count; 273167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 274167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int filter_level; 275167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 276167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int last_frame_percent_intra; 277167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 278167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int count_mb_ref_frame_usage[MAX_REF_FRAMES]; 279167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 280167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org} LAYER_CONTEXT; 281167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 282474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef struct VP8_COMP 283474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 284474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 285474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, Y1quant[QINDEX_RANGE][16]); 2864b95526e5c4eb4fecde1cd642cf991a82c51b9f2johannkoenig@chromium.org DECLARE_ALIGNED(16, short, Y1quant_shift[QINDEX_RANGE][16]); 287474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, Y1zbin[QINDEX_RANGE][16]); 288474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, Y1round[QINDEX_RANGE][16]); 289474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 290474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, Y2quant[QINDEX_RANGE][16]); 2914b95526e5c4eb4fecde1cd642cf991a82c51b9f2johannkoenig@chromium.org DECLARE_ALIGNED(16, short, Y2quant_shift[QINDEX_RANGE][16]); 292474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, Y2zbin[QINDEX_RANGE][16]); 293474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, Y2round[QINDEX_RANGE][16]); 294474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 295474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, UVquant[QINDEX_RANGE][16]); 2964b95526e5c4eb4fecde1cd642cf991a82c51b9f2johannkoenig@chromium.org DECLARE_ALIGNED(16, short, UVquant_shift[QINDEX_RANGE][16]); 297474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, UVzbin[QINDEX_RANGE][16]); 298474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, UVround[QINDEX_RANGE][16]); 299474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 300474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, zrun_zbin_boost_y1[QINDEX_RANGE][16]); 301474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, zrun_zbin_boost_y2[QINDEX_RANGE][16]); 302474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, zrun_zbin_boost_uv[QINDEX_RANGE][16]); 303474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, Y1quant_fast[QINDEX_RANGE][16]); 304474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, Y2quant_fast[QINDEX_RANGE][16]); 305474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org DECLARE_ALIGNED(16, short, UVquant_fast[QINDEX_RANGE][16]); 306474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 307474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 308474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MACROBLOCK mb; 309474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org VP8_COMMON common; 310ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_writer bc[9]; /* one boolcoder for each partition */ 311474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 312474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org VP8_CONFIG oxcf; 313474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 314474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org struct lookahead_ctx *lookahead; 315474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org struct lookahead_entry *source; 316474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org struct lookahead_entry *alt_ref_source; 3175c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org struct lookahead_entry *last_source; 318474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 319474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org YV12_BUFFER_CONFIG *Source; 320474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org YV12_BUFFER_CONFIG *un_scaled_source; 321474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org YV12_BUFFER_CONFIG scaled_source; 3225c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org YV12_BUFFER_CONFIG *last_frame_unscaled_source; 323474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 32447265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org unsigned int frames_till_alt_ref_frame; 325ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* frame in src_buffers has been identified to be encoded as an alt ref */ 326ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int source_alt_ref_pending; 327ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* an alt ref frame has been encoded and is usable */ 328ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int source_alt_ref_active; 329ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* source of frame to encode is an exact copy of an alt ref frame */ 330ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int is_src_frame_alt_ref; 331474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 332ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* golden frame same as last frame ( short circuit gold searches) */ 333ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int gold_is_last; 334ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Alt reference frame same as last ( short circuit altref search) */ 335ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int alt_is_last; 336ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* don't do both alt and gold search ( just do gold). */ 337ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int gold_is_alt; 338474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 339167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org YV12_BUFFER_CONFIG pick_lf_lvl_frame; 340474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 341474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org TOKENEXTRA *tok; 342474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int tok_count; 343474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 344474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 345474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int frames_since_key; 346474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int key_frame_frequency; 347474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int this_key_frame_forced; 348474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int next_key_frame_forced; 349474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 350ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Ambient reconstruction err target for force key frames */ 351474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int ambient_err; 352474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 353474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int mode_check_freq[MAX_MODES]; 354474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 355474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int rd_baseline_thresh[MAX_MODES]; 356474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 357474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int RDMULT; 358474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int RDDIV ; 359474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 360474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org CODING_CONTEXT coding_context; 361474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 362ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Rate targetting variables */ 363474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int64_t last_prediction_error; 364474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int64_t last_intra_error; 365474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 366474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int this_frame_target; 367474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int projected_frame_size; 368ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int last_q[2]; /* Separate values for Intra/Inter */ 369474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 370474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double rate_correction_factor; 371474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double key_frame_rate_correction_factor; 372474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double gf_rate_correction_factor; 373474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 37447265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org unsigned int frames_since_golden; 375ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Count down till next GF */ 376ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int frames_till_gf_update_due; 377ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 378ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* GF interval chosen when we coded the last GF */ 379ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int current_gf_interval; 380474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 381ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Total bits overspent becasue of GF boost (cumulative) */ 382ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int gf_overspend_bits; 383474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 384ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Used in the few frames following a GF to recover the extra bits 385ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * spent in that GF 386ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org */ 387ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int non_gf_bitrate_adjustment; 388474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 389ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Extra bits spent on key frames that need to be recovered */ 390ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int kf_overspend_bits; 391ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 392ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Current number of bit s to try and recover on each inter frame. */ 393ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int kf_bitrate_adjustment; 394474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int max_gf_interval; 395474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int baseline_gf_interval; 396ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int active_arnr_frames; 397474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 398474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int64_t key_frame_count; 399474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int prior_key_frame_distance[KEY_FRAME_CONTEXT]; 400ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Current section per frame bandwidth target */ 401ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int per_frame_bandwidth; 402ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Average frame size target for clip */ 403ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int av_per_frame_bandwidth; 404ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Minimum allocation that should be used for any frame */ 405ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int min_frame_bandwidth; 406474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int inter_frame_target; 40747265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org double output_framerate; 408474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int64_t last_time_stamp_seen; 409474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int64_t last_end_time_stamp_seen; 410474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int64_t first_time_stamp_ever; 411474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 412474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int ni_av_qi; 413474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int ni_tot_qi; 414474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int ni_frames; 415474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int avg_frame_qindex; 416474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 417474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int64_t total_byte_count; 418474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 419474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int buffered_mode; 420474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 42147265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org double framerate; 42247265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org double ref_framerate; 423167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int64_t buffer_level; 424ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int64_t bits_off_target; 425474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 426474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int rolling_target_bits; 427474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int rolling_actual_bits; 428474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 429474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int long_rolling_target_bits; 430474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int long_rolling_actual_bits; 431474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 432474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int64_t total_actual_bits; 433ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int total_target_vs_actual; /* debug stats */ 434474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 435474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int worst_quality; 436474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int active_worst_quality; 437474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int best_quality; 438474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int active_best_quality; 439474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 440474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int cq_target_quality; 441474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 442ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int drop_frames_allowed; /* Are we permitted to drop frames? */ 443ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int drop_frame; /* Drop this frame? */ 444474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 445474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vp8_prob frame_coef_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES]; 4465c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org char update_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES]; 4475c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 448474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int frame_branch_ct [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [ENTROPY_NODES][2]; 449474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 450474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int gfu_boost; 451474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int kf_boost; 452474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int last_boost; 453474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 454474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int target_bandwidth; 455474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org struct vpx_codec_pkt_list *output_pkt_list; 456474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 457474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if 0 458ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Experimental code for lagged and one pass */ 459474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ONEPASS_FRAMESTATS one_pass_frame_stats[MAX_LAG_BUFFERS]; 460474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int one_pass_frame_index; 461474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 462474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 463474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int decimation_factor; 464474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int decimation_count; 465474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 466ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* for real time encoding */ 467ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int avg_encode_time; /* microsecond */ 468ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int avg_pick_mode_time; /* microsecond */ 469474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int Speed; 470474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int compressor_speed; 471474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 472474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int auto_gold; 473474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int auto_adjust_gold_quantizer; 474474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int auto_worst_q; 475474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int cpu_used; 476474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int pass; 477474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 478474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 479474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int prob_intra_coded; 480474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int prob_last_coded; 481474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int prob_gf_coded; 482474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int prob_skip_false; 483474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int last_skip_false_probs[3]; 484474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int last_skip_probs_q[3]; 485474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int recent_ref_frame_usage[MAX_REF_FRAMES]; 486474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 487474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int this_frame_percent_intra; 488474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int last_frame_percent_intra; 489474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 490474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int ref_frame_flags; 491474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 492474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SPEED_FEATURES sf; 493474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 494ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Count ZEROMV on all reference frames. */ 495ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int zeromv_count; 496ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int lf_zeromv_pct; 497474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 498474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char *segmentation_map; 499ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org signed char segment_feature_data[MB_LVL_MAX][MAX_MB_SEGMENTS]; 500ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int segment_encode_breakout[MAX_MB_SEGMENTS]; 501474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 502474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char *active_map; 503474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int active_map_enabled; 504ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 505ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Video conferencing cyclic refresh mode flags. This is a mode 506ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * designed to clean up the background over time in live encoding 507ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * scenarious. It uses segmentation. 508ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org */ 509474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int cyclic_refresh_mode_enabled; 510474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int cyclic_refresh_mode_max_mbs_perframe; 511474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int cyclic_refresh_mode_index; 512474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int cyclic_refresh_q; 513474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org signed char *cyclic_refresh_map; 51441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org // Count on how many (consecutive) times a macroblock uses ZER0MV_LAST. 51541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org unsigned char *consec_zero_last; 516474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 51710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org // Frame counter for the temporal pattern. Counter is rest when the temporal 51810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org // layers are changed dynamically (run-time change). 51910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org unsigned int temporal_pattern_counter; 52010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org 521474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MULTITHREAD 522ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* multithread data */ 523474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int * mt_current_mb_col; 524474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int mt_sync_range; 525474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int b_multi_threaded; 526474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int encoding_thread_count; 5275c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org int b_lpf_running; 528474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 529474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pthread_t *h_encoding_thread; 530474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pthread_t h_filter_thread; 531474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 532474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MB_ROW_COMP *mb_row_ei; 533474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ENCODETHREAD_DATA *en_thread_data; 534474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org LPFTHREAD_DATA lpf_thread_data; 535474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 536ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* events */ 537474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sem_t *h_event_start_encoding; 538474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sem_t h_event_end_encoding; 539474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sem_t h_event_start_lpf; 540474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sem_t h_event_end_lpf; 541474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 542474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 543474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org TOKENLIST *tplist; 544474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int partition_sz[MAX_PARTITIONS]; 5455c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org unsigned char *partition_d[MAX_PARTITIONS]; 5465c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org unsigned char *partition_d_end[MAX_PARTITIONS]; 547474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 548474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 549474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org fractional_mv_step_fp *find_fractional_mv_step; 550474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vp8_full_search_fn_t full_search_sad; 551474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vp8_refining_search_fn_t refining_search_sad; 552474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vp8_diamond_search_fn_t diamond_search_sad; 553474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vp8_variance_fn_ptr_t fn_ptr[BLOCK_MAX_SEGMENTS]; 554ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org uint64_t time_receive_data; 555ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org uint64_t time_compress_data; 556ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org uint64_t time_pick_lpf; 557ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org uint64_t time_encode_mb_row; 558474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 559474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int base_skip_false_prob[128]; 560474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 561167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org FRAME_CONTEXT lfc_n; /* last frame entropy */ 562167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org FRAME_CONTEXT lfc_a; /* last alt ref entropy */ 563167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org FRAME_CONTEXT lfc_g; /* last gold ref entropy */ 564167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 565167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 566474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org struct twopass_rc 567474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 568474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int section_intra_rating; 569474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double section_max_qfactor; 570474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int next_iiratio; 571474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int this_iiratio; 572167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org FIRSTPASS_STATS total_stats; 573167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org FIRSTPASS_STATS this_frame_stats; 574474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org FIRSTPASS_STATS *stats_in, *stats_in_end, *stats_in_start; 575167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org FIRSTPASS_STATS total_left_stats; 576474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int first_pass_done; 577474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int64_t bits_left; 578474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int64_t clip_bits_total; 579474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double avg_iiratio; 580474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double modified_error_total; 581474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double modified_error_used; 582474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double modified_error_left; 583474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double kf_intra_err_min; 584474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double gf_intra_err_min; 585474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int frames_to_key; 586474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int maxq_max_limit; 587474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int maxq_min_limit; 588474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int gf_decay_rate; 589474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int static_scene_max_gf_interval; 590474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int kf_bits; 591ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Remaining error from uncoded frames in a gf group. */ 592ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int gf_group_error_left; 593ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Projected total bits available for a key frame group of frames */ 594474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int64_t kf_group_bits; 595ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Error score of frames still to be coded in kf group */ 596474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int64_t kf_group_error_left; 597ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Projected Bits available for a group including 1 GF or ARF */ 5984b95526e5c4eb4fecde1cd642cf991a82c51b9f2johannkoenig@chromium.org int64_t gf_group_bits; 599ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Bits for the golden frame or ARF */ 600ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int gf_bits; 601167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int alt_extra_bits; 602474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double est_max_qcorrection_factor; 603474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } twopass; 604474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 605474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if VP8_TEMPORAL_ALT_REF 606474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org YV12_BUFFER_CONFIG alt_ref_buffer; 607474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org YV12_BUFFER_CONFIG *frames[MAX_LAG_BUFFERS]; 608474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int fixed_divide[512]; 609474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 610474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 611474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_INTERNAL_STATS 612474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int count; 613474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double total_y; 614474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double total_u; 615474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double total_v; 616474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double total ; 617474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double total_sq_error; 618474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double totalp_y; 619474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double totalp_u; 620474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double totalp_v; 621474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double totalp; 622474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double total_sq_error2; 623474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int bytes; 624474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double summed_quality; 625474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double summed_weights; 626474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int tot_recode_hits; 627474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 628474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 629474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double total_ssimg_y; 630474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double total_ssimg_u; 631474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double total_ssimg_v; 632474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org double total_ssimg_all; 633474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 634474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int b_calculate_ssimg; 635474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 636474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int b_calculate_psnr; 637474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 638ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Per MB activity measurement */ 639474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int activity_avg; 640474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int * mb_activity_map; 641474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 642ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Record of which MBs still refer to last golden frame either 643ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * directly or through 0,0 644ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org */ 645474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned char *gf_active_flags; 646474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int gf_active_count; 647474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 648474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int output_partition; 649474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 650ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Store last frame's MV info for next frame MV prediction */ 651474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int_mv *lfmv; 652474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int *lf_ref_frame_sign_bias; 653474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int *lf_ref_frame; 654474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 655ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* force next frame to intra when kf_auto says so */ 656ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int force_next_frame_intra; 657167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 658474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int droppable; 659167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 6605c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#if CONFIG_TEMPORAL_DENOISING 6615c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org VP8_DENOISER denoiser; 6625c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#endif 6635c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 664ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Coding layer state variables */ 665167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned int current_layer; 6665c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org LAYER_CONTEXT layer_context[VPX_TS_MAX_LAYERS]; 6675c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 6685c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org int64_t frames_in_layer[VPX_TS_MAX_LAYERS]; 6695c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org int64_t bytes_in_layer[VPX_TS_MAX_LAYERS]; 6705c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org double sum_psnr[VPX_TS_MAX_LAYERS]; 6715c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org double sum_psnr_p[VPX_TS_MAX_LAYERS]; 6725c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org double total_error2[VPX_TS_MAX_LAYERS]; 6735c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org double total_error2_p[VPX_TS_MAX_LAYERS]; 6745c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org double sum_ssim[VPX_TS_MAX_LAYERS]; 6755c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org double sum_weights[VPX_TS_MAX_LAYERS]; 6765c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 6775c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org double total_ssimg_y_in_layer[VPX_TS_MAX_LAYERS]; 6785c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org double total_ssimg_u_in_layer[VPX_TS_MAX_LAYERS]; 6795c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org double total_ssimg_v_in_layer[VPX_TS_MAX_LAYERS]; 6805c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org double total_ssimg_all_in_layer[VPX_TS_MAX_LAYERS]; 681167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 682167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#if CONFIG_MULTI_RES_ENCODING 683167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org /* Number of MBs per row at lower-resolution level */ 684167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int mr_low_res_mb_cols; 685ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Indicate if lower-res mv info is available */ 686ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char mr_low_res_mv_avail; 68741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#endif 688ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* The frame number of each reference frames */ 689ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int current_ref_frames[MAX_REF_FRAMES]; 69041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org MV_REFERENCE_FRAME closest_reference_frame; 691167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 692ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org struct rd_costs_struct 693ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 694ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int mvcosts[2][MVvals+1]; 695ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int mvsadcosts[2][MVfpvals+1]; 696ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int mbmode_cost[2][MB_MODE_COUNT]; 697ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int intra_uv_mode_cost[2][MB_MODE_COUNT]; 698ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int bmode_costs[10][10][10]; 699ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int inter_bmode_costs[B_MODE_COUNT]; 700ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int token_costs[BLOCK_TYPES][COEF_BANDS] 701ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org [PREV_COEF_CONTEXTS][MAX_ENTROPY_TOKENS]; 702ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } rd_costs; 703474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} VP8_COMP; 704474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 705d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.orgvoid vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest, 706d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org unsigned char *dest_end, unsigned long *size); 707474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 708d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.orgvoid vp8_tokenize_mb(VP8_COMP *, MACROBLOCK *, TOKENEXTRA **); 709474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 710474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_set_speed_features(VP8_COMP *cpi); 711474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 712474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_DEBUG 713474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define CHECK_MEM_ERROR(lval,expr) do {\ 714474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lval = (expr); \ 715474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org if(!lval) \ 716474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR,\ 717474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org "Failed to allocate "#lval" at %s:%d", \ 718474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org __FILE__,__LINE__);\ 719474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } while(0) 720474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 721474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define CHECK_MEM_ERROR(lval,expr) do {\ 722474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org lval = (expr); \ 723474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org if(!lval) \ 724474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR,\ 725474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org "Failed to allocate "#lval);\ 726474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } while(0) 727474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 728dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#ifdef __cplusplus 729dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org} // extern "C" 730dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#endif 731dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org 7328b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#endif // VP8_ENCODER_ONYX_INT_H_ 733