Home | History | Annotate | Download | only in encoder
      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  */
     10 
     11 
     12 #ifndef __INC_BLOCK_H
     13 #define __INC_BLOCK_H
     14 
     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"
     20 
     21 // motion search site
     22 typedef struct
     23 {
     24     MV mv;
     25     int offset;
     26 } search_site;
     27 
     28 typedef struct
     29 {
     30     // 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries
     31     short *src_diff;
     32     short *coeff;
     33 
     34     // 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries
     35     short *quant;
     36     short *quant_fast;
     37     short *quant_shift;
     38     short *zbin;
     39     short *zrun_zbin_boost;
     40     short *round;
     41 
     42     // Zbin Over Quant value
     43     short zbin_extra;
     44 
     45     unsigned char **base_src;
     46     int src;
     47     int src_stride;
     48 
     49 //  MV  enc_mv;
     50     int force_empty;
     51 
     52 } BLOCK;
     53 
     54 typedef struct
     55 {
     56     int count;
     57     B_MODE_INFO bmi[16];
     58 } PARTITION_INFO;
     59 
     60 typedef struct
     61 {
     62     DECLARE_ALIGNED(16, short, src_diff[400]);       // 16x16 Y 8x8 U 8x8 V 4x4 2nd Y
     63     DECLARE_ALIGNED(16, short, coeff[400]);     // 16x16 Y 8x8 U 8x8 V 4x4 2nd Y
     64 
     65     // 16 Y blocks, 4 U blocks, 4 V blocks, 1 DC 2nd order block each with 16 entries
     66     BLOCK block[25];
     67 
     68     YV12_BUFFER_CONFIG src;
     69 
     70     MACROBLOCKD e_mbd;
     71     PARTITION_INFO *partition_info; /* work pointer */
     72     PARTITION_INFO *pi;   /* Corresponds to upper left visible macroblock */
     73     PARTITION_INFO *pip;  /* Base of allocated array */
     74 
     75     search_site *ss;
     76     int ss_count;
     77     int searches_per_step;
     78 
     79     int errorperbit;
     80     int sadperbit16;
     81     int sadperbit4;
     82     int errthresh;
     83     int rddiv;
     84     int rdmult;
     85     INT64 activity_sum;
     86 
     87     int mvcosts[2][MVvals+1];
     88     int *mvcost[2];
     89     int mvsadcosts[2][MVvals+1];
     90     int *mvsadcost[2];
     91     int mbmode_cost[2][MB_MODE_COUNT];
     92     int intra_uv_mode_cost[2][MB_MODE_COUNT];
     93     unsigned int bmode_costs[10][10][10];
     94     unsigned int inter_bmode_costs[B_MODE_COUNT];
     95 
     96     // These define limits to motion vector components to prevent them from extending outside the UMV borders
     97     int mv_col_min;
     98     int mv_col_max;
     99     int mv_row_min;
    100     int mv_row_max;
    101 
    102     int vector_range;    // Used to monitor limiting range of recent vectors to guide search.
    103     int skip;
    104 
    105     int encode_breakout;
    106 
    107     //char * gf_active_ptr;
    108     signed char *gf_active_ptr;
    109 
    110     unsigned char *active_ptr;
    111     MV_CONTEXT *mvc;
    112 
    113     unsigned int token_costs[BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [vp8_coef_tokens];
    114     int optimize;
    115     int q_index;
    116 
    117     void (*vp8_short_fdct4x4)(short *input, short *output, int pitch);
    118     void (*vp8_short_fdct8x4)(short *input, short *output, int pitch);
    119     void (*short_walsh4x4)(short *input, short *output, int pitch);
    120     void (*quantize_b)(BLOCK *b, BLOCKD *d);
    121 
    122 } MACROBLOCK;
    123 
    124 
    125 #endif
    126