]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/lzwenc.c
avformat/mpegtsenc: move is_dvb_subtitle/is_dvb_teletext initialization upwards
[ffmpeg] / libavcodec / lzwenc.c
index 03080ee58729325d5defca45ea37b5ac79cc236e..6c45f7cc37e65438b04bcd2519bbc86e5e7e2bdd 100644 (file)
@@ -60,7 +60,7 @@ typedef struct LZWEncodeState {
     int output_bytes;        ///< Number of written bytes
     int last_code;           ///< Value of last output code or LZW_PREFIX_EMPTY
     enum FF_LZW_MODES mode;  ///< TIFF or GIF
-    void (*put_bits)(PutBitContext *, int, unsigned); ///< GIF is LE while TIFF is BE
+    int little_endian;       ///< GIF is LE while TIFF is BE
 }LZWEncodeState;
 
 
@@ -113,7 +113,10 @@ static inline int hashOffset(const int head)
 static inline void writeCode(LZWEncodeState * s, int c)
 {
     av_assert2(0 <= c && c < 1 << s->bits);
-    s->put_bits(&s->pb, s->bits, c);
+    if (s->little_endian)
+        put_bits_le(&s->pb, s->bits, c);
+    else
+        put_bits(&s->pb, s->bits, c);
 }
 
 
@@ -186,7 +189,7 @@ static void clearTable(LZWEncodeState * s)
  * @return Number of bytes written
  */
 static int writtenBytes(LZWEncodeState *s){
-    int ret = put_bits_count(&s->pb) >> 3;
+    int ret = put_bytes_count(&s->pb, 0);
     ret -= s->output_bytes;
     s->output_bytes += ret;
     return ret;
@@ -200,8 +203,7 @@ static int writtenBytes(LZWEncodeState *s){
  * @param maxbits Maximum length of code
  */
 void ff_lzw_encode_init(LZWEncodeState *s, uint8_t *outbuf, int outsize,
-                        int maxbits, enum FF_LZW_MODES mode,
-                        void (*lzw_put_bits)(PutBitContext *, int, unsigned))
+                        int maxbits, enum FF_LZW_MODES mode, int little_endian)
 {
     s->clear_code = 256;
     s->end_code = 257;
@@ -214,7 +216,7 @@ void ff_lzw_encode_init(LZWEncodeState *s, uint8_t *outbuf, int outsize,
     s->last_code = LZW_PREFIX_EMPTY;
     s->bits = 9;
     s->mode = mode;
-    s->put_bits = lzw_put_bits;
+    s->little_endian = little_endian;
 }
 
 /**
@@ -257,16 +259,22 @@ int ff_lzw_encode(LZWEncodeState * s, const uint8_t * inbuf, int insize)
  * @param s LZW state
  * @return Number of bytes written or -1 on error
  */
-int ff_lzw_encode_flush(LZWEncodeState *s,
-                        void (*lzw_flush_put_bits)(PutBitContext *))
+int ff_lzw_encode_flush(LZWEncodeState *s)
 {
     if (s->last_code != -1)
         writeCode(s, s->last_code);
     writeCode(s, s->end_code);
-    if (s->mode == FF_LZW_GIF)
-        s->put_bits(&s->pb, 1, 0);
+    if (s->little_endian) {
+        if (s->mode == FF_LZW_GIF)
+            put_bits_le(&s->pb, 1, 0);
 
-    lzw_flush_put_bits(&s->pb);
+        flush_put_bits_le(&s->pb);
+    } else {
+        if (s->mode == FF_LZW_GIF)
+            put_bits(&s->pb, 1, 0);
+
+        flush_put_bits(&s->pb);
+    }
     s->last_code = -1;
 
     return writtenBytes(s);