Replacing vp9_{write, write_literal, bit} macros with functions.
Also removing BOOL_CODER and using vp9_writer instead. Change-Id: I31d1ec661872f7eb1fe869607b6ed0ebfbb03e01
This commit is contained in:
@@ -52,7 +52,7 @@ TEST(VP9, TestBitIO) {
|
|||||||
const int random_seed = 6432;
|
const int random_seed = 6432;
|
||||||
const int buffer_size = 10000;
|
const int buffer_size = 10000;
|
||||||
ACMRandom bit_rnd(random_seed);
|
ACMRandom bit_rnd(random_seed);
|
||||||
BOOL_CODER bw;
|
vp9_writer bw;
|
||||||
uint8_t bw_buffer[buffer_size];
|
uint8_t bw_buffer[buffer_size];
|
||||||
vp9_start_encode(&bw, bw_buffer);
|
vp9_start_encode(&bw, bw_buffer);
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ TEST(VP9, TestBitIO) {
|
|||||||
} else if (bit_method == 3) {
|
} else if (bit_method == 3) {
|
||||||
bit = bit_rnd(2);
|
bit = bit_rnd(2);
|
||||||
}
|
}
|
||||||
encode_bool(&bw, bit, static_cast<int>(probas[i]));
|
vp9_write(&bw, bit, static_cast<int>(probas[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
vp9_stop_encode(&bw);
|
vp9_stop_encode(&bw);
|
||||||
|
@@ -52,7 +52,7 @@ void vp9_stop_encode(vp9_writer *br) {
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < 32; i++)
|
for (i = 0; i < 32; i++)
|
||||||
encode_bool(br, 0, 128);
|
vp9_write_bit(br, 0);
|
||||||
|
|
||||||
// Ensure there's no ambigous collision with any index marker bytes
|
// Ensure there's no ambigous collision with any index marker bytes
|
||||||
if ((br->buffer[br->pos - 1] & 0xe0) == 0xc0)
|
if ((br->buffer[br->pos - 1] & 0xe0) == 0xc0)
|
||||||
@@ -60,17 +60,10 @@ void vp9_stop_encode(vp9_writer *br) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void vp9_encode_value(vp9_writer *br, int data, int bits) {
|
|
||||||
int bit;
|
|
||||||
|
|
||||||
for (bit = bits - 1; bit >= 0; bit--)
|
|
||||||
encode_bool(br, (1 & (data >> bit)), 0x80);
|
|
||||||
}
|
|
||||||
|
|
||||||
void vp9_encode_unsigned_max(vp9_writer *br, int data, int max) {
|
void vp9_encode_unsigned_max(vp9_writer *br, int data, int max) {
|
||||||
assert(data <= max);
|
assert(data <= max);
|
||||||
while (max) {
|
while (max) {
|
||||||
encode_bool(br, data & 1, 128);
|
vp9_write_bit(br, data & 1);
|
||||||
data >>= 1;
|
data >>= 1;
|
||||||
max >>= 1;
|
max >>= 1;
|
||||||
}
|
}
|
||||||
@@ -98,10 +91,10 @@ void vp9_encode_uniform(vp9_writer *br, int v, int n) {
|
|||||||
if (l == 0) return;
|
if (l == 0) return;
|
||||||
m = (1 << l) - n;
|
m = (1 << l) - n;
|
||||||
if (v < m)
|
if (v < m)
|
||||||
vp9_encode_value(br, v, l - 1);
|
vp9_write_literal(br, v, l - 1);
|
||||||
else {
|
else {
|
||||||
vp9_encode_value(br, m + ((v - m) >> 1), l - 1);
|
vp9_write_literal(br, m + ((v - m) >> 1), l - 1);
|
||||||
vp9_encode_value(br, (v - m) & 1, 1);
|
vp9_write_literal(br, (v - m) & 1, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,12 +120,12 @@ void vp9_encode_term_subexp(vp9_writer *br, int word, int k, int num_syms) {
|
|||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
int t = (word >= mk + a);
|
int t = (word >= mk + a);
|
||||||
vp9_encode_value(br, t, 1);
|
vp9_write_literal(br, t, 1);
|
||||||
if (t) {
|
if (t) {
|
||||||
i = i + 1;
|
i = i + 1;
|
||||||
mk += a;
|
mk += a;
|
||||||
} else {
|
} else {
|
||||||
vp9_encode_value(br, word - mk, b);
|
vp9_write_literal(br, word - mk, b);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -32,15 +32,11 @@ typedef struct {
|
|||||||
// Variables used to track bit costs without outputing to the bitstream
|
// Variables used to track bit costs without outputing to the bitstream
|
||||||
unsigned int measure_cost;
|
unsigned int measure_cost;
|
||||||
unsigned long bit_counter;
|
unsigned long bit_counter;
|
||||||
} BOOL_CODER;
|
} vp9_writer;
|
||||||
|
|
||||||
typedef BOOL_CODER vp9_writer;
|
|
||||||
|
|
||||||
extern const unsigned int vp9_prob_cost[256];
|
extern const unsigned int vp9_prob_cost[256];
|
||||||
|
|
||||||
void vp9_start_encode(vp9_writer *bc, uint8_t *buffer);
|
void vp9_start_encode(vp9_writer *bc, uint8_t *buffer);
|
||||||
|
|
||||||
void vp9_encode_value(vp9_writer *br, int data, int bits);
|
|
||||||
void vp9_encode_unsigned_max(vp9_writer *br, int data, int max);
|
void vp9_encode_unsigned_max(vp9_writer *br, int data, int max);
|
||||||
void vp9_stop_encode(vp9_writer *bc);
|
void vp9_stop_encode(vp9_writer *bc);
|
||||||
|
|
||||||
@@ -54,7 +50,7 @@ int vp9_recenter_nonneg(int v, int m);
|
|||||||
DECLARE_ALIGNED(16, extern const unsigned char, vp9_norm[256]);
|
DECLARE_ALIGNED(16, extern const unsigned char, vp9_norm[256]);
|
||||||
|
|
||||||
|
|
||||||
static void encode_bool(vp9_writer *br, int bit, int probability) {
|
static void vp9_write(vp9_writer *br, int bit, int probability) {
|
||||||
unsigned int split;
|
unsigned int split;
|
||||||
int count = br->count;
|
int count = br->count;
|
||||||
unsigned int range = br->range;
|
unsigned int range = br->range;
|
||||||
@@ -113,4 +109,16 @@ static void encode_bool(vp9_writer *br, int bit, int probability) {
|
|||||||
br->range = range;
|
br->range = range;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void vp9_write_bit(vp9_writer *w, int bit) {
|
||||||
|
vp9_write(w, bit, 128); // vp9_prob_half
|
||||||
|
}
|
||||||
|
|
||||||
|
static void vp9_write_literal(vp9_writer *w, int data, int bits) {
|
||||||
|
int bit;
|
||||||
|
|
||||||
|
for (bit = bits - 1; bit >= 0; bit--)
|
||||||
|
vp9_write_bit(w, 1 & (data >> bit));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif // VP9_ENCODER_VP9_BOOLHUFF_H_
|
#endif // VP9_ENCODER_VP9_BOOLHUFF_H_
|
||||||
|
@@ -19,9 +19,7 @@
|
|||||||
|
|
||||||
#include "vp9/encoder/vp9_boolhuff.h" /* for now */
|
#include "vp9/encoder/vp9_boolhuff.h" /* for now */
|
||||||
|
|
||||||
#define vp9_write encode_bool
|
|
||||||
#define vp9_write_literal vp9_encode_value
|
|
||||||
#define vp9_write_bit(w, v) vp9_write((w), (v), vp9_prob_half)
|
|
||||||
#define vp9_write_prob(w, v) vp9_write_literal((w), (v), 8)
|
#define vp9_write_prob(w, v) vp9_write_literal((w), (v), 8)
|
||||||
|
|
||||||
/* Approximate length of an encoded bool in 256ths of a bit at given prob */
|
/* Approximate length of an encoded bool in 256ths of a bit at given prob */
|
||||||
|
Reference in New Issue
Block a user