changeset 3140:d6e057513aa8 libavcodec

fixing dv_guess_qnos() roman, dont hesitate to reverse this and solve it differntly if you want ...
author michael
date Thu, 23 Feb 2006 08:56:53 +0000
parents e58fb7ffbb4f
children 25493c849d70
files dv.c
diffstat 1 files changed, 28 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/dv.c	Thu Feb 23 00:16:45 2006 +0000
+++ b/dv.c	Thu Feb 23 08:56:53 2006 +0000
@@ -728,7 +728,7 @@
 static inline void dv_guess_qnos(EncBlockInfo* blks, int* qnos)
 {
     int size[5];
-    int i, j, k, a, prev;
+    int i, j, k, a, prev, a2;
     EncBlockInfo* b;
 
     do {
@@ -751,6 +751,13 @@
                            b->bit_size[a] += dv_rl2vlc_size(k - prev - 1, b->mb[k]);
                            prev= k;
                        } else {
+                           if(b->next[k] >= mb_area_start[a+1] && b->next[k]<64){
+                                for(a2=a+1; b->next[k] >= mb_area_start[a2+1]; a2++);
+                                assert(a2<4);
+                                assert(b->mb[b->next[k]]);
+                                b->bit_size[a2] += dv_rl2vlc_size(b->next[k] - prev - 1, b->mb[b->next[k]])
+                                                  -dv_rl2vlc_size(b->next[k] -    k - 1, b->mb[b->next[k]]);
+                           }
                            b->next[prev] = b->next[k];
                        }
                     }
@@ -760,8 +767,26 @@
              }
           }
        }
-    } while ((vs_total_ac_bits < size[0] + size[1] + size[2] + size[3] + size[4]) &&
-             (qnos[0]|qnos[1]|qnos[2]|qnos[3]|qnos[4]));
+       if(vs_total_ac_bits >= size[0] + size[1] + size[2] + size[3] + size[4])
+            return;
+    } while (qnos[0]|qnos[1]|qnos[2]|qnos[3]|qnos[4]);
+
+
+    for(a=2; a==2 || vs_total_ac_bits < size[0]; a+=a){
+        b = blks;
+        size[0] = 0;
+        for (j=0; j<6*5; j++, b++) {
+            prev= b->prev[0];
+            for (k= b->next[prev]; k<64; k= b->next[k]) {
+                if(b->mb[k] < a && b->mb[k] > -a){
+                    b->next[prev] = b->next[k];
+                }else{
+                    size[0] += dv_rl2vlc_size(k - prev - 1, b->mb[k]);
+                    prev= k;
+                }
+            }
+        }
+    }
 }
 
 /*