Compare commits
	
		
			2 Commits
		
	
	
		
			v1.1.0
			...
			sandbox/jk
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					4e132e2e45 | ||
| 
						 | 
					3392c96aea | 
@@ -226,6 +226,7 @@ void vp8_mbpost_proc_across_ip_c(unsigned char *src, int pitch, int rows, int co
 | 
			
		||||
    unsigned char d[16];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    s += 8; cols -= 16;
 | 
			
		||||
    for (r = 0; r < rows; r++)
 | 
			
		||||
    {
 | 
			
		||||
        int sumsq = 0;
 | 
			
		||||
@@ -277,6 +278,7 @@ void vp8_mbpost_proc_down_c(unsigned char *dst, int pitch, int rows, int cols, i
 | 
			
		||||
        unsigned char d[16];
 | 
			
		||||
        const short *rv2 = rv3 + ((c * 17) & 127);
 | 
			
		||||
 | 
			
		||||
        s += 8 * pitch; rows -= 8;
 | 
			
		||||
        for (i = -8; i <= 6; i++)
 | 
			
		||||
        {
 | 
			
		||||
            sumsq += s[i*pitch] * s[i*pitch];
 | 
			
		||||
@@ -315,7 +317,7 @@ static void vp8_deblock_and_de_macro_block(YV12_BUFFER_CONFIG         *source,
 | 
			
		||||
 | 
			
		||||
    POSTPROC_INVOKE(rtcd, downacross)(source->y_buffer, post->y_buffer, source->y_stride,  post->y_stride, source->y_height, source->y_width,  ppl);
 | 
			
		||||
    POSTPROC_INVOKE(rtcd, across)(post->y_buffer, post->y_stride, post->y_height, post->y_width, q2mbl(q));
 | 
			
		||||
    POSTPROC_INVOKE(rtcd, down)(post->y_buffer, post->y_stride, post->y_height, post->y_width, q2mbl(q));
 | 
			
		||||
    //POSTPROC_INVOKE(rtcd, down)(post->y_buffer, post->y_stride, post->y_height, post->y_width, q2mbl(q));
 | 
			
		||||
 | 
			
		||||
    POSTPROC_INVOKE(rtcd, downacross)(source->u_buffer, post->u_buffer, source->uv_stride, post->uv_stride, source->uv_height, source->uv_width, ppl);
 | 
			
		||||
    POSTPROC_INVOKE(rtcd, downacross)(source->v_buffer, post->v_buffer, source->uv_stride, post->uv_stride, source->uv_height, source->uv_width, ppl);
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,8 @@
 | 
			
		||||
 | 
			
		||||
#include "defaultcoefcounts.h"
 | 
			
		||||
 | 
			
		||||
#define printf(...)
 | 
			
		||||
 | 
			
		||||
const int vp8cx_base_skip_false_prob[128] =
 | 
			
		||||
{
 | 
			
		||||
    255, 255, 255, 255, 255, 255, 255, 255,
 | 
			
		||||
@@ -159,6 +161,227 @@ static void write_split(vp8_writer *bc, int x)
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define MAX_BOOL_CACHE_CONTEXTS ((2048+2*4*8*3*12)*128)
 | 
			
		||||
 | 
			
		||||
typedef unsigned long long bool_cache_entry_t;
 | 
			
		||||
 | 
			
		||||
static unsigned char bool_cache_validity1[MAX_BOOL_CACHE_CONTEXTS/128/8];
 | 
			
		||||
static unsigned char bool_cache_validity2[MAX_BOOL_CACHE_CONTEXTS/8];
 | 
			
		||||
#define BOOL_CACHE_BUCKETS (32*1024)
 | 
			
		||||
static bool_cache_entry_t bool_cache_table[BOOL_CACHE_BUCKETS];
 | 
			
		||||
 | 
			
		||||
static unsigned char bit_n(unsigned char *vector, int n)
 | 
			
		||||
{
 | 
			
		||||
    int idx = n >> 3;
 | 
			
		||||
    return (vector[idx] >> (n&7)) & 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void set_bit_n(unsigned char *vector, int n)
 | 
			
		||||
{
 | 
			
		||||
    int idx = n >> 3;
 | 
			
		||||
    vector[idx] |= 1 << (n&7);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int bool_cache_hit1;
 | 
			
		||||
static int bool_cache_hit2;
 | 
			
		||||
static bool_cache_entry_t bool_cache_hit(int context)
 | 
			
		||||
{
 | 
			
		||||
    bool_cache_entry_t entry;
 | 
			
		||||
 | 
			
		||||
    bool_cache_hit1++;
 | 
			
		||||
    assert(context < MAX_BOOL_CACHE_CONTEXTS);
 | 
			
		||||
    if(!bit_n(bool_cache_validity1, context>>7))
 | 
			
		||||
        return 0;
 | 
			
		||||
    if(!bit_n(bool_cache_validity2, context))
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
    entry = bool_cache_table[context & (BOOL_CACHE_BUCKETS-1)];
 | 
			
		||||
    if((context >> 15) == (entry & 0x1F))
 | 
			
		||||
    {
 | 
			
		||||
        bool_cache_hit2++;
 | 
			
		||||
        return entry;
 | 
			
		||||
    }
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void encode_bits_msb(vp8_writer          *w,
 | 
			
		||||
                            int                  v,
 | 
			
		||||
                            const unsigned char *probs,
 | 
			
		||||
                            int n)
 | 
			
		||||
{
 | 
			
		||||
    do
 | 
			
		||||
    {
 | 
			
		||||
        vp8_encode_bool(w, (v >> --n) & 1, *probs++);
 | 
			
		||||
    }
 | 
			
		||||
    while(n);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void bool_cache(int context, vp8_writer *bc)
 | 
			
		||||
{
 | 
			
		||||
    int shift_count;
 | 
			
		||||
    bool_cache_entry_t entry;
 | 
			
		||||
 | 
			
		||||
    if(!bit_n(bool_cache_validity1, context>>7))
 | 
			
		||||
    {
 | 
			
		||||
        /* This is the first time this top-level context has been hit.
 | 
			
		||||
         * Invalidate the second level contexts
 | 
			
		||||
         */
 | 
			
		||||
        memset(&bool_cache_validity2[context>>3], 0, 16);
 | 
			
		||||
    }
 | 
			
		||||
    set_bit_n(bool_cache_validity1, context>>7);
 | 
			
		||||
    set_bit_n(bool_cache_validity2, context);
 | 
			
		||||
 | 
			
		||||
    /* Convert the bc into a cache entry */
 | 
			
		||||
    shift_count = bc->count + 24 + 8 * bc->pos;
 | 
			
		||||
    entry = bc->lowvalue;
 | 
			
		||||
    if (bc->pos)
 | 
			
		||||
    {
 | 
			
		||||
        assert(bc->pos < 2);
 | 
			
		||||
        entry += (unsigned long long)bc->buffer[0] << shift_count;
 | 
			
		||||
    }
 | 
			
		||||
    entry <<= 6;
 | 
			
		||||
    entry += shift_count;
 | 
			
		||||
    entry <<= 7;
 | 
			
		||||
    entry += bc->range - 128;
 | 
			
		||||
    entry <<= 5;
 | 
			
		||||
    entry += context >> 15;
 | 
			
		||||
    bool_cache_table[context & (BOOL_CACHE_BUCKETS-1)] = entry;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void splice_bits(BOOL_CODER *cx, bool_cache_entry_t to_splice)
 | 
			
		||||
{
 | 
			
		||||
    unsigned int thismask;
 | 
			
		||||
    int shift_count, count;
 | 
			
		||||
    unsigned long long lowvalue = cx->lowvalue;
 | 
			
		||||
 | 
			
		||||
    to_splice >>= 5;
 | 
			
		||||
    cx->range = (to_splice & 0x7F) + 128;
 | 
			
		||||
    to_splice >>= 7;
 | 
			
		||||
    shift_count = to_splice & 0x3F;
 | 
			
		||||
    to_splice >>= 6;
 | 
			
		||||
 | 
			
		||||
    count = cx->count + shift_count;
 | 
			
		||||
    lowvalue <<= shift_count;
 | 
			
		||||
    lowvalue += to_splice;
 | 
			
		||||
 | 
			
		||||
    if(count >=0)
 | 
			
		||||
    {
 | 
			
		||||
        unsigned long long tmp = lowvalue >> count;
 | 
			
		||||
        thismask = 0xffffff << (count & 7) | 255;
 | 
			
		||||
 | 
			
		||||
        if(tmp >> 32)
 | 
			
		||||
        {
 | 
			
		||||
            int x = cx->pos - 1;
 | 
			
		||||
 | 
			
		||||
            while (x >= 0 && cx->buffer[x] == 0xff)
 | 
			
		||||
            {
 | 
			
		||||
                cx->buffer[x] = (unsigned char)0;
 | 
			
		||||
                x--;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            cx->buffer[x] += 1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        while(count >= 0)
 | 
			
		||||
        {
 | 
			
		||||
            int out = (tmp >> 24) & 0xff;
 | 
			
		||||
            cx->buffer[cx->pos++] = out;
 | 
			
		||||
            count -= 8;
 | 
			
		||||
            tmp <<= 8;
 | 
			
		||||
        }
 | 
			
		||||
        lowvalue &= thismask;
 | 
			
		||||
    }
 | 
			
		||||
    cx->count = count;
 | 
			
		||||
    cx->lowvalue = lowvalue;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void pack_tokens_lut(vp8_writer *w, const TOKENEXTRA *p, int xcount)
 | 
			
		||||
{
 | 
			
		||||
    /* For now, we read from the token array */
 | 
			
		||||
    const TOKENEXTRA *const stop = p + xcount;
 | 
			
		||||
 | 
			
		||||
    while (p < stop)
 | 
			
		||||
    {
 | 
			
		||||
        const vp8_extra_bit_struct *b;
 | 
			
		||||
        int context;
 | 
			
		||||
        bool_cache_entry_t entry;
 | 
			
		||||
 | 
			
		||||
        /* Encode token */
 | 
			
		||||
        context = (p->context << 7) + (w->range - 128);
 | 
			
		||||
        if (!(entry = bool_cache_hit(context)))
 | 
			
		||||
        {
 | 
			
		||||
            /* Build the probability vector */
 | 
			
		||||
            int n, i, j, v;
 | 
			
		||||
            unsigned char probs[12], buf[4];
 | 
			
		||||
            vp8_writer tmpbc;
 | 
			
		||||
 | 
			
		||||
            if (p->skip_eob_node)
 | 
			
		||||
            {
 | 
			
		||||
                n = vp8_coef_encodings[p->Token].Len - 1;
 | 
			
		||||
                i = 2;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                n = vp8_coef_encodings[p->Token].Len;
 | 
			
		||||
                i = 0;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            v = vp8_coef_encodings[p->Token].value;
 | 
			
		||||
            j=0;
 | 
			
		||||
            do
 | 
			
		||||
            {
 | 
			
		||||
                const int bb = (v >> --n) & 1;
 | 
			
		||||
                probs[j++] = p->context_tree[i>>1];
 | 
			
		||||
                i = vp8_coef_tree[i+bb];
 | 
			
		||||
            } while(n);
 | 
			
		||||
 | 
			
		||||
            /* Generate the appropriate bitstream and cache the result */
 | 
			
		||||
            vp8_start_encode(&tmpbc, buf, buf+4);
 | 
			
		||||
            tmpbc.range = w->range;
 | 
			
		||||
            encode_bits_msb(&tmpbc, v, probs, j);
 | 
			
		||||
            bool_cache(context, &tmpbc);
 | 
			
		||||
            entry = bool_cache_hit(context);
 | 
			
		||||
        }
 | 
			
		||||
        splice_bits(w, entry);
 | 
			
		||||
 | 
			
		||||
        /* Encode extra bits */
 | 
			
		||||
        b = vp8_extra_bits + p->Token;
 | 
			
		||||
        if (b->Len)
 | 
			
		||||
        {
 | 
			
		||||
            context = b->base_val + (p->Extra >> 1);
 | 
			
		||||
            context = (context << 7) + (w->range - 128);
 | 
			
		||||
            if (!(entry = bool_cache_hit(context)))
 | 
			
		||||
            {
 | 
			
		||||
                unsigned char buf[4];
 | 
			
		||||
                vp8_writer tmpbc;
 | 
			
		||||
 | 
			
		||||
                /* Generate the appropriate bitstream and cache the result */
 | 
			
		||||
                vp8_start_encode(&tmpbc, buf, buf+4);
 | 
			
		||||
                tmpbc.range = w->range;
 | 
			
		||||
                encode_bits_msb(&tmpbc, p->Extra >> 1, b->prob, b->Len);
 | 
			
		||||
                bool_cache(context, &tmpbc);
 | 
			
		||||
                entry = bool_cache_hit(context);
 | 
			
		||||
            }
 | 
			
		||||
            splice_bits(w, entry);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Encode sign bit */
 | 
			
		||||
        if (b->base_val)
 | 
			
		||||
            vp8_write_bit(w, p->Extra & 1);
 | 
			
		||||
 | 
			
		||||
        /* Next token */
 | 
			
		||||
        printf("lv=%08x, pos=%ld\n",w->lowvalue,w->pos);
 | 
			
		||||
        ++p;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void pack_tokens_c(vp8_writer *w, const TOKENEXTRA *p, int xcount)
 | 
			
		||||
{
 | 
			
		||||
    const TOKENEXTRA *const stop = p + xcount;
 | 
			
		||||
@@ -187,6 +410,7 @@ static void pack_tokens_c(vp8_writer *w, const TOKENEXTRA *p, int xcount)
 | 
			
		||||
        do
 | 
			
		||||
        {
 | 
			
		||||
            const int bb = (v >> --n) & 1;
 | 
			
		||||
            //printf("E(%d)=%d (v=%d)\n",pp[i>>1],(v >> n) & 1,v);
 | 
			
		||||
            split = 1 + (((range - 1) * pp[i>>1]) >> 8);
 | 
			
		||||
            i = vp8_coef_tree[i+bb];
 | 
			
		||||
 | 
			
		||||
@@ -252,6 +476,7 @@ static void pack_tokens_c(vp8_writer *w, const TOKENEXTRA *p, int xcount)
 | 
			
		||||
                do
 | 
			
		||||
                {
 | 
			
		||||
                    const int bb = (v >> --n) & 1;
 | 
			
		||||
            //printf("E(%d)=%d (v=%d)\n",pp[i>>1],(v >> n) & 1,v);
 | 
			
		||||
                    split = 1 + (((range - 1) * pp[i>>1]) >> 8);
 | 
			
		||||
                    i = b->tree[i+bb];
 | 
			
		||||
 | 
			
		||||
@@ -352,6 +577,7 @@ static void pack_tokens_c(vp8_writer *w, const TOKENEXTRA *p, int xcount)
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        printf("lv=%08x, pos=%ld\n",lowvalue,w->pos);
 | 
			
		||||
        ++p;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -1328,7 +1554,7 @@ static int default_coef_context_savings(VP8_COMP *cpi)
 | 
			
		||||
                    MAX_ENTROPY_TOKENS, vp8_coef_encodings, vp8_coef_tree,
 | 
			
		||||
                    cpi->frame_coef_probs [i][j][k],
 | 
			
		||||
                    cpi->frame_branch_ct [i][j][k],
 | 
			
		||||
                    cpi->coef_counts [i][j][k],
 | 
			
		||||
                    default_coef_counts [i][j][k],
 | 
			
		||||
                    256, 1
 | 
			
		||||
                );
 | 
			
		||||
 | 
			
		||||
@@ -1569,6 +1795,7 @@ static void put_delta_q(vp8_writer *bc, int delta_q)
 | 
			
		||||
        vp8_write_bit(bc, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char tmp[128*1024];
 | 
			
		||||
void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest, unsigned char * dest_end, unsigned long *size)
 | 
			
		||||
{
 | 
			
		||||
    int i, j;
 | 
			
		||||
@@ -1931,7 +2158,22 @@ void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest, unsigned char * dest
 | 
			
		||||
            pack_mb_row_tokens(cpi, &cpi->bc[1]);
 | 
			
		||||
        else
 | 
			
		||||
#endif
 | 
			
		||||
            pack_tokens(&cpi->bc[1], cpi->tok, cpi->tok_count);
 | 
			
		||||
{
 | 
			
		||||
vp8_writer tmpbc;
 | 
			
		||||
 | 
			
		||||
vp8_start_encode(&tmpbc, tmp, tmp+sizeof(tmp));
 | 
			
		||||
            //pack_tokens_c(&tmpbc, cpi->tok, cpi->tok_count);
 | 
			
		||||
pack_tokens_lut(&cpi->bc[1], cpi->tok, cpi->tok_count);
 | 
			
		||||
//assert(cpi->bc[1].lowvalue == tmpbc.lowvalue);
 | 
			
		||||
//assert(cpi->bc[1].pos == tmpbc.pos);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//#undef printf
 | 
			
		||||
printf("cache hit ratio: %d/%d=%f\n",
 | 
			
		||||
bool_cache_hit2,
 | 
			
		||||
bool_cache_hit1,
 | 
			
		||||
bool_cache_hit2/(float)bool_cache_hit1);
 | 
			
		||||
 | 
			
		||||
        vp8_stop_encode(&cpi->bc[1]);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
    unsigned int lowvalue;
 | 
			
		||||
    unsigned long long lowvalue;
 | 
			
		||||
    unsigned int range;
 | 
			
		||||
    unsigned int value;
 | 
			
		||||
    int count;
 | 
			
		||||
 
 | 
			
		||||
@@ -492,7 +492,7 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
 | 
			
		||||
 | 
			
		||||
    // if we encode a new mv this is important
 | 
			
		||||
    // find the best new motion vector
 | 
			
		||||
    for (mode_index = 0; mode_index < MAX_MODES; mode_index++)
 | 
			
		||||
    for (mode_index = 0; mode_index < 1; mode_index++)
 | 
			
		||||
    {
 | 
			
		||||
        int frame_cost;
 | 
			
		||||
        int this_rd = INT_MAX;
 | 
			
		||||
 
 | 
			
		||||
@@ -176,6 +176,7 @@ void vp8cx_pick_filter_level_fast(YV12_BUFFER_CONFIG *sd, VP8_COMP *cpi)
 | 
			
		||||
    filt_val = cm->filter_level;
 | 
			
		||||
    best_filt_val = filt_val;
 | 
			
		||||
 | 
			
		||||
goto skip;
 | 
			
		||||
    // Get the err using the previous frame's filter value.
 | 
			
		||||
    vp8_loop_filter_partial_frame(cm, &cpi->mb.e_mbd, filt_val);
 | 
			
		||||
 | 
			
		||||
@@ -246,6 +247,7 @@ void vp8cx_pick_filter_level_fast(YV12_BUFFER_CONFIG *sd, VP8_COMP *cpi)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
skip:
 | 
			
		||||
    cm->filter_level = best_filt_val;
 | 
			
		||||
 | 
			
		||||
    if (cm->filter_level < min_filter_level)
 | 
			
		||||
@@ -311,6 +313,7 @@ void vp8cx_pick_filter_level(YV12_BUFFER_CONFIG *sd, VP8_COMP *cpi)
 | 
			
		||||
    best_err = vp8_calc_ss_err(sd, cm->frame_to_show, IF_RTCD(&cpi->rtcd.variance));
 | 
			
		||||
    filt_best = filt_mid;
 | 
			
		||||
 | 
			
		||||
goto skip;
 | 
			
		||||
    //  Re-instate the unfiltered frame
 | 
			
		||||
    vp8_yv12_copy_y_ptr(&cpi->last_frame_uf, cm->frame_to_show);
 | 
			
		||||
 | 
			
		||||
@@ -379,5 +382,6 @@ void vp8cx_pick_filter_level(YV12_BUFFER_CONFIG *sd, VP8_COMP *cpi)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
skip:
 | 
			
		||||
    cm->filter_level = filt_best;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -93,6 +93,20 @@ static void fill_value_tokens()
 | 
			
		||||
    vp8_dct_value_cost_ptr   = dct_value_cost + DCT_MAX_VALUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void calculate_context(VP8_COMP *cpi, TOKENEXTRA *t)
 | 
			
		||||
{
 | 
			
		||||
    int context;
 | 
			
		||||
    
 | 
			
		||||
    context = (t->context_tree - cpi->common.fc.coef_probs[0][0][0])
 | 
			
		||||
              / sizeof(cpi->common.fc.coef_probs[0][0][0]);
 | 
			
		||||
    context = context * 12 + t->Token;
 | 
			
		||||
    if(t->skip_eob_node)
 | 
			
		||||
        context += 4*8*3*12;
 | 
			
		||||
    t->context = context + 2048;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void tokenize2nd_order_b
 | 
			
		||||
(
 | 
			
		||||
    MACROBLOCKD *x,
 | 
			
		||||
@@ -124,6 +138,7 @@ static void tokenize2nd_order_b
 | 
			
		||||
        t->context_tree = cpi->common.fc.coef_probs [1] [0] [pt];
 | 
			
		||||
        t->skip_eob_node = 0;
 | 
			
		||||
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
        ++cpi->coef_counts       [1] [0] [pt] [DCT_EOB_TOKEN];
 | 
			
		||||
        t++;
 | 
			
		||||
        *tp = t;
 | 
			
		||||
@@ -138,6 +153,7 @@ static void tokenize2nd_order_b
 | 
			
		||||
 | 
			
		||||
    t->context_tree = cpi->common.fc.coef_probs [1] [0] [pt];
 | 
			
		||||
    t->skip_eob_node = 0;
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
    ++cpi->coef_counts       [1] [0] [pt] [token];
 | 
			
		||||
    pt = vp8_prev_token_class[token];
 | 
			
		||||
    t++;
 | 
			
		||||
@@ -157,6 +173,7 @@ static void tokenize2nd_order_b
 | 
			
		||||
 | 
			
		||||
        t->skip_eob_node = ((pt == 0));
 | 
			
		||||
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
        ++cpi->coef_counts       [1] [band] [pt] [token];
 | 
			
		||||
 | 
			
		||||
        pt = vp8_prev_token_class[token];
 | 
			
		||||
@@ -170,6 +187,7 @@ static void tokenize2nd_order_b
 | 
			
		||||
 | 
			
		||||
        t->skip_eob_node = 0;
 | 
			
		||||
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
        ++cpi->coef_counts       [1] [band] [pt] [DCT_EOB_TOKEN];
 | 
			
		||||
 | 
			
		||||
        t++;
 | 
			
		||||
@@ -221,6 +239,7 @@ static void tokenize1st_order_b
 | 
			
		||||
            t->context_tree = cpi->common.fc.coef_probs [type] [c] [pt];
 | 
			
		||||
            t->skip_eob_node = 0;
 | 
			
		||||
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
            ++cpi->coef_counts       [type] [c] [pt] [DCT_EOB_TOKEN];
 | 
			
		||||
            t++;
 | 
			
		||||
            *tp = t;
 | 
			
		||||
@@ -236,6 +255,7 @@ static void tokenize1st_order_b
 | 
			
		||||
 | 
			
		||||
        t->context_tree = cpi->common.fc.coef_probs [type] [c] [pt];
 | 
			
		||||
        t->skip_eob_node = 0;
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
        ++cpi->coef_counts       [type] [c] [pt] [token];
 | 
			
		||||
        pt = vp8_prev_token_class[token];
 | 
			
		||||
        t++;
 | 
			
		||||
@@ -254,6 +274,7 @@ static void tokenize1st_order_b
 | 
			
		||||
            t->context_tree = cpi->common.fc.coef_probs [type] [band] [pt];
 | 
			
		||||
 | 
			
		||||
            t->skip_eob_node = (pt == 0);
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
            ++cpi->coef_counts       [type] [band] [pt] [token];
 | 
			
		||||
 | 
			
		||||
            pt = vp8_prev_token_class[token];
 | 
			
		||||
@@ -266,6 +287,7 @@ static void tokenize1st_order_b
 | 
			
		||||
            t->context_tree = cpi->common.fc.coef_probs [type] [band] [pt];
 | 
			
		||||
 | 
			
		||||
            t->skip_eob_node = 0;
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
            ++cpi->coef_counts       [type] [band] [pt] [DCT_EOB_TOKEN];
 | 
			
		||||
 | 
			
		||||
            t++;
 | 
			
		||||
@@ -292,6 +314,7 @@ static void tokenize1st_order_b
 | 
			
		||||
            t->context_tree = cpi->common.fc.coef_probs [2] [0] [pt];
 | 
			
		||||
            t->skip_eob_node = 0;
 | 
			
		||||
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
            ++cpi->coef_counts       [2] [0] [pt] [DCT_EOB_TOKEN];
 | 
			
		||||
            t++;
 | 
			
		||||
            *tp = t;
 | 
			
		||||
@@ -307,6 +330,7 @@ static void tokenize1st_order_b
 | 
			
		||||
 | 
			
		||||
        t->context_tree = cpi->common.fc.coef_probs [2] [0] [pt];
 | 
			
		||||
        t->skip_eob_node = 0;
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
        ++cpi->coef_counts       [2] [0] [pt] [token];
 | 
			
		||||
        pt = vp8_prev_token_class[token];
 | 
			
		||||
        t++;
 | 
			
		||||
@@ -326,6 +350,7 @@ static void tokenize1st_order_b
 | 
			
		||||
 | 
			
		||||
            t->skip_eob_node = (pt == 0);
 | 
			
		||||
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
            ++cpi->coef_counts       [2] [band] [pt] [token];
 | 
			
		||||
 | 
			
		||||
            pt = vp8_prev_token_class[token];
 | 
			
		||||
@@ -339,6 +364,7 @@ static void tokenize1st_order_b
 | 
			
		||||
 | 
			
		||||
            t->skip_eob_node = 0;
 | 
			
		||||
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
            ++cpi->coef_counts       [2] [band] [pt] [DCT_EOB_TOKEN];
 | 
			
		||||
 | 
			
		||||
            t++;
 | 
			
		||||
@@ -500,6 +526,7 @@ static __inline void stuff2nd_order_b
 | 
			
		||||
    t->Token = DCT_EOB_TOKEN;
 | 
			
		||||
    t->context_tree = cpi->common.fc.coef_probs [1] [0] [pt];
 | 
			
		||||
    t->skip_eob_node = 0;
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
    ++cpi->coef_counts       [1] [0] [pt] [DCT_EOB_TOKEN];
 | 
			
		||||
    ++t;
 | 
			
		||||
 | 
			
		||||
@@ -524,6 +551,7 @@ static __inline void stuff1st_order_b
 | 
			
		||||
    t->Token = DCT_EOB_TOKEN;
 | 
			
		||||
    t->context_tree = cpi->common.fc.coef_probs [0] [1] [pt];
 | 
			
		||||
    t->skip_eob_node = 0;
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
    ++cpi->coef_counts       [0] [1] [pt] [DCT_EOB_TOKEN];
 | 
			
		||||
    ++t;
 | 
			
		||||
    *tp = t;
 | 
			
		||||
@@ -547,6 +575,7 @@ void stuff1st_order_buv
 | 
			
		||||
    t->Token = DCT_EOB_TOKEN;
 | 
			
		||||
    t->context_tree = cpi->common.fc.coef_probs [2] [0] [pt];
 | 
			
		||||
    t->skip_eob_node = 0;
 | 
			
		||||
        calculate_context(cpi, t);
 | 
			
		||||
    ++cpi->coef_counts[2] [0] [pt] [DCT_EOB_TOKEN];
 | 
			
		||||
    ++t;
 | 
			
		||||
    *tp = t;
 | 
			
		||||
 
 | 
			
		||||
@@ -29,6 +29,7 @@ typedef struct
 | 
			
		||||
    short           Extra;
 | 
			
		||||
    unsigned char   Token;
 | 
			
		||||
    unsigned char   skip_eob_node;
 | 
			
		||||
    unsigned int    context;
 | 
			
		||||
} TOKENEXTRA;
 | 
			
		||||
 | 
			
		||||
int rd_cost_mby(MACROBLOCKD *);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user