slim_single_codec.h
Go to the documentation of this file.00001
00002
00007
00008 #ifndef SLIM_SINGLE_CODEC_H
00009 #define SLIM_SINGLE_CODEC_H
00010
00011 #include "bitstream.h"
00012
00013
00014
00019 inline void mexp_golomb_write(obitstream *ob, uint32_t u,
00020 unsigned int order=1) {
00021 unsigned int n = bit_size(u);
00022 if (n > order) {
00023 ob->write_unary(n-order);
00024 ob->writebits(u, n-1);
00025 } else {
00026 ob->write_unary(0);
00027 ob->writebits(u, order);
00028 }
00029 }
00030
00031
00032
00037 inline uint32_t mexp_golomb_read_u32(ibitstream *ib,
00038 unsigned int order=1) {
00039
00040 uint32_t n_minus_order = ib->read_unary();
00041 if (n_minus_order > 0) {
00042 int n_minus_1 = n_minus_order + order - 1;
00043
00044 uint32_t uval = ib->readbits(n_minus_1);
00045 return uval | bitNset[n_minus_1];
00046 } else {
00047 return ib->readbits(order);
00048 }
00049 }
00050
00051
00052
00053
00054
00055 #endif // #ifndef SLIM_SINGLE_CODEC_H