# HG changeset patch # User bcoudurier # Date 1231892863 0 # Node ID d1e300c41ed53ff2e4d4f1afd8793043617a3763 # Parent 7a463923ecd168e1fbd35f08de774f446cda3655 cleanup gif, use BISTREAM_WRITER_LE diff -r 7a463923ecd1 -r d1e300c41ed5 gif.c --- a/gif.c Tue Jan 13 23:44:16 2009 +0000 +++ b/gif.c Wed Jan 14 00:27:43 2009 +0000 @@ -43,6 +43,11 @@ #include "avcodec.h" #include "bytestream.h" + +/* The GIF format uses reversed order for bitstreams... */ +/* at least they don't use PDP_ENDIAN :) */ +#define BITSTREAM_WRITER_LE + #include "bitstream.h" /* bitstream minipacket size */ @@ -104,68 +109,6 @@ { 0xff, 0xff, 0x00 }, { 0xff, 0xff, 0x33 }, { 0xff, 0xff, 0x66 }, { 0xff, 0xff, 0x99 }, { 0xff, 0xff, 0xcc }, { 0xff, 0xff, 0xff }, }; -/* The GIF format uses reversed order for bitstreams... */ -/* at least they don't use PDP_ENDIAN :) */ -/* so we 'extend' PutBitContext. hmmm, OOP :) */ -/* seems this thing changed slightly since I wrote it... */ - -#ifdef ALT_BITSTREAM_WRITER -# error no ALT_BITSTREAM_WRITER support for now -#endif - -static void gif_put_bits_rev(PutBitContext *s, int n, unsigned int value) -{ - unsigned int bit_buf; - int bit_cnt; - - // printf("put_bits=%d %x\n", n, value); - assert(n == 32 || value < (1U << n)); - - bit_buf = s->bit_buf; - bit_cnt = 32 - s->bit_left; /* XXX:lazyness... was = s->bit_cnt; */ - - // printf("n=%d value=%x cnt=%d buf=%x\n", n, value, bit_cnt, bit_buf); - /* XXX: optimize */ - if (n < (32-bit_cnt)) { - bit_buf |= value << (bit_cnt); - bit_cnt+=n; - } else { - bit_buf |= value << (bit_cnt); - - bytestream_put_le32(&s->buf_ptr, bit_buf); - - //printf("bitbuf = %08x\n", bit_buf); - if (s->buf_ptr >= s->buf_end) - abort(); -// flush_buffer_rev(s); - bit_cnt=bit_cnt + n - 32; - if (bit_cnt == 0) { - bit_buf = 0; - } else { - bit_buf = value >> (n - bit_cnt); - } - } - - s->bit_buf = bit_buf; - s->bit_left = 32 - bit_cnt; -} - -/* pad the end of the output stream with zeros */ -static void gif_flush_put_bits_rev(PutBitContext *s) -{ - while (s->bit_left < 32) { - /* XXX: should test end of buffer */ - *s->buf_ptr++=s->bit_buf & 0xff; - s->bit_buf>>=8; - s->bit_left+=8; - } -// flush_buffer_rev(s); - s->bit_left=32; - s->bit_buf=0; -} - -/* !RevPutBitContext */ - /* GIF header */ static int gif_image_write_header(uint8_t **bytestream, int width, int height, int loop_count, @@ -269,7 +212,7 @@ w = width; while(left>0) { - gif_put_bits_rev(&p, 9, 0x0100); /* clear code */ + put_bits(&p, 9, 0x0100); /* clear code */ for(i=(left 0) { bytestream_put_byte(bytestream, pbBufPtr(&p) - p.buf); /* byte count of the packet */