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