diff options
author | Oded Shimon <ods15@ods15.dyndns.org> | 2006-10-02 05:56:10 +0000 |
---|---|---|
committer | Oded Shimon <ods15@ods15.dyndns.org> | 2006-10-02 05:56:10 +0000 |
commit | 22c72a08df361824bca6d4b987482b9ec7092968 (patch) | |
tree | 20679e67648e7a8fbe01b1319a4a247b7c56c36c /libavcodec/vorbis_enc.c | |
parent | b4b6ff3a55605532c015f746342ab92fcc512251 (diff) | |
download | ffmpeg-22c72a08df361824bca6d4b987482b9ec7092968.tar.gz |
Original Commit: r31 | ods15 | 2006-09-22 18:33:17 +0300 (Fri, 22 Sep 2006) | 2 lines
use my own bitpacker
Originally committed as revision 6440 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/vorbis_enc.c')
-rw-r--r-- | libavcodec/vorbis_enc.c | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/libavcodec/vorbis_enc.c b/libavcodec/vorbis_enc.c index 80a29c5a7b..53af5b0f40 100644 --- a/libavcodec/vorbis_enc.c +++ b/libavcodec/vorbis_enc.c @@ -27,8 +27,8 @@ #undef NDEBUG #include <assert.h> -#define ALT_BITSTREAM_WRITER -#include "bitstream.h" +//#define ALT_BITSTREAM_WRITER +//#include "bitstream.h" typedef struct { int len; @@ -108,6 +108,52 @@ typedef struct { vorbis_mode_t * modes; } venc_context_t; +typedef struct { + int total; + int total_pos; + int pos; + uint8_t * buf_ptr; +} PutBitContext; + +static inline void init_put_bits(PutBitContext * pb, uint8_t * buf, int buffer_len) { + pb->total = buffer_len * 8; + pb->total_pos = 0; + pb->pos = 0; + pb->buf_ptr = buf; +} + +static void put_bits(PutBitContext * pb, int bits, uint64_t val) { + if ((pb->total_pos += bits) >= pb->total) return; + if (!bits) return; + if (pb->pos) { + if (pb->pos > bits) { + *pb->buf_ptr |= val << (8 - pb->pos); + pb->pos -= bits; + bits = 0; + } else { + *pb->buf_ptr++ |= (val << (8 - pb->pos)) & 0xFF; + val >>= pb->pos; + bits -= pb->pos; + pb->pos = 0; + } + } + for (; bits >= 8; bits -= 8) { + *pb->buf_ptr++ = val & 0xFF; + val >>= 8; + } + if (bits) { + *pb->buf_ptr = val; + pb->pos = 8 - bits; + } +} + +static inline void flush_put_bits(PutBitContext * pb) { +} + +static inline int put_bits_count(PutBitContext * pb) { + return pb->total_pos; +} + static int cb_lookup_vals(int lookup, int dimentions, int entries) { if (lookup == 1) { int tmp, i; |