Mercurial > libavcodec.hg
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 |