Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef struct
- {
- uint8_t *buf;
- int nbits;
- uint8_t cur_val;
- } MyPutBitContext;
- static void init_my_put_bits(MyPutBitContext *pb, uint8_t *buf, size_t buf_len)
- {
- pb->buf = buf;
- pb->nbits = 0;
- pb->cur_val = 0;
- }
- static void my_put_bits(MyPutBitContext *pb, int nbits, int val)
- {
- if (nbits == 8) {
- val >>= 2;
- *pb->buf++ = val;
- return;
- }
- if (nbits == 16) {
- *pb->buf++ = val & 0xFF;
- *pb->buf++ = val >> 8;
- return;
- }
- assert(nbits == 10);
- while (nbits) {
- int add_nbits = FFMIN(8 - pb->nbits, nbits);
- pb->cur_val |= (val << pb->nbits);
- pb->nbits += add_nbits;
- nbits -= add_nbits;
- val >>= add_nbits;
- if (pb->nbits == 8) {
- *pb->buf++ = pb->cur_val;
- pb->cur_val = 0;
- pb->nbits = 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement