Commit 57d95347 authored by Deb Mukherjee's avatar Deb Mukherjee

Adding contextual coding of mb_skip_coeff flag.

Using contextual coding of the mkb_skip_coeff flag using the
values of this flag from the left and above. There is a small
improvement of about 0.15% on Derf:
http://www.corp.google.com/~debargha/vp8_results/mbskipcontext.html

Refactored to use pred_common.c by adding a new context type.

Results on HD set (about 0.66% improvement):
http://www.corp.google.com/~debargha/vp8_results/mbskipcontext_hd.html

Incliding missing refactoring to use the pred_common utilities.

Change-Id: I95373382d429b5a59610d77f69a0fea2be628278
parent 21d3612a
......@@ -223,6 +223,7 @@ EXPERIMENT_LIST="
high_precision_mv
sixteenth_subpel_uv
comp_intra_pred
newentropy
"
CONFIG_LIST="
external_build
......
......@@ -40,6 +40,7 @@ void vp8_arch_arm_common_init(VP8_COMMON *ctx)
rtcd->subpix.sixtap8x8 = vp8_sixtap_predict8x8_armv6;
rtcd->subpix.sixtap8x4 = vp8_sixtap_predict8x4_armv6;
rtcd->subpix.sixtap4x4 = vp8_sixtap_predict_armv6;
rtcd->subpix.bilinear16x16 = vp8_bilinear_predict16x16_armv6;
rtcd->subpix.bilinear8x8 = vp8_bilinear_predict8x8_armv6;
rtcd->subpix.bilinear8x4 = vp8_bilinear_predict8x4_armv6;
......@@ -77,6 +78,7 @@ void vp8_arch_arm_common_init(VP8_COMMON *ctx)
rtcd->subpix.sixtap8x8 = vp8_sixtap_predict8x8_neon;
rtcd->subpix.sixtap8x4 = vp8_sixtap_predict8x4_neon;
rtcd->subpix.sixtap4x4 = vp8_sixtap_predict_neon;
rtcd->subpix.bilinear16x16 = vp8_bilinear_predict16x16_neon;
rtcd->subpix.bilinear8x8 = vp8_bilinear_predict8x8_neon;
rtcd->subpix.bilinear8x4 = vp8_bilinear_predict8x4_neon;
......
......@@ -34,6 +34,10 @@ void vpx_log(const char *format, ...);
#define MB_FEATURE_TREE_PROBS 3
#define PREDICTION_PROBS 3
#if CONFIG_NEWENTROPY
#define MBSKIP_CONTEXTS 3
#endif
#define MAX_MB_SEGMENTS 4
#define MAX_REF_LF_DELTAS 4
......
......@@ -233,6 +233,10 @@ typedef struct VP8Common
vp8_prob prob_comppred[COMP_PRED_CONTEXTS];
#if CONFIG_NEWENTROPY
vp8_prob mbskip_pred_probs[MBSKIP_CONTEXTS];
#endif
FRAME_CONTEXT lfc_a; /* last alt ref entropy */
FRAME_CONTEXT lfc; /* last frame entropy */
FRAME_CONTEXT fc; /* this frame entropy */
......
......@@ -58,6 +58,13 @@ unsigned char get_pred_context( VP8_COMMON *const cm,
break;
#if CONFIG_NEWENTROPY
case PRED_MBSKIP:
pred_context = (m - 1)->mbmi.mb_skip_coeff +
(m - cm->mode_info_stride)->mbmi.mb_skip_coeff;
break;
#endif
default:
// TODO *** add error trap code.
pred_context = 0;
......@@ -96,6 +103,12 @@ vp8_prob get_pred_prob( VP8_COMMON *const cm,
pred_probability = cm->prob_comppred[pred_context];
break;
#if CONFIG_NEWENTROPY
case PRED_MBSKIP:
pred_probability = cm->mbskip_pred_probs[pred_context];
break;
#endif
default:
// TODO *** add error trap code.
pred_probability = 128;
......@@ -122,11 +135,17 @@ unsigned char get_pred_flag( MACROBLOCKD *const xd,
pred_flag = xd->mode_info_context->mbmi.ref_predicted;
break;
#if CONFIG_NEWENTROPY
case PRED_MBSKIP:
pred_flag = xd->mode_info_context->mbmi.mb_skip_coeff;
break;
#endif
default:
// TODO *** add error trap code.
pred_flag = 0;
break;
}
}
return pred_flag;
}
......@@ -147,6 +166,12 @@ void set_pred_flag( MACROBLOCKD *const xd,
xd->mode_info_context->mbmi.ref_predicted = pred_flag;
break;
#if CONFIG_NEWENTROPY
case PRED_MBSKIP:
xd->mode_info_context->mbmi.mb_skip_coeff = pred_flag;
break;
#endif
default:
// TODO *** add error trap code.
break;
......
......@@ -21,7 +21,10 @@ typedef enum
{
PRED_SEG_ID = 0, // Segment identifier
PRED_REF = 1,
PRED_COMP = 2
PRED_COMP = 2,
#if CONFIG_NEWENTROPY
PRED_MBSKIP = 3,
#endif
} PRED_ID;
......
......@@ -17,6 +17,7 @@
#include "vp8/common/seg_common.h"
#include "vp8/common/pred_common.h"
#include "vp8/common/entropy.h"
#if CONFIG_DEBUG
#include <assert.h>
......@@ -77,12 +78,14 @@ static void vp8_read_mb_segid(vp8_reader *r, MB_MODE_INFO *mi, MACROBLOCKD *x)
mi->segment_id = (unsigned char)(vp8_read(r, x->mb_segment_tree_probs[1]));
}
}
extern const int vp8_i8x8_block[4];
static void vp8_kfread_modes(VP8D_COMP *pbi,
MODE_INFO *m,
int mb_row,
int mb_col)
{
VP8_COMMON *const cm = & pbi->common;
vp8_reader *const bc = & pbi->bc;
const int mis = pbi->common.mode_info_stride;
int map_index = mb_row * pbi->common.mb_cols + mb_col;
......@@ -97,13 +100,20 @@ static void vp8_kfread_modes(VP8D_COMP *pbi,
pbi->common.last_frame_seg_map[map_index] = m->mbmi.segment_id;
}
m->mbmi.mb_skip_coeff = 0;
if ( pbi->common.mb_no_coeff_skip &&
( !segfeature_active( &pbi->mb,
m->mbmi.segment_id, SEG_LVL_EOB ) ||
( get_segdata( &pbi->mb,
m->mbmi.segment_id, SEG_LVL_EOB ) != 0 ) ) )
{
#if CONFIG_NEWENTROPY
MACROBLOCKD *const xd = & pbi->mb;
xd->mode_info_context = m;
m->mbmi.mb_skip_coeff = vp8_read(bc, get_pred_prob(cm, xd, PRED_MBSKIP));
#else
m->mbmi.mb_skip_coeff = vp8_read(bc, pbi->prob_skip_false);
#endif
}
else
{
......@@ -511,9 +521,21 @@ static void mb_mode_mv_init(VP8D_COMP *pbi)
MACROBLOCKD *const xd = & pbi->mb;
#endif
#if CONFIG_NEWENTROPY
vpx_memset(cm->mbskip_pred_probs, 0, sizeof(cm->mbskip_pred_probs));
#else
pbi->prob_skip_false = 0;
#endif
if (pbi->common.mb_no_coeff_skip)
{
#if CONFIG_NEWENTROPY
int k;
for (k=0; k<MBSKIP_CONTEXTS; ++k)
cm->mbskip_pred_probs[k] = (vp8_prob)vp8_read_literal(bc, 8);
#else
pbi->prob_skip_false = (vp8_prob)vp8_read_literal(bc, 8);
#endif
}
if(pbi->common.frame_type != KEY_FRAME)
{
......@@ -683,7 +705,11 @@ static void read_mb_modes_mv(VP8D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi,
{
// Read the macroblock coeff skip flag if this feature is in use,
// else default to 0
#if CONFIG_NEWENTROPY
mbmi->mb_skip_coeff = vp8_read(bc, get_pred_prob(cm, xd, PRED_MBSKIP));
#else
mbmi->mb_skip_coeff = vp8_read(bc, pbi->prob_skip_false);
#endif
}
else
{
......@@ -1034,11 +1060,16 @@ void vp8_decode_mode_mvs(VP8D_COMP *pbi)
{
/*read_mb_modes_mv(pbi, xd->mode_info_context, &xd->mode_info_context->mbmi, mb_row, mb_col);*/
if(pbi->common.frame_type == KEY_FRAME)
{
//printf("<%d %d> \n", mb_row, mb_col);
vp8_kfread_modes(pbi, mi, mb_row, mb_col);
}
else
{
read_mb_modes_mv(pbi, mi, &mi->mbmi,
prev_mi,
mb_row, mb_col);
}
//printf("%3d", mi->mbmi.mode);
......
......@@ -97,6 +97,7 @@ void vp8_reset_mb_tokens_context(MACROBLOCKD *x)
}
DECLARE_ALIGNED(16, extern const unsigned char, vp8_norm[256]);
#define FILL \
if(count < 0) \
VP8DX_BOOL_DECODER_FILL(count, value, bufptr, bufend);
......@@ -289,7 +290,7 @@ int vp8_decode_mb_tokens_8x8(VP8D_COMP *dx, MACROBLOCKD *x)
INT16 val, bits_count;
INT16 c;
INT16 v;
const vp8_prob *Prob;//
const vp8_prob *Prob;
int seg_eob;
int segment_id = x->mode_info_context->mbmi.segment_id;
......@@ -323,6 +324,7 @@ BLOCK_LOOP_8x8:
a = A + vp8_block2above_8x8[i];
l = L + vp8_block2left_8x8[i];
c = (INT16)(!type);
// Dest = ((A)!=0) + ((B)!=0);
......@@ -363,11 +365,11 @@ DO_WHILE_8x8:
CHECK_0_8x8_:
if (i==24)
{
DECODE_AND_LOOP_IF_ZERO_8x8_2(Prob[ZERO_CONTEXT_NODE], CHECK_0_8x8_);
DECODE_AND_LOOP_IF_ZERO_8x8_2(Prob[ZERO_CONTEXT_NODE], CHECK_0_8x8_);
}
else
{
DECODE_AND_LOOP_IF_ZERO_8X8(Prob[ZERO_CONTEXT_NODE], CHECK_0_8x8_);
DECODE_AND_LOOP_IF_ZERO_8X8(Prob[ZERO_CONTEXT_NODE], CHECK_0_8x8_);
}
DECODE_AND_BRANCH_IF_ZERO(Prob[ONE_CONTEXT_NODE], ONE_CONTEXT_NODE_0_8x8_);
DECODE_AND_BRANCH_IF_ZERO(Prob[LOW_VAL_CONTEXT_NODE],
......@@ -516,6 +518,7 @@ ONE_CONTEXT_NODE_0_8x8_:
{
qcoeff_ptr [ scan[c] ] = (INT16) v;
++c;
goto DO_WHILE_8x8;
}
}
......@@ -539,7 +542,7 @@ BLOCK_FINISHED_8x8:
*a = *l = ((eobs[i] = c) != !type); // any nonzero data?
if (i!=24)
{
*(a + 1) = *a;
*(a + 1) = *a;
*(l + 1) = *l;
}
......@@ -757,6 +760,7 @@ ONE_CONTEXT_NODE_0_:
qcoeff_ptr [ 15 ] = (INT16) v;
BLOCK_FINISHED:
*a = *l = ((eobs[i] = c) != !type); /* any nonzero data? */
eobtotal += c;
qcoeff_ptr += 16;
......
......@@ -151,6 +151,18 @@ static void write_split(vp8_writer *bc, int x)
);
}
static int prob_update_savings(const unsigned int *ct,
const vp8_prob oldp, const vp8_prob newp,
const vp8_prob upd)
{
const int old_b = vp8_cost_branch(ct, oldp);
const int new_b = vp8_cost_branch(ct, newp);
const int update_b = 8 +
((vp8_cost_one(upd) - vp8_cost_zero(upd)) >> 8);
return old_b - new_b - update_b;
}
static void pack_tokens_c(vp8_writer *w, const TOKENEXTRA *p, int xcount)
{
const TOKENEXTRA *const stop = p + xcount;
......@@ -170,10 +182,11 @@ static void pack_tokens_c(vp8_writer *w, const TOKENEXTRA *p, int xcount)
int v = a->value;
int n = a->Len;
/* skip one or two nodes */
if (p->skip_eob_node)
{
n--;
i = 2;
n-=p->skip_eob_node;
i = 2*p->skip_eob_node;
}
do
......@@ -581,7 +594,11 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
const int mis = pc->mode_info_stride;
int mb_row = -1;
#if CONFIG_NEWENTROPY
int prob_skip_false[3] = {0, 0, 0};
#else
int prob_skip_false = 0;
#endif
// Values used in prediction model coding
vp8_prob pred_prob;
......@@ -599,6 +616,28 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
if (pc->mb_no_coeff_skip)
{
// Divide by 0 check. 0 case possible with segment features
#if CONFIG_NEWENTROPY
int k;
for (k=0;k<MBSKIP_CONTEXTS;++k)
{
if ( (cpi->skip_false_count[k] + cpi->skip_true_count[k]) )
{
prob_skip_false[k] = cpi->skip_false_count[k] * 256 /
(cpi->skip_false_count[k] + cpi->skip_true_count[k]);
if (prob_skip_false[k] <= 1)
prob_skip_false[k] = 1;
if (prob_skip_false[k] > 255)
prob_skip_false[k] = 255;
}
else
prob_skip_false[k] = 255;
pc->mbskip_pred_probs[k] = prob_skip_false[k];
vp8_write_literal(w, prob_skip_false[k], 8);
}
#else
if ( (cpi->skip_false_count + cpi->skip_true_count) )
{
prob_skip_false = cpi->skip_false_count * 256 /
......@@ -615,6 +654,7 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
cpi->prob_skip_false = prob_skip_false;
vp8_write_literal(w, prob_skip_false, 8);
#endif
}
vp8_write_literal(w, pc->prob_intra_coded, 8);
......@@ -715,7 +755,12 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
( !segfeature_active( xd, segment_id, SEG_LVL_EOB ) ||
( get_segdata( xd, segment_id, SEG_LVL_EOB ) != 0 ) ) )
{
#if CONFIG_NEWENTROPY
vp8_encode_bool(w, mi->mb_skip_coeff,
get_pred_prob(pc, xd, PRED_MBSKIP));
#else
vp8_encode_bool(w, mi->mb_skip_coeff, prob_skip_false);
#endif
}
// Encode the reference frame.
......@@ -920,17 +965,44 @@ static void pack_inter_mode_mvs(VP8_COMP *const cpi)
static void write_kfmodes(VP8_COMP *cpi)
{
vp8_writer *const bc = & cpi->bc;
const VP8_COMMON *const c = & cpi->common;
VP8_COMMON *const c = & cpi->common;
const int mis = c->mode_info_stride;
/* const */
MODE_INFO *m = c->mi;
int mb_row = -1;
#if CONFIG_NEWENTROPY
int prob_skip_false[3] = {0, 0, 0};
#else
int prob_skip_false = 0;
#endif
MACROBLOCKD *xd = &cpi->mb.e_mbd;
if (c->mb_no_coeff_skip)
{
// Divide by 0 check. 0 case possible with segment features
#if CONFIG_NEWENTROPY
int k;
for (k=0;k<MBSKIP_CONTEXTS;++k)
{
if ( (cpi->skip_false_count[k] + cpi->skip_true_count[k]) )
{
prob_skip_false[k] = cpi->skip_false_count[k] * 256 /
(cpi->skip_false_count[k] + cpi->skip_true_count[k]);
if (prob_skip_false[k] <= 1)
prob_skip_false[k] = 1;
if (prob_skip_false[k] > 255)
prob_skip_false[k] = 255;
}
else
prob_skip_false[k] = 255;
c->mbskip_pred_probs[k] = prob_skip_false[k];
vp8_write_literal(bc, prob_skip_false[k], 8);
}
#else
if ( (cpi->skip_false_count + cpi->skip_true_count) )
{
prob_skip_false = cpi->skip_false_count * 256 /
......@@ -947,6 +1019,7 @@ static void write_kfmodes(VP8_COMP *cpi)
cpi->prob_skip_false = prob_skip_false;
vp8_write_literal(bc, prob_skip_false, 8);
#endif
}
#if CONFIG_QIMODE
......@@ -965,6 +1038,8 @@ static void write_kfmodes(VP8_COMP *cpi)
const int ym = m->mbmi.mode;
int segment_id = m->mbmi.segment_id;
xd->mode_info_context = m;
if (cpi->mb.e_mbd.update_mb_segmentation_map)
{
write_mb_segid(bc, &m->mbmi, &cpi->mb.e_mbd);
......@@ -974,7 +1049,12 @@ static void write_kfmodes(VP8_COMP *cpi)
( !segfeature_active( xd, segment_id, SEG_LVL_EOB ) ||
(get_segdata( xd, segment_id, SEG_LVL_EOB ) != 0) ) )
{
#if CONFIG_NEWENTROPY
vp8_encode_bool(bc, m->mbmi.mb_skip_coeff,
get_pred_prob(c, xd, PRED_MBSKIP));
#else
vp8_encode_bool(bc, m->mbmi.mb_skip_coeff, prob_skip_false);
#endif
}
#if CONFIG_QIMODE
kfwrite_ymode(bc, ym, c->kf_ymode_prob[c->kf_ymode_probs_index]);
......@@ -1018,14 +1098,15 @@ static void write_kfmodes(VP8_COMP *cpi)
write_i8x8_mode(bc, m->bmi[2].as_mode.first, c->i8x8_mode_prob);
write_i8x8_mode(bc, m->bmi[8].as_mode.first, c->i8x8_mode_prob);
write_i8x8_mode(bc, m->bmi[10].as_mode.first, c->i8x8_mode_prob);
m++;
}
else
#if CONFIG_UVINTRA
write_uv_mode(bc, (m++)->mbmi.uv_mode, c->kf_uv_mode_prob[ym]);
write_uv_mode(bc, m->mbmi.uv_mode, c->kf_uv_mode_prob[ym]);
#else
write_uv_mode(bc, (m++)->mbmi.uv_mode, c->kf_uv_mode_prob);
write_uv_mode(bc, m->mbmi.uv_mode, c->kf_uv_mode_prob);
#endif
m++;
}
//printf("\n");
m++; // skip L prediction border
......@@ -1083,18 +1164,6 @@ static void sum_probs_over_prev_coef_context(
}
}
static int prob_update_savings(const unsigned int *ct,
const vp8_prob oldp, const vp8_prob newp,
const vp8_prob upd)
{
const int old_b = vp8_cost_branch(ct, oldp);
const int new_b = vp8_cost_branch(ct, newp);
const int update_b = 8 +
((vp8_cost_one(upd) - vp8_cost_zero(upd)) >> 8);
return old_b - new_b - update_b;
}
static int default_coef_context_savings(VP8_COMP *cpi)
{
int savings = 0;
......@@ -1599,7 +1668,7 @@ static void decide_kf_ymode_entropy(VP8_COMP *cpi)
}
#endif
static segment_reference_frames(VP8_COMP *cpi)
static void segment_reference_frames(VP8_COMP *cpi)
{
VP8_COMMON *oci = &cpi->common;
MODE_INFO *mi = oci->mi;
......@@ -1624,6 +1693,7 @@ static segment_reference_frames(VP8_COMP *cpi)
}
void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest, unsigned long *size)
{
int i, j;
......
......@@ -693,8 +693,13 @@ static void encode_frame_internal(VP8_COMP *cpi)
cpi->prediction_error = 0;
cpi->intra_error = 0;
#if CONFIG_NEWENTROPY
cpi->skip_true_count[0] = cpi->skip_true_count[1] = cpi->skip_true_count[2] = 0;
cpi->skip_false_count[0] = cpi->skip_false_count[1] = cpi->skip_false_count[2] = 0;
#else
cpi->skip_true_count = 0;
cpi->skip_false_count = 0;
#endif
#if 0
// Experimental code
......@@ -1052,7 +1057,8 @@ static void adjust_act_zbin( VP8_COMP *cpi, MACROBLOCK *x )
int vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t)
{
int rate;
int rate, i;
int mb_skip_context;
// Non rd path deprecated in test code base
//if (cpi->sf.RD && cpi->compressor_speed != 2)
......@@ -1094,7 +1100,6 @@ int vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t)
vp8_encode_intra16x16mbuv(IF_RTCD(&cpi->rtcd), x);
sum_intra_stats(cpi, x);
vp8_tokenize_mb(cpi, &x->e_mbd, t);
return rate;
}
#ifdef SPEEDSTATS
......@@ -1116,7 +1121,7 @@ int vp8cx_encode_inter_macroblock
int distortion;
unsigned char *segment_id = &xd->mode_info_context->mbmi.segment_id;
int seg_ref_active;
unsigned char ref_pred_flag;
unsigned char ref_pred_flag;
x->skip = 0;
......@@ -1363,17 +1368,32 @@ int vp8cx_encode_inter_macroblock
}
else
{
#if CONFIG_NEWENTROPY
int mb_skip_context =
cpi->common.mb_no_coeff_skip ?
(x->e_mbd.mode_info_context-1)->mbmi.mb_skip_coeff +
(x->e_mbd.mode_info_context-cpi->common.mode_info_stride)->mbmi.mb_skip_coeff :
0;
#endif
if (cpi->common.mb_no_coeff_skip)
{
xd->mode_info_context->mbmi.mb_skip_coeff = 1;
#if CONFIG_NEWENTROPY
cpi->skip_true_count[mb_skip_context] ++;
#else
cpi->skip_true_count ++;
#endif
vp8_fix_contexts(xd);
}
else
{
vp8_stuff_mb(cpi, xd, t);
xd->mode_info_context->mbmi.mb_skip_coeff = 0;
#if CONFIG_NEWENTROPY
cpi->skip_false_count[mb_skip_context] ++;
#else
cpi->skip_false_count ++;
#endif
}
}
return rate;
......
......@@ -144,9 +144,9 @@ void vp8_encode_intra16x16mby(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
}
if(tx_type == TX_8X8)
vp8_inverse_transform_mby_8x8(IF_RTCD(&rtcd->common->idct), &x->e_mbd);
vp8_inverse_transform_mby_8x8(IF_RTCD(&rtcd->common->idct), &x->e_mbd);
else
vp8_inverse_transform_mby(IF_RTCD(&rtcd->common->idct), &x->e_mbd);
vp8_inverse_transform_mby(IF_RTCD(&rtcd->common->idct), &x->e_mbd);
#ifdef ENC_DEBUG
if (enc_debug) {
......
......@@ -166,7 +166,11 @@ extern void (*vp8_short_fdct8x4)(short *input, short *output, int pitch);
extern void vp8cx_init_quantizer(VP8_COMP *cpi);
#if CONFIG_NEWENTROPY
int vp8cx_base_skip_false_prob[QINDEX_RANGE][3];
#else
int vp8cx_base_skip_false_prob[QINDEX_RANGE];
#endif
// Tables relating active max Q to active min Q
static int kf_low_motion_minq[QINDEX_RANGE];
......@@ -253,7 +257,7 @@ void init_base_skip_probs()
{
int i;
double q;
int skip_prob;
int skip_prob, t;
for ( i = 0; i < QINDEX_RANGE; i++ )
{
......@@ -261,13 +265,32 @@ void init_base_skip_probs()
// Exponential decay caluclation of baseline skip prob with clamping
// Based on crude best fit of old table.
skip_prob = (int)( 564.25 * pow( 2.71828, (-0.012*q) ) );
t = (int)( 564.25 * pow( 2.71828, (-0.012*q) ) );
skip_prob = t;
if ( skip_prob < 1 )
skip_prob = 1;
else if ( skip_prob > 255 )
skip_prob = 255;
#if CONFIG_NEWENTROPY
vp8cx_base_skip_false_prob[i][1] = skip_prob;
skip_prob = t * 0.75;
if ( skip_prob < 1 )
skip_prob = 1;
else if ( skip_prob > 255 )
skip_prob = 255;
vp8cx_base_skip_false_prob[i][2] = skip_prob;
skip_prob = t * 1.25;
if ( skip_prob < 1 )
skip_prob = 1;
else if ( skip_prob > 255 )
skip_prob = 255;
vp8cx_base_skip_false_prob[i][0] = skip_prob;
#else
vp8cx_base_skip_false_prob[i] = skip_prob;
#endif
}
}
......@@ -1826,12 +1849,10 @@ VP8_PTR vp8_create_compressor(VP8_CONFIG *oxcf)
vp8_zero(cpi->y_uv_mode_count)
#endif
return (VP8_PTR) cpi;
}
void vp8_remove_compressor(VP8_PTR *ptr)
{
VP8_COMP *cpi = (VP8_COMP *)(*ptr);
......@@ -1857,7 +1878,7 @@ void vp8_remove_compressor(VP8_PTR *ptr)
vp8_clear_system_state();
printf("\n8x8-4x4:%d-%d\n", cpi->t8x8_count, cpi->t4x4_count);
//printf("\n8x8-4x4:%d-%d\n", cpi->t8x8_count, cpi->t4x4_count);