Mercurial > libavcodec.hg
comparison vc1.c @ 3508:3d6e4ef3170d libavcodec
1000l: scale DC predictors instead of predicted value.
author | kostya |
---|---|
date | Fri, 21 Jul 2006 04:06:06 +0000 |
parents | 44e0a262d500 |
children | da6095607f26 |
comparison
equal
deleted
inserted
replaced
3507:44e0a262d500 | 3508:3d6e4ef3170d |
---|---|
1767 * C X | 1767 * C X |
1768 */ | 1768 */ |
1769 c = dc_val[ - 1]; | 1769 c = dc_val[ - 1]; |
1770 b = dc_val[ - 1 - wrap]; | 1770 b = dc_val[ - 1 - wrap]; |
1771 a = dc_val[ - wrap]; | 1771 a = dc_val[ - wrap]; |
1772 /* scale predictors if needed */ | |
1773 q1 = s->current_picture.qscale_table[mb_pos]; | |
1774 if(c_avail && (n!= 1 && n!=3)) { | |
1775 q2 = s->current_picture.qscale_table[mb_pos - 1]; | |
1776 if(q2 && q2 != q1) | |
1777 c = (c * s->y_dc_scale_table[q2] * vc1_dqscale[s->y_dc_scale_table[q1] - 1] + 0x20000) >> 18; | |
1778 } | |
1779 if(a_avail && (n!= 2 && n!=3)) { | |
1780 q2 = s->current_picture.qscale_table[mb_pos - s->mb_stride]; | |
1781 if(q2 && q2 != q1) | |
1782 a = (a * s->y_dc_scale_table[q2] * vc1_dqscale[s->y_dc_scale_table[q1] - 1] + 0x20000) >> 18; | |
1783 } | |
1784 if(a_avail && c_avail && (n!=3)) { | |
1785 int off = mb_pos; | |
1786 if(n != 1) off--; | |
1787 if(n != 2) off -= s->mb_stride; | |
1788 q2 = s->current_picture.qscale_table[off]; | |
1789 if(q2 && q2 != q1) | |
1790 b = (b * s->y_dc_scale_table[q2] * vc1_dqscale[s->y_dc_scale_table[q1] - 1] + 0x20000) >> 18; | |
1791 } | |
1772 | 1792 |
1773 if(a_avail && c_avail) { | 1793 if(a_avail && c_avail) { |
1774 if(abs(a - b) <= abs(b - c)) { | 1794 if(abs(a - b) <= abs(b - c)) { |
1775 pred = c; | 1795 pred = c; |
1776 *dir_ptr = 1;//left | 1796 *dir_ptr = 1;//left |
1777 q2 = s->current_picture.qscale_table[mb_pos - 1]; | |
1778 } else { | 1797 } else { |
1779 pred = a; | 1798 pred = a; |
1780 *dir_ptr = 0;//top | 1799 *dir_ptr = 0;//top |
1781 q2 = s->current_picture.qscale_table[mb_pos - s->mb_stride]; | |
1782 } | 1800 } |
1783 } else if(a_avail) { | 1801 } else if(a_avail) { |
1784 pred = a; | 1802 pred = a; |
1785 *dir_ptr = 0;//top | 1803 *dir_ptr = 0;//top |
1786 q2 = s->current_picture.qscale_table[mb_pos - s->mb_stride]; | |
1787 } else if(c_avail) { | 1804 } else if(c_avail) { |
1788 pred = c; | 1805 pred = c; |
1789 *dir_ptr = 1;//left | 1806 *dir_ptr = 1;//left |
1790 q2 = s->current_picture.qscale_table[mb_pos - 1]; | |
1791 } else { | 1807 } else { |
1792 pred = 0; | 1808 pred = 0; |
1793 *dir_ptr = 1;//left | 1809 *dir_ptr = 1;//left |
1794 } | |
1795 | |
1796 /* scale coeffs if needed */ | |
1797 q1 = s->current_picture.qscale_table[mb_pos]; | |
1798 if(n && n<4) q2=q1; | |
1799 | |
1800 if(q2 && q1!=q2) { | |
1801 pred = (pred * s->y_dc_scale_table[q2] * vc1_dqscale[s->y_dc_scale_table[q1] - 1] + 0x20000) >> 18; | |
1802 } | 1810 } |
1803 | 1811 |
1804 /* update predictor */ | 1812 /* update predictor */ |
1805 *dc_val_ptr = &dc_val[0]; | 1813 *dc_val_ptr = &dc_val[0]; |
1806 return pred; | 1814 return pred; |