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_COMMON_ONYX_H_ 138b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#define VP8_COMMON_ONYX_H_ 14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifdef __cplusplus 16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgextern "C" 17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 20167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#include "vpx_config.h" 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vpx/internal/vpx_codec_internal.h" 22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vpx/vp8cx.h" 23167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#include "vpx/vpx_encoder.h" 24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vpx_scale/yv12config.h" 25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "ppflags.h" 26167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 27167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org struct VP8_COMP; 28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org /* Create/destroy static data structures. */ 30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org typedef enum 32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org NORMAL = 0, 34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org FOURFIVE = 1, 35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org THREEFIVE = 2, 36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ONETWO = 3 37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } VPX_SCALING; 39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org typedef enum 41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 42dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org USAGE_LOCAL_FILE_PLAYBACK = 0x0, 43dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org USAGE_STREAM_FROM_SERVER = 0x1, 44f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org USAGE_CONSTRAINED_QUALITY = 0x2, 45f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org USAGE_CONSTANT_QUALITY = 0x3 46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } END_USAGE; 47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org typedef enum 50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MODE_REALTIME = 0x0, 52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MODE_GOODQUALITY = 0x1, 53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MODE_BESTQUALITY = 0x2, 54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MODE_FIRSTPASS = 0x3, 55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MODE_SECONDPASS = 0x4, 565c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org MODE_SECONDPASS_BEST = 0x5 57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } MODE; 58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org typedef enum 60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org FRAMEFLAGS_KEY = 1, 62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org FRAMEFLAGS_GOLDEN = 2, 635c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org FRAMEFLAGS_ALTREF = 4 64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } FRAMETYPE_FLAGS; 65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <assert.h> 685c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org static void Scale2Ratio(int mode, int *hr, int *hs) 69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org switch (mode) 71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org case NORMAL: 73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *hr = 1; 74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *hs = 1; 75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org case FOURFIVE: 77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *hr = 4; 78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *hs = 5; 79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org case THREEFIVE: 81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *hr = 3; 82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *hs = 5; 83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org case ONETWO: 85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *hr = 1; 86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *hs = 2; 87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org default: 89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *hr = 1; 90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org *hs = 1; 91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org assert(0); 92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org break; 93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org typedef struct 97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 98ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 4 versions of bitstream defined: 99ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * 0 best quality/slowest decode, 3 lowest quality/fastest decode 100ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org */ 101ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int Version; 102ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int Width; 103ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int Height; 104167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org struct vpx_rational timebase; 105ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int target_bandwidth; /* kilobits per second */ 106ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 107ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org /* Parameter used for applying denoiser. 108ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org * For temporal denoiser: noise_sensitivity = 0 means off, 109ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org * noise_sensitivity = 1 means temporal denoiser on for Y channel only, 110ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org * noise_sensitivity = 2 means temporal denoiser on for all channels. 11141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org * noise_sensitivity = 3 means aggressive denoising mode. 11241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org * noise_sensitivity >= 4 means adaptive denoising mode. 11341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org * Temporal denoiser is enabled via the configuration option: 114ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org * CONFIG_TEMPORAL_DENOISING. 115ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org * For spatial denoiser: noise_sensitivity controls the amount of 116ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org * pre-processing blur: noise_sensitivity = 0 means off. 117ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org * Spatial denoiser invoked under !CONFIG_TEMPORAL_DENOISING. 118ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org */ 119ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int noise_sensitivity; 120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 121ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* parameter used for sharpening output: recommendation 0: */ 122ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int Sharpness; 123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int cpu_used; 124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org unsigned int rc_max_intra_bitrate_pct; 125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 126ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* mode -> 127ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org *(0)=Realtime/Live Encoding. This mode is optimized for realtim 128ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * encoding (for example, capturing a television signal or feed 129ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * from a live camera). ( speed setting controls how fast ) 130ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org *(1)=Good Quality Fast Encoding. The encoder balances quality with 131ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * the amount of time it takes to encode the output. ( speed 132ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * setting controls how fast ) 133ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org *(2)=One Pass - Best Quality. The encoder places priority on the 134ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * quality of the output over encoding speed. The output is 135ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * compressed at the highest possible quality. This option takes 136ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * the longest amount of time to encode. ( speed setting ignored 137ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * ) 138ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org *(3)=Two Pass - First Pass. The encoder generates a file of 139ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * statistics for use in the second encoding pass. ( speed 140ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * setting controls how fast ) 141ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org *(4)=Two Pass - Second Pass. The encoder uses the statistics that 142ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * were generated in the first encoding pass to create the 143ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * compressed output. ( speed setting controls how fast ) 144ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org *(5)=Two Pass - Second Pass Best. The encoder uses the statistics 145ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * that were generated in the first encoding pass to create the 146ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * compressed output using the highest possible quality, and 147ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * taking a longer amount of time to encode.. ( speed setting 148ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * ignored ) 149ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org */ 150ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int Mode; 151ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 152ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Key Framing Operations */ 153ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int auto_key; /* automatically detect cut scenes */ 154ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int key_freq; /* maximum distance to key frame. */ 155ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 156ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* lagged compression (if allow_lag == 0 lag_in_frames is ignored) */ 157ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int allow_lag; 158ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int lag_in_frames; /* how many frames lag before we start encoding */ 159ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 160ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 161ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * DATARATE CONTROL OPTIONS 162ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org */ 163ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 164ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int end_usage; /* vbr or cbr */ 165ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 166ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* buffer targeting aggressiveness */ 167474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int under_shoot_pct; 168474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int over_shoot_pct; 169474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 170ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* buffering parameters */ 171ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int64_t starting_buffer_level; 172167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int64_t optimal_buffer_level; 173167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int64_t maximum_buffer_size; 174167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 175ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int64_t starting_buffer_level_in_ms; 176167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int64_t optimal_buffer_level_in_ms; 177167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int64_t maximum_buffer_size_in_ms; 178474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 179ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* controlling quality */ 180474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int fixed_q; 181474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int worst_allowed_q; 182474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int best_allowed_q; 183474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int cq_level; 184474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 185ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* allow internal resizing */ 186474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int allow_spatial_resampling; 187474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int resample_down_water_mark; 188474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int resample_up_water_mark; 189474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 190ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* allow internal frame rate alterations */ 191474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int allow_df; 192474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int drop_frames_water_mark; 193474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 194ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* two pass datarate control */ 195ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int two_pass_vbrbias; 196474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int two_pass_vbrmin_section; 197474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int two_pass_vbrmax_section; 198474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 199ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 200ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * END DATARATE CONTROL OPTIONS 201ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org */ 202474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 203ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* these parameters aren't to be used in final build don't use!!! */ 204474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int play_alternate; 205474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int alt_freq; 206474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int alt_q; 207474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int key_q; 208474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int gold_q; 209474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 210474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 211ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int multi_threaded; /* how many threads to run the encoder on */ 212ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int token_partitions; /* how many token partitions to create */ 213ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 214ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* early breakout threshold: for video conf recommend 800 */ 215ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int encode_breakout; 216474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 217ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Bitfield defining the error resiliency features to enable. 218ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * Can provide decodable frames after losses in previous 219ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org * frames and decodable partitions after losses in the same frame. 220ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org */ 221ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int error_resilient_mode; 222474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 223474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int arnr_max_frames; 224ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int arnr_strength; 225ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int arnr_type; 226474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 227d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org vpx_fixed_buf_t two_pass_stats_in; 228474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org struct vpx_codec_pkt_list *output_pkt_list; 229474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 230474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org vp8e_tuning tuning; 231167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 232ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* Temporal scaling parameters */ 233167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned int number_of_layers; 2345c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org unsigned int target_bitrate[VPX_TS_MAX_PERIODICITY]; 2355c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org unsigned int rate_decimator[VPX_TS_MAX_PERIODICITY]; 236167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned int periodicity; 2375c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org unsigned int layer_id[VPX_TS_MAX_PERIODICITY]; 238167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 239167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#if CONFIG_MULTI_RES_ENCODING 240167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org /* Number of total resolutions encoded */ 241167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned int mr_total_resolutions; 242167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 243167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org /* Current encoder ID */ 244167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned int mr_encoder_id; 245167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 246167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org /* Down-sampling factor */ 247167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org vpx_rational_t mr_down_sampling_factor; 248167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 249167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org /* Memory location to store low-resolution encoder's mode info */ 250167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org void* mr_low_res_mode_info; 251167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif 252474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } VP8_CONFIG; 253474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 254474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 255474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org void vp8_initialize(); 256474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 257167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org struct VP8_COMP* vp8_create_compressor(VP8_CONFIG *oxcf); 258167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org void vp8_remove_compressor(struct VP8_COMP* *comp); 259474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 260167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org void vp8_init_config(struct VP8_COMP* onyx, VP8_CONFIG *oxcf); 261167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org void vp8_change_config(struct VP8_COMP* onyx, VP8_CONFIG *oxcf); 262474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 263167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int vp8_receive_raw_frame(struct VP8_COMP* comp, unsigned int frame_flags, YV12_BUFFER_CONFIG *sd, int64_t time_stamp, int64_t end_time_stamp); 264167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int vp8_get_compressed_data(struct VP8_COMP* comp, unsigned int *frame_flags, unsigned long *size, unsigned char *dest, unsigned char *dest_end, int64_t *time_stamp, int64_t *time_end, int flush); 265167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int vp8_get_preview_raw_frame(struct VP8_COMP* comp, YV12_BUFFER_CONFIG *dest, vp8_ppflags_t *flags); 266167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 267167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int vp8_use_as_reference(struct VP8_COMP* comp, int ref_frame_flags); 268167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int vp8_update_reference(struct VP8_COMP* comp, int ref_frame_flags); 269ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int vp8_get_reference(struct VP8_COMP* comp, enum vpx_ref_frame_type ref_frame_flag, YV12_BUFFER_CONFIG *sd); 270ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org int vp8_set_reference(struct VP8_COMP* comp, enum vpx_ref_frame_type ref_frame_flag, YV12_BUFFER_CONFIG *sd); 271167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int vp8_update_entropy(struct VP8_COMP* comp, int update); 272167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int vp8_set_roimap(struct VP8_COMP* comp, unsigned char *map, unsigned int rows, unsigned int cols, int delta_q[4], int delta_lf[4], unsigned int threshold[4]); 273167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int vp8_set_active_map(struct VP8_COMP* comp, unsigned char *map, unsigned int rows, unsigned int cols); 274167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int vp8_set_internal_size(struct VP8_COMP* comp, VPX_SCALING horiz_mode, VPX_SCALING vert_mode); 275167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int vp8_get_quantizer(struct VP8_COMP* c); 276474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 277474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifdef __cplusplus 278474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 279474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 280474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 2818b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#endif // VP8_COMMON_ONYX_H_ 282