comparison dv.c @ 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 5d305fcbf54e
comparison
equal deleted inserted replaced
3139:e58fb7ffbb4f 3140:d6e057513aa8
726 } 726 }
727 727
728 static inline void dv_guess_qnos(EncBlockInfo* blks, int* qnos) 728 static inline void dv_guess_qnos(EncBlockInfo* blks, int* qnos)
729 { 729 {
730 int size[5]; 730 int size[5];
731 int i, j, k, a, prev; 731 int i, j, k, a, prev, a2;
732 EncBlockInfo* b; 732 EncBlockInfo* b;
733 733
734 do { 734 do {
735 b = blks; 735 b = blks;
736 for (i=0; i<5; i++) { 736 for (i=0; i<5; i++) {
749 b->mb[k] >>= 1; 749 b->mb[k] >>= 1;
750 if (b->mb[k]) { 750 if (b->mb[k]) {
751 b->bit_size[a] += dv_rl2vlc_size(k - prev - 1, b->mb[k]); 751 b->bit_size[a] += dv_rl2vlc_size(k - prev - 1, b->mb[k]);
752 prev= k; 752 prev= k;
753 } else { 753 } else {
754 if(b->next[k] >= mb_area_start[a+1] && b->next[k]<64){
755 for(a2=a+1; b->next[k] >= mb_area_start[a2+1]; a2++);
756 assert(a2<4);
757 assert(b->mb[b->next[k]]);
758 b->bit_size[a2] += dv_rl2vlc_size(b->next[k] - prev - 1, b->mb[b->next[k]])
759 -dv_rl2vlc_size(b->next[k] - k - 1, b->mb[b->next[k]]);
760 }
754 b->next[prev] = b->next[k]; 761 b->next[prev] = b->next[k];
755 } 762 }
756 } 763 }
757 b->prev[a+1]= prev; 764 b->prev[a+1]= prev;
758 } 765 }
759 size[i] += b->bit_size[a]; 766 size[i] += b->bit_size[a];
760 } 767 }
761 } 768 }
762 } 769 }
763 } while ((vs_total_ac_bits < size[0] + size[1] + size[2] + size[3] + size[4]) && 770 if(vs_total_ac_bits >= size[0] + size[1] + size[2] + size[3] + size[4])
764 (qnos[0]|qnos[1]|qnos[2]|qnos[3]|qnos[4])); 771 return;
772 } while (qnos[0]|qnos[1]|qnos[2]|qnos[3]|qnos[4]);
773
774
775 for(a=2; a==2 || vs_total_ac_bits < size[0]; a+=a){
776 b = blks;
777 size[0] = 0;
778 for (j=0; j<6*5; j++, b++) {
779 prev= b->prev[0];
780 for (k= b->next[prev]; k<64; k= b->next[k]) {
781 if(b->mb[k] < a && b->mb[k] > -a){
782 b->next[prev] = b->next[k];
783 }else{
784 size[0] += dv_rl2vlc_size(k - prev - 1, b->mb[k]);
785 prev= k;
786 }
787 }
788 }
789 }
765 } 790 }
766 791
767 /* 792 /*
768 * This is a very rough initial implementaion. The performance is 793 * This is a very rough initial implementaion. The performance is
769 * horrible and the weighting is missing. But it's missing from the 794 * horrible and the weighting is missing. But it's missing from the