| 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
|
|
|