diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2002-09-30 16:14:14 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2002-09-30 16:14:14 +0000 |
commit | a02017367b4a733b7ac208ebc7d46ef6db9947ed (patch) | |
tree | e4e5b6c401253fb104936c65d7d703e9480ca2ed /libavcodec/mpegvideo.c | |
parent | 8e1652dc9dac6cd6ccb30cac1b646f3af96c3ca9 (diff) | |
download | ffmpeg-a02017367b4a733b7ac208ebc7d46ef6db9947ed.tar.gz |
optimizing mpeg1_decode_block()
Originally committed as revision 985 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/mpegvideo.c')
-rw-r--r-- | libavcodec/mpegvideo.c | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index 1134774b6c..5c487a1ef2 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -1517,8 +1517,7 @@ static inline void MPV_motion(MpegEncContext *s, 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 @@ void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) 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 @@ void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) } } 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->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->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); + } + }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]); + } } } } |