media/libvpx/vp8/encoder/block.h

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rw-r--r--

Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 /*
     2  *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
     3  *
     4  *  Use of this source code is governed by a BSD-style license
     5  *  that can be found in the LICENSE file in the root of the source
     6  *  tree. An additional intellectual property rights grant can be found
     7  *  in the file PATENTS.  All contributing project authors may
     8  *  be found in the AUTHORS file in the root of the source tree.
     9  */
    12 #ifndef __INC_BLOCK_H
    13 #define __INC_BLOCK_H
    15 #include "vp8/common/onyx.h"
    16 #include "vp8/common/blockd.h"
    17 #include "vp8/common/entropymv.h"
    18 #include "vp8/common/entropy.h"
    19 #include "vpx_ports/mem.h"
    21 #define MAX_MODES 20
    22 #define MAX_ERROR_BINS 1024
    24 /* motion search site */
    25 typedef struct
    26 {
    27     MV mv;
    28     int offset;
    29 } search_site;
    31 typedef struct block
    32 {
    33     /* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */
    34     short *src_diff;
    35     short *coeff;
    37     /* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */
    38     short *quant;
    39     short *quant_fast;
    40     short *quant_shift;
    41     short *zbin;
    42     short *zrun_zbin_boost;
    43     short *round;
    45     /* Zbin Over Quant value */
    46     short zbin_extra;
    48     unsigned char **base_src;
    49     int src;
    50     int src_stride;
    51 } BLOCK;
    53 typedef struct
    54 {
    55     int count;
    56     struct
    57     {
    58         B_PREDICTION_MODE mode;
    59         int_mv mv;
    60     } bmi[16];
    61 } PARTITION_INFO;
    63 typedef struct macroblock
    64 {
    65     DECLARE_ALIGNED(16, short, src_diff[400]); /* 25 blocks Y,U,V,Y2 */
    66     DECLARE_ALIGNED(16, short, coeff[400]); /* 25 blocks Y,U,V,Y2 */
    67     DECLARE_ALIGNED(16, unsigned char, thismb[256]);
    69     unsigned char *thismb_ptr;
    70     /* 16 Y, 4 U, 4 V, 1 DC 2nd order block */
    71     BLOCK block[25];
    73     YV12_BUFFER_CONFIG src;
    75     MACROBLOCKD e_mbd;
    76     PARTITION_INFO *partition_info; /* work pointer */
    77     PARTITION_INFO *pi;   /* Corresponds to upper left visible macroblock */
    78     PARTITION_INFO *pip;  /* Base of allocated array */
    80     int ref_frame_cost[MAX_REF_FRAMES];
    82     search_site *ss;
    83     int ss_count;
    84     int searches_per_step;
    86     int errorperbit;
    87     int sadperbit16;
    88     int sadperbit4;
    89     int rddiv;
    90     int rdmult;
    91     unsigned int * mb_activity_ptr;
    92     int * mb_norm_activity_ptr;
    93     signed int act_zbin_adj;
    94     signed int last_act_zbin_adj;
    96     int *mvcost[2];
    97     int *mvsadcost[2];
    98     int (*mbmode_cost)[MB_MODE_COUNT];
    99     int (*intra_uv_mode_cost)[MB_MODE_COUNT];
   100     int (*bmode_costs)[10][10];
   101     int *inter_bmode_costs;
   102     int (*token_costs)[COEF_BANDS][PREV_COEF_CONTEXTS]
   103     [MAX_ENTROPY_TOKENS];
   105     /* These define limits to motion vector components to prevent
   106      * them from extending outside the UMV borders.
   107      */
   108     int mv_col_min;
   109     int mv_col_max;
   110     int mv_row_min;
   111     int mv_row_max;
   113     int skip;
   115     unsigned int encode_breakout;
   117     signed char *gf_active_ptr;
   119     unsigned char *active_ptr;
   120     MV_CONTEXT *mvc;
   122     int optimize;
   123     int q_index;
   125 #if CONFIG_TEMPORAL_DENOISING
   126     MB_PREDICTION_MODE best_sse_inter_mode;
   127     int_mv best_sse_mv;
   128     MV_REFERENCE_FRAME best_reference_frame;
   129     MV_REFERENCE_FRAME best_zeromv_reference_frame;
   130     unsigned char need_to_clamp_best_mvs;
   131 #endif
   133     int skip_true_count;
   134     unsigned int coef_counts [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [MAX_ENTROPY_TOKENS];
   135     unsigned int MVcount [2] [MVvals];  /* (row,col) MV cts this frame */
   136     int ymode_count [VP8_YMODES];        /* intra MB type cts this frame */
   137     int uv_mode_count[VP8_UV_MODES];     /* intra MB type cts this frame */
   138     int64_t prediction_error;
   139     int64_t intra_error;
   140     int count_mb_ref_frame_usage[MAX_REF_FRAMES];
   142     int rd_thresh_mult[MAX_MODES];
   143     int rd_threshes[MAX_MODES];
   144     unsigned int mbs_tested_so_far;
   145     unsigned int mode_test_hit_counts[MAX_MODES];
   146     int zbin_mode_boost_enabled;
   147     int zbin_mode_boost;
   148     int last_zbin_mode_boost;
   150     int last_zbin_over_quant;
   151     int zbin_over_quant;
   152     int error_bins[MAX_ERROR_BINS];
   154     void (*short_fdct4x4)(short *input, short *output, int pitch);
   155     void (*short_fdct8x4)(short *input, short *output, int pitch);
   156     void (*short_walsh4x4)(short *input, short *output, int pitch);
   157     void (*quantize_b)(BLOCK *b, BLOCKD *d);
   158     void (*quantize_b_pair)(BLOCK *b1, BLOCK *b2, BLOCKD *d0, BLOCKD *d1);
   160 } MACROBLOCK;
   163 #endif

mercurial