]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/lzwenc.c
Add approved chunks to AAC encoder
[ffmpeg] / libavcodec / lzwenc.c
index 5b448953c83f5bb5f99067be63da36304a5a75f1..3a24af34713111a7f7d264c1fdaec413524bd18b 100644 (file)
@@ -183,7 +183,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_bits_count(&s->pb) >> 3;
     ret -= s->output_bytes;
     s->output_bytes += ret;
     return ret;
@@ -220,30 +220,27 @@ void ff_lzw_encode_init(LZWEncodeState * s, uint8_t * outbuf, int outsize, int m
 int ff_lzw_encode(LZWEncodeState * s, const uint8_t * inbuf, int insize)
 {
     int i;
-    int code_prefix = s->last_code;
 
     if(insize * 3 > (s->bufsize - s->output_bytes) * 2){
         return -1;
     }
 
-    if (code_prefix == LZW_PREFIX_EMPTY)
+    if (s->last_code == LZW_PREFIX_EMPTY)
         clearTable(s);
 
     for (i = 0; i < insize; i++) {
         uint8_t c = *inbuf++;
-        int code = findCode(s, c, code_prefix);
-        if (s->tab[code].hash_prefix != LZW_PREFIX_FREE) {
-            code_prefix = s->tab[code].code;
-        } else {
-            writeCode(s, code_prefix);
-            addCode(s, c, code_prefix, code);
-            code_prefix = s->tab[hash(0, c)].code;
+        int code = findCode(s, c, s->last_code);
+        if (s->tab[code].hash_prefix == LZW_PREFIX_FREE) {
+            writeCode(s, s->last_code);
+            addCode(s, c, s->last_code, code);
+            code= hash(0, c);
         }
+        s->last_code = s->tab[code].code;
         if (s->tabsize >= s->maxcode - 1) {
             clearTable(s);
         }
     }
-    s->last_code = code_prefix;
 
     return writtenBytes(s);
 }