Mercurial > libavcodec.hg
diff mpegvideo.c @ 711:dcbcf9676c9f libavcodec
optimizing mpeg1_decode_block()
author | michaelni |
---|---|
date | Mon, 30 Sep 2002 16:14:14 +0000 |
parents | afeff6ccb7f5 |
children | 6cba3b6196f0 |
line wrap: on
line diff
--- a/mpegvideo.c Mon Sep 30 10:06:17 2002 +0000 +++ b/mpegvideo.c Mon Sep 30 16:14:14 2002 +0000 @@ -1517,8 +1517,7 @@ static inline void put_dct(MpegEncContext *s, DCTELEM *block, int i, UINT8 *dest, int line_size) { - if (!s->mpeg2) - s->dct_unquantize(s, block, i, s->qscale); + s->dct_unquantize(s, block, i, s->qscale); s->idct_put (dest, line_size, block); } @@ -1723,7 +1722,8 @@ if(s->hurry_up>1) goto the_end; /* add dct residue */ - if(s->encoding || !(s->mpeg2 || s->h263_msmpeg4 || (s->codec_id==CODEC_ID_MPEG4 && !s->mpeg_quant))){ + if(s->encoding || !( s->mpeg2 || s->h263_msmpeg4 || s->codec_id==CODEC_ID_MPEG1VIDEO + || (s->codec_id==CODEC_ID_MPEG4 && !s->mpeg_quant))){ add_dequant_dct(s, block[0], 0, dest_y, dct_linesize); add_dequant_dct(s, block[1], 1, dest_y + 8, dct_linesize); add_dequant_dct(s, block[2], 2, dest_y + dct_offset, dct_linesize); @@ -1746,14 +1746,26 @@ } } else { /* dct only in intra block */ - put_dct(s, block[0], 0, dest_y, dct_linesize); - put_dct(s, block[1], 1, dest_y + 8, dct_linesize); - put_dct(s, block[2], 2, dest_y + dct_offset, dct_linesize); - put_dct(s, block[3], 3, dest_y + dct_offset + 8, dct_linesize); + if(s->encoding || !(s->mpeg2 || s->codec_id==CODEC_ID_MPEG1VIDEO)){ + put_dct(s, block[0], 0, dest_y, dct_linesize); + put_dct(s, block[1], 1, dest_y + 8, dct_linesize); + put_dct(s, block[2], 2, dest_y + dct_offset, dct_linesize); + put_dct(s, block[3], 3, dest_y + dct_offset + 8, dct_linesize); - if(!(s->flags&CODEC_FLAG_GRAY)){ - put_dct(s, block[4], 4, dest_cb, s->uvlinesize); - put_dct(s, block[5], 5, dest_cr, s->uvlinesize); + if(!(s->flags&CODEC_FLAG_GRAY)){ + put_dct(s, block[4], 4, dest_cb, s->uvlinesize); + put_dct(s, block[5], 5, dest_cr, s->uvlinesize); + } + }else{ + s->idct_put(dest_y , dct_linesize, block[0]); + s->idct_put(dest_y + 8, dct_linesize, block[1]); + s->idct_put(dest_y + dct_offset , dct_linesize, block[2]); + s->idct_put(dest_y + dct_offset + 8, dct_linesize, block[3]); + + if(!(s->flags&CODEC_FLAG_GRAY)){ + s->idct_put(dest_cb, s->uvlinesize, block[4]); + s->idct_put(dest_cr, s->uvlinesize, block[5]); + } } } }