Mercurial > libavcodec.hg
comparison mpegvideo.c @ 711:dcbcf9676c9f libavcodec
optimizing mpeg1_decode_block()
author | michaelni |
---|---|
date | Mon, 30 Sep 2002 16:14:14 +0000 |
parents | afeff6ccb7f5 |
children | 6cba3b6196f0 |
comparison
equal
deleted
inserted
replaced
710:97377ab86647 | 711:dcbcf9676c9f |
---|---|
1515 | 1515 |
1516 /* put block[] to dest[] */ | 1516 /* put block[] to dest[] */ |
1517 static inline void put_dct(MpegEncContext *s, | 1517 static inline void put_dct(MpegEncContext *s, |
1518 DCTELEM *block, int i, UINT8 *dest, int line_size) | 1518 DCTELEM *block, int i, UINT8 *dest, int line_size) |
1519 { | 1519 { |
1520 if (!s->mpeg2) | 1520 s->dct_unquantize(s, block, i, s->qscale); |
1521 s->dct_unquantize(s, block, i, s->qscale); | |
1522 s->idct_put (dest, line_size, block); | 1521 s->idct_put (dest, line_size, block); |
1523 } | 1522 } |
1524 | 1523 |
1525 /* add block[] to dest[] */ | 1524 /* add block[] to dest[] */ |
1526 static inline void add_dct(MpegEncContext *s, | 1525 static inline void add_dct(MpegEncContext *s, |
1721 | 1720 |
1722 /* skip dequant / idct if we are really late ;) */ | 1721 /* skip dequant / idct if we are really late ;) */ |
1723 if(s->hurry_up>1) goto the_end; | 1722 if(s->hurry_up>1) goto the_end; |
1724 | 1723 |
1725 /* add dct residue */ | 1724 /* add dct residue */ |
1726 if(s->encoding || !(s->mpeg2 || s->h263_msmpeg4 || (s->codec_id==CODEC_ID_MPEG4 && !s->mpeg_quant))){ | 1725 if(s->encoding || !( s->mpeg2 || s->h263_msmpeg4 || s->codec_id==CODEC_ID_MPEG1VIDEO |
1726 || (s->codec_id==CODEC_ID_MPEG4 && !s->mpeg_quant))){ | |
1727 add_dequant_dct(s, block[0], 0, dest_y, dct_linesize); | 1727 add_dequant_dct(s, block[0], 0, dest_y, dct_linesize); |
1728 add_dequant_dct(s, block[1], 1, dest_y + 8, dct_linesize); | 1728 add_dequant_dct(s, block[1], 1, dest_y + 8, dct_linesize); |
1729 add_dequant_dct(s, block[2], 2, dest_y + dct_offset, dct_linesize); | 1729 add_dequant_dct(s, block[2], 2, dest_y + dct_offset, dct_linesize); |
1730 add_dequant_dct(s, block[3], 3, dest_y + dct_offset + 8, dct_linesize); | 1730 add_dequant_dct(s, block[3], 3, dest_y + dct_offset + 8, dct_linesize); |
1731 | 1731 |
1744 add_dct(s, block[5], 5, dest_cr, s->uvlinesize); | 1744 add_dct(s, block[5], 5, dest_cr, s->uvlinesize); |
1745 } | 1745 } |
1746 } | 1746 } |
1747 } else { | 1747 } else { |
1748 /* dct only in intra block */ | 1748 /* dct only in intra block */ |
1749 put_dct(s, block[0], 0, dest_y, dct_linesize); | 1749 if(s->encoding || !(s->mpeg2 || s->codec_id==CODEC_ID_MPEG1VIDEO)){ |
1750 put_dct(s, block[1], 1, dest_y + 8, dct_linesize); | 1750 put_dct(s, block[0], 0, dest_y, dct_linesize); |
1751 put_dct(s, block[2], 2, dest_y + dct_offset, dct_linesize); | 1751 put_dct(s, block[1], 1, dest_y + 8, dct_linesize); |
1752 put_dct(s, block[3], 3, dest_y + dct_offset + 8, dct_linesize); | 1752 put_dct(s, block[2], 2, dest_y + dct_offset, dct_linesize); |
1753 | 1753 put_dct(s, block[3], 3, dest_y + dct_offset + 8, dct_linesize); |
1754 if(!(s->flags&CODEC_FLAG_GRAY)){ | 1754 |
1755 put_dct(s, block[4], 4, dest_cb, s->uvlinesize); | 1755 if(!(s->flags&CODEC_FLAG_GRAY)){ |
1756 put_dct(s, block[5], 5, dest_cr, s->uvlinesize); | 1756 put_dct(s, block[4], 4, dest_cb, s->uvlinesize); |
1757 put_dct(s, block[5], 5, dest_cr, s->uvlinesize); | |
1758 } | |
1759 }else{ | |
1760 s->idct_put(dest_y , dct_linesize, block[0]); | |
1761 s->idct_put(dest_y + 8, dct_linesize, block[1]); | |
1762 s->idct_put(dest_y + dct_offset , dct_linesize, block[2]); | |
1763 s->idct_put(dest_y + dct_offset + 8, dct_linesize, block[3]); | |
1764 | |
1765 if(!(s->flags&CODEC_FLAG_GRAY)){ | |
1766 s->idct_put(dest_cb, s->uvlinesize, block[4]); | |
1767 s->idct_put(dest_cr, s->uvlinesize, block[5]); | |
1768 } | |
1757 } | 1769 } |
1758 } | 1770 } |
1759 } | 1771 } |
1760 the_end: | 1772 the_end: |
1761 emms_c(); //FIXME remove | 1773 emms_c(); //FIXME remove |