diff options
| author | Daniel Caujolle-Bert <f1rmb@users.sourceforge.net> | 2003-10-13 11:47:11 +0000 |
|---|---|---|
| committer | Daniel Caujolle-Bert <f1rmb@users.sourceforge.net> | 2003-10-13 11:47:11 +0000 |
| commit | bf6b1747ae4bad46dbbf5fa2189a18b45c1d6b38 (patch) | |
| tree | 60ac612a5a60675173b00d73bf9aefc3b5085e34 /src/input/vcd/libvcd/bitvec.h | |
| parent | ee3b51f5df1a50e02d43d7cf81fbef19f61aa942 (diff) | |
| download | xine-lib-bf6b1747ae4bad46dbbf5fa2189a18b45c1d6b38.tar.gz xine-lib-bf6b1747ae4bad46dbbf5fa2189a18b45c1d6b38.tar.bz2 | |
Add vcdx plugin(CVS) and dependent libs(no CVS, broken API).
Ability to use external libs (--with-external-vcdnav), disable
vcdx build and build old vcd instead (--disable-vcdx).
This last feature is useful since vcdx take /hours/ to start
playback, that can help people who don't want vcd navigation.
Remove all .la files, even in subdirs (eg: post)
CVS patchset: 5505
CVS date: 2003/10/13 11:47:11
Diffstat (limited to 'src/input/vcd/libvcd/bitvec.h')
| -rw-r--r-- | src/input/vcd/libvcd/bitvec.h | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/src/input/vcd/libvcd/bitvec.h b/src/input/vcd/libvcd/bitvec.h new file mode 100644 index 000000000..ca0198ca2 --- /dev/null +++ b/src/input/vcd/libvcd/bitvec.h @@ -0,0 +1,131 @@ +/* + $Id: bitvec.h,v 1.1 2003/10/13 11:47:12 f1rmb Exp $ + + Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef __VCD_BITVEC_H__ +#define __VCD_BITVEC_H__ + +#include <libvcd/types.h> + +#include "assert.h" + +static inline bool +_vcd_bit_set_p (const uint32_t n, const unsigned bit) +{ + return ((n >> bit) & 0x1) == 0x1; +} + +static inline int +vcd_bitvec_align (int value, const int boundary) +{ + if (value % boundary) + value += (boundary - (value % boundary)); + + return value; +} + +/* + * PEEK + */ + +#define vcd_bitvec_peek_bits16(bitvec, offset) \ + vcd_bitvec_peek_bits ((bitvec), (offset), 16) + +static inline uint32_t +vcd_bitvec_peek_bits (const uint8_t bitvec[], + const unsigned offset, + const unsigned bits) +{ + uint32_t result = 0; + unsigned i = offset; + + vcd_assert (bits > 0 && bits <= 32); + +#if 0 + j = 0; + while (j < bits) + if (i % 8 || (bits - j) < 8) + { + result <<= 1; + if (_vcd_bit_set_p (bitvec[i >> 3], 7 - (i % 8))) + result |= 0x1; + j++, i++; + } + else + { + result <<= 8; + result |= bitvec[i >> 3]; + j += 8, i += 8; + } +#else + if (!(offset % 8) && !(bits % 8)) /* optimization */ + for (i = offset; i < (offset + bits); i+= 8) + { + result <<= 8; + result |= bitvec[i >> 3]; + } + else /* general case */ + for (i = offset; i < (offset + bits); i++) + { + result <<= 1; + if (_vcd_bit_set_p (bitvec[i >> 3], 7 - (i % 8))) + result |= 0x1; + } +#endif + + return result; +} + +static inline uint32_t +vcd_bitvec_peek_bits32 (const uint8_t bitvec[], unsigned offset) +{ + if (offset % 8) + return vcd_bitvec_peek_bits (bitvec, offset, 32); + + offset >>= 3; + + return (bitvec[offset] << 24 + | bitvec[offset + 1] << 16 + | bitvec[offset + 2] << 8 + | bitvec[offset + 3]); +} + +/* + * READ + */ + +static inline uint32_t +vcd_bitvec_read_bits (const uint8_t bitvec[], unsigned *offset, const unsigned bits) +{ + const unsigned i = *offset; + + *offset += bits; + + return vcd_bitvec_peek_bits (bitvec, i, bits); +} + +static inline bool +vcd_bitvec_read_bit (const uint8_t bitvec[], unsigned *offset) +{ + const unsigned i = (*offset)++; + + return _vcd_bit_set_p (bitvec[i >> 3], 7 - (i % 8)); +} + +#endif /* __VCD_BITVEC_H__ */ |
