| Index: source/libvpx/vp8/encoder/boolhuff.h | 
| =================================================================== | 
| --- source/libvpx/vp8/encoder/boolhuff.h	(revision 96967) | 
| +++ source/libvpx/vp8/encoder/boolhuff.h	(working copy) | 
| @@ -19,6 +19,7 @@ | 
| #ifndef __INC_BOOLHUFF_H | 
| #define __INC_BOOLHUFF_H | 
|  | 
| +#include "vpx_ports/mem.h" | 
|  | 
| typedef struct | 
| { | 
| @@ -35,9 +36,77 @@ | 
| } BOOL_CODER; | 
|  | 
| extern void vp8_start_encode(BOOL_CODER *bc, unsigned char *buffer); | 
| -extern void vp8_encode_bool(BOOL_CODER *bc, int x, int context); | 
| + | 
| extern void vp8_encode_value(BOOL_CODER *br, int data, int bits); | 
| extern void vp8_stop_encode(BOOL_CODER *bc); | 
| extern const unsigned int vp8_prob_cost[256]; | 
|  | 
| + | 
| +DECLARE_ALIGNED(16, extern const unsigned char, vp8_norm[256]); | 
| + | 
| + | 
| +static void vp8_encode_bool(BOOL_CODER *br, int bit, int probability) | 
| +{ | 
| +    unsigned int split; | 
| +    int count = br->count; | 
| +    unsigned int range = br->range; | 
| +    unsigned int lowvalue = br->lowvalue; | 
| +    register unsigned int shift; | 
| + | 
| +#ifdef ENTROPY_STATS | 
| +#if defined(SECTIONBITS_OUTPUT) | 
| + | 
| +    if (bit) | 
| +        Sectionbits[active_section] += vp8_prob_cost[255-probability]; | 
| +    else | 
| +        Sectionbits[active_section] += vp8_prob_cost[probability]; | 
| + | 
| #endif | 
| +#endif | 
| + | 
| +    split = 1 + (((range - 1) * probability) >> 8); | 
| + | 
| +    range = split; | 
| + | 
| +    if (bit) | 
| +    { | 
| +        lowvalue += split; | 
| +        range = br->range - split; | 
| +    } | 
| + | 
| +    shift = vp8_norm[range]; | 
| + | 
| +    range <<= shift; | 
| +    count += shift; | 
| + | 
| +    if (count >= 0) | 
| +    { | 
| +        int offset = shift - count; | 
| + | 
| +        if ((lowvalue << (offset - 1)) & 0x80000000) | 
| +        { | 
| +            int x = br->pos - 1; | 
| + | 
| +            while (x >= 0 && br->buffer[x] == 0xff) | 
| +            { | 
| +                br->buffer[x] = (unsigned char)0; | 
| +                x--; | 
| +            } | 
| + | 
| +            br->buffer[x] += 1; | 
| +        } | 
| + | 
| +        br->buffer[br->pos++] = (lowvalue >> (24 - offset)); | 
| +        lowvalue <<= offset; | 
| +        shift = count; | 
| +        lowvalue &= 0xffffff; | 
| +        count -= 8 ; | 
| +    } | 
| + | 
| +    lowvalue <<= shift; | 
| +    br->count = count; | 
| +    br->lowvalue = lowvalue; | 
| +    br->range = range; | 
| +} | 
| + | 
| +#endif | 
|  |