39 extern const vlc_t x264_coeff0_token[6];
40 extern const vlc_t x264_coeff_token[6][16][4];
41 extern const vlc_t x264_total_zeros[15][16];
42 extern const vlc_t x264_total_zeros_2x2_dc[3][4];
43 extern const vlc_t x264_total_zeros_2x4_dc[7][8];
47 uint8_t *(*nal_escape)(uint8_t *dst, uint8_t *src, uint8_t *end);
57 #define LEVEL_TABLE_SIZE 128
58 extern vlc_large_t x264_level_token[7][LEVEL_TABLE_SIZE];
63 extern uint32_t x264_run_before[1 << 16];
65 static inline void bs_init(
bs_t *s,
void *p_data,
int i_data) {
66 int offset = ((intptr_t)p_data & 3);
67 s->p = s->p_start = (uint8_t *)p_data - offset;
68 s->p_end = (uint8_t *)p_data + i_data;
69 s->i_left = (WORD_SIZE - offset) * 8;
70 s->cur_bits = endian_fix32(M32(s->p));
71 s->cur_bits >>= (4 - offset) * 8;
73 static inline int bs_pos(
bs_t *s) {
74 return (8 * (s->p - s->p_start) + (WORD_SIZE * 8) - s->i_left);
78 static inline void bs_flush(
bs_t *s) {
79 M32(s->p) = endian_fix32(s->cur_bits << (s->i_left & 31));
80 s->p += WORD_SIZE - (s->i_left >> 3);
81 s->i_left = WORD_SIZE * 8;
84 static inline void bs_realign(
bs_t *s) {
85 int offset = ((intptr_t)s->p & 3);
87 s->p = (uint8_t *)s->p - offset;
88 s->i_left = (WORD_SIZE - offset) * 8;
89 s->cur_bits = endian_fix32(M32(s->p));
90 s->cur_bits >>= (4 - offset) * 8;
94 static inline void bs_write(
bs_t *s,
int i_count, uint32_t i_bits) {
96 s->cur_bits = (s->cur_bits << i_count) | i_bits;
98 if (s->i_left <= 32) {
100 M32(s->p) = s->cur_bits >> (32 - s->i_left);
102 M32(s->p) = endian_fix(s->cur_bits << s->i_left);
108 if (i_count < s->i_left) {
109 s->cur_bits = (s->cur_bits << i_count) | i_bits;
110 s->i_left -= i_count;
112 i_count -= s->i_left;
113 s->cur_bits = (s->cur_bits << s->i_left) | (i_bits >> i_count);
114 M32(s->p) = endian_fix(s->cur_bits);
116 s->cur_bits = i_bits;
117 s->i_left = 32 - i_count;
124 static inline void bs_write32(
bs_t *s, uint32_t i_bits) {
125 bs_write(s, 16, i_bits >> 16);
126 bs_write(s, 16, i_bits);
129 static inline void bs_write1(
bs_t *s, uint32_t i_bit) {
131 s->cur_bits |= i_bit;
133 if (s->i_left == WORD_SIZE * 8 - 32) {
134 M32(s->p) = endian_fix32(s->cur_bits);
136 s->i_left = WORD_SIZE * 8;
140 static inline void bs_align_0(
bs_t *s) {
141 bs_write(s, s->i_left & 7, 0);
144 static inline void bs_align_1(
bs_t *s) {
145 bs_write(s, s->i_left & 7, (1 << (s->i_left & 7)) - 1);
148 static inline void bs_align_10(
bs_t *s) {
150 bs_write(s, s->i_left & 7, 1 << ((s->i_left & 7) - 1));
155 static const uint8_t x264_ue_size_tab[256] =
417 static inline void bs_write_ue_big(
bs_t *s,
unsigned int val) {
420 if (tmp >= 0x10000) {
428 size += x264_ue_size_tab[tmp];
429 bs_write(s, size >> 1, 0);
430 bs_write(s, (size >> 1) + 1, val);
435 static inline void bs_write_ue(
bs_t *s,
int val) {
436 bs_write(s, x264_ue_size_tab[val + 1], val + 1);
440 static inline void bs_write_se(
bs_t *s,
int val) {
444 int tmp = 1 - val * 2;
453 size += x264_ue_size_tab[tmp];
454 bs_write(s, size, val);
458 static inline void bs_write_te(
bs_t *s,
int x,
int val) {
460 bs_write1(s, 1 ^ val);
465 static inline void bs_rbsp_trailing(
bs_t *s) {
467 bs_write(s, s->i_left & 7, 0);
470 static ALWAYS_INLINE
int bs_size_ue(
unsigned int val) {
471 return x264_ue_size_tab[val + 1];
474 static ALWAYS_INLINE
int bs_size_ue_big(
unsigned int val) {
476 return x264_ue_size_tab[val + 1];
478 return x264_ue_size_tab[(val + 1) >> 8] + 16;
481 static ALWAYS_INLINE
int bs_size_se(
int val) {
482 int tmp = 1 - val * 2;
486 return x264_ue_size_tab[tmp];
488 return x264_ue_size_tab[tmp >> 8] + 16;
491 static ALWAYS_INLINE
int bs_size_te(
int x,
int val) {
495 return x264_ue_size_tab[val + 1];
Definition: bitstream.h:22
Definition: bitstream.h:15
Definition: bitstream.h:9
Definition: bitstream.h:46
Definition: bitstream.h:33