9inline uint32_t get_bit(
const uint8_t *data,
size_t &bit)
11 size_t byte = bit>>0x3;
13 uint32_t res = (data[byte]>>(7-n))&1;
17inline uint32_t peek_bit(
const uint8_t *data,
size_t &bit)
19 size_t byte = bit>>0x3;
21 uint32_t res = (data[byte]>>(7-n))&1;
24inline uint32_t next_bits(
size_t n,
const uint8_t *data,
size_t bit)
28 for(uint32_t i=0; i<n; i++)
29 res = (res << 1) | get_bit(data, bit);
32inline uint32_t read_bits(
size_t n,
const uint8_t *data,
size_t &bit)
36 for(uint32_t i=0; i<n; i++)
37 res = (res << 1) | get_bit(data, bit);
40inline uint64_t read_bits64(
size_t n,
const uint8_t *data,
size_t &bit)
44 for(uint32_t i=0; i<n; i++)
45 res = (res << 1) | get_bit(data, bit);
50inline uint32_t parse_ue(
const uint8_t *data,
size_t &bit);
52inline uint32_t parse_ae(
const uint8_t * ,
size_t & )
57inline uint32_t parse_b(
size_t n,
const uint8_t *data,
size_t &bit) {
return read_bits(n, data, bit); }
58inline uint32_t parse_f(
size_t n,
const uint8_t *data,
size_t &bit) {
return read_bits(n, data, bit); }
59inline int32_t parse_i(
size_t n,
const uint8_t *data,
size_t &bit) {
return (int32_t)read_bits(n, data, bit); }
60inline int32_t parse_se(
const uint8_t *data,
size_t &bit)
62 uint32_t codeNum = parse_ue(data, bit);
63 uint32_t neg = (codeNum & 1) ^ 1;
64 return -(int32_t)neg * (((int32_t)codeNum+1)/2);
66inline uint32_t parse_u(
size_t n,
const uint8_t *data,
size_t &bit) {
return read_bits(n, data, bit); }
67inline uint64_t parse_u64(
size_t n,
const uint8_t *data,
size_t &bit) {
return read_bits64(n, data, bit); }
68inline uint32_t parse_ue(
const uint8_t *data,
size_t &bit)
70 int32_t leadingZeroBits = -1;
71 for(uint32_t b=0; !b; leadingZeroBits++)
72 b = get_bit(data, bit);
74 uint32_t codeNum = (1<<leadingZeroBits)-1+parse_u(leadingZeroBits, data, bit);
77inline uint32_t parse_ue(
const uint8_t *data,
size_t &bit,
size_t size)
79 int32_t leadingZeroBits = -1;
80 for(uint32_t b=0; !b; leadingZeroBits++){
81 b = get_bit(data, bit);
82 if(bit/8 >= size)
return 0;
85 uint32_t codeNum = (1<<leadingZeroBits)-1+parse_u(leadingZeroBits, data, bit);
88inline uint64_t parse_ue64(
const uint8_t *data,
size_t &bit)
90 int32_t leadingZeroBits = -1;
91 for(uint32_t b=0; !b; leadingZeroBits++)
92 b = get_bit(data, bit);
94 uint64_t codeNum = ((uint64_t)1<<leadingZeroBits)-1+parse_u64(leadingZeroBits, data, bit);
98inline uint32_t more_rbsp_data(
const uint8_t *data,
size_t size,
size_t bit)
100 if(bit>=size*8)
return 0x0;
101 size_t stop_bit = size*8-1;
102 while(!peek_bit(data, stop_bit)) stop_bit--;
103 if(bit<stop_bit)
return 0x1;
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....