aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2002-10-02 17:07:39 +0000
committerMichael Niedermayer <michaelni@gmx.at>2002-10-02 17:07:39 +0000
commit3994623df2efd2749631c3492184dd8d4ffa9d1b (patch)
tree9e1b55c14033be8ef27d1f670316f007d4a00e51
parentce5b7c5e1134eb3f00422839c4a842f0f7d24e40 (diff)
downloadffmpeg-3994623df2efd2749631c3492184dd8d4ffa9d1b.tar.gz
optimization
Originally committed as revision 992 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/h263dec.c7
-rw-r--r--libavcodec/mpeg12.c5
-rw-r--r--libavcodec/mpegvideo.c12
3 files changed, 19 insertions, 5 deletions
diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index c8c38cac87..fc3dca3d00 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -362,7 +362,12 @@ uint64_t time= rdtsc();
h = s->height - y;
if (h > 16)
h = 16;
- offset = y * s->linesize;
+
+ if(s->pict_type==B_TYPE)
+ offset = 0;
+ else
+ offset = y * s->linesize;
+
if(s->pict_type==B_TYPE || (!s->has_b_frames)){
src_ptr[0] = s->current_picture[0] + offset;
src_ptr[1] = s->current_picture[1] + (offset >> 2);
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c
index 97169fa4da..18afa7630f 100644
--- a/libavcodec/mpeg12.c
+++ b/libavcodec/mpeg12.c
@@ -1604,7 +1604,10 @@ static int mpeg_decode_slice(AVCodecContext *avctx,
h = s->height - y;
if (h > 16)
h = 16;
- offset = y * s->linesize;
+ if(s->pict_type==B_TYPE)
+ offset = 0;
+ else
+ offset = y * s->linesize;
if(s->pict_type==B_TYPE || (!s->has_b_frames)){
src_ptr[0] = s->current_picture[0] + offset;
src_ptr[1] = s->current_picture[1] + (offset >> 2);
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 5c487a1ef2..9ff046e059 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -1684,9 +1684,15 @@ void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64])
}
}
- dest_y = s->current_picture [0] + (mb_y * 16* s->linesize ) + mb_x * 16;
- dest_cb = s->current_picture[1] + (mb_y * 8 * s->uvlinesize) + mb_x * 8;
- dest_cr = s->current_picture[2] + (mb_y * 8 * s->uvlinesize) + mb_x * 8;
+ if(s->pict_type==B_TYPE && s->avctx->draw_horiz_band){
+ dest_y = s->current_picture [0] + mb_x * 16;
+ dest_cb = s->current_picture[1] + mb_x * 8;
+ dest_cr = s->current_picture[2] + mb_x * 8;
+ }else{
+ dest_y = s->current_picture [0] + (mb_y * 16* s->linesize ) + mb_x * 16;
+ dest_cb = s->current_picture[1] + (mb_y * 8 * s->uvlinesize) + mb_x * 8;
+ dest_cr = s->current_picture[2] + (mb_y * 8 * s->uvlinesize) + mb_x * 8;
+ }
if (s->interlaced_dct) {
dct_linesize = s->linesize * 2;