aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/mpegvideo.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2002-09-30 16:14:14 +0000
committerMichael Niedermayer <michaelni@gmx.at>2002-09-30 16:14:14 +0000
commita02017367b4a733b7ac208ebc7d46ef6db9947ed (patch)
treee4e5b6c401253fb104936c65d7d703e9480ca2ed /libavcodec/mpegvideo.c
parent8e1652dc9dac6cd6ccb30cac1b646f3af96c3ca9 (diff)
downloadffmpeg-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.c34
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]);
+ }
}
}
}