]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/flacdec.c
Merge commit '0f5ad12ba2b538cb329c507ecc914e06bfa70194'
[ffmpeg] / libavcodec / flacdec.c
index 567f6f88a787cad84db6c02437db38e92f9ae674..6c8ba157773b98c4351f48d4e0fdcd55a664eaf7 100644 (file)
@@ -220,12 +220,13 @@ static int get_metadata_size(const uint8_t *buf, int buf_size)
 
 static int decode_residuals(FLACContext *s, int32_t *decoded, int pred_order)
 {
+    GetBitContext gb = s->gb;
     int i, tmp, partition, method_type, rice_order;
     int rice_bits, rice_esc;
     int samples;
 
-    method_type = get_bits(&s->gb, 2);
-    rice_order  = get_bits(&s->gb, 4);
+    method_type = get_bits(&gb, 2);
+    rice_order  = get_bits(&gb, 4);
 
     samples   = s->blocksize >> rice_order;
     rice_bits = 4 + method_type;
@@ -253,15 +254,15 @@ static int decode_residuals(FLACContext *s, int32_t *decoded, int pred_order)
     }
 
     for (partition = 0; partition < (1 << rice_order); partition++) {
-        tmp = get_bits(&s->gb, rice_bits);
+        tmp = get_bits(&gb, rice_bits);
         if (tmp == rice_esc) {
-            tmp = get_bits(&s->gb, 5);
+            tmp = get_bits(&gb, 5);
             for (; i < samples; i++)
-                *decoded++ = get_sbits_long(&s->gb, tmp);
+                *decoded++ = get_sbits_long(&gb, tmp);
         } else {
             int real_limit = tmp ? (INT_MAX >> tmp) + 2 : INT_MAX;
             for (; i < samples; i++) {
-                int v = get_sr_golomb_flac(&s->gb, tmp, real_limit, 0);
+                int v = get_sr_golomb_flac(&gb, tmp, real_limit, 0);
                 if (v == 0x80000000){
                     av_log(s->avctx, AV_LOG_ERROR, "invalid residual\n");
                     return AVERROR_INVALIDDATA;
@@ -273,6 +274,8 @@ static int decode_residuals(FLACContext *s, int32_t *decoded, int pred_order)
         i= 0;
     }
 
+    s->gb = gb;
+
     return 0;
 }