Advertisement
Guest User

Untitled

a guest
Sep 7th, 2012
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.89 KB | None | 0 0
  1. typedef struct
  2. {
  3. uint8_t *buf;
  4. int nbits;
  5. uint8_t cur_val;
  6. } MyPutBitContext;
  7.  
  8. static void init_my_put_bits(MyPutBitContext *pb, uint8_t *buf, size_t buf_len)
  9. {
  10. pb->buf = buf;
  11. pb->nbits = 0;
  12. pb->cur_val = 0;
  13. }
  14.  
  15. static void my_put_bits(MyPutBitContext *pb, int nbits, int val)
  16. {
  17. if (nbits == 8) {
  18. val >>= 2;
  19. *pb->buf++ = val;
  20. return;
  21. }
  22. if (nbits == 16) {
  23. *pb->buf++ = val & 0xFF;
  24. *pb->buf++ = val >> 8;
  25. return;
  26. }
  27.  
  28. assert(nbits == 10);
  29. while (nbits) {
  30. int add_nbits = FFMIN(8 - pb->nbits, nbits);
  31. pb->cur_val |= (val << pb->nbits);
  32. pb->nbits += add_nbits;
  33. nbits -= add_nbits;
  34. val >>= add_nbits;
  35. if (pb->nbits == 8) {
  36. *pb->buf++ = pb->cur_val;
  37. pb->cur_val = 0;
  38. pb->nbits = 0;
  39. }
  40. }
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement