00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <stdint.h>
00023
00024 #ifndef _BS_H
00025 #define _BS_H 1
00026
00027 #ifdef __cplusplus
00028 extern "C" {
00029 #endif
00030
00031 typedef struct
00032 {
00033 uint8_t* start;
00034 uint8_t* p;
00035 uint8_t* end;
00036 int bits_left;
00037 } bs_t;
00038
00039 void bs_init(bs_t* b, uint8_t* buf, int size);
00040 uint32_t bs_byte_aligned(bs_t* b);
00041 uint32_t bs_eof(bs_t* b);
00042 int bs_pos(bs_t* b);
00043
00044 uint32_t bs_read_u1(bs_t* b);
00045 uint32_t bs_read_u(bs_t* b, int n);
00046 uint32_t bs_read_f(bs_t* b, int n);
00047 uint32_t bs_read_u8(bs_t* b);
00048 uint32_t bs_read_ue(bs_t* b);
00049 int32_t bs_read_se(bs_t* b);
00050
00051 void bs_write_u1(bs_t* b, uint32_t v);
00052 void bs_write_u(bs_t* b, int n, uint32_t v);
00053 void bs_write_f(bs_t* b, int n, uint32_t v);
00054 void bs_write_u8(bs_t* b, uint32_t v);
00055 void bs_write_ue(bs_t* b, uint32_t v);
00056 void bs_write_se(bs_t* b, int32_t v);
00057
00058 #ifdef __cplusplus
00059 }
00060 #endif
00061
00062 #endif