Commit 3994623d authored by Michael Niedermayer's avatar Michael Niedermayer

optimization

Originally committed as revision 992 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent ce5b7c5e
...@@ -362,7 +362,12 @@ uint64_t time= rdtsc(); ...@@ -362,7 +362,12 @@ uint64_t time= rdtsc();
h = s->height - y; h = s->height - y;
if (h > 16) if (h > 16)
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)){ if(s->pict_type==B_TYPE || (!s->has_b_frames)){
src_ptr[0] = s->current_picture[0] + offset; src_ptr[0] = s->current_picture[0] + offset;
src_ptr[1] = s->current_picture[1] + (offset >> 2); src_ptr[1] = s->current_picture[1] + (offset >> 2);
......
...@@ -1604,7 +1604,10 @@ static int mpeg_decode_slice(AVCodecContext *avctx, ...@@ -1604,7 +1604,10 @@ static int mpeg_decode_slice(AVCodecContext *avctx,
h = s->height - y; h = s->height - y;
if (h > 16) if (h > 16)
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)){ if(s->pict_type==B_TYPE || (!s->has_b_frames)){
src_ptr[0] = s->current_picture[0] + offset; src_ptr[0] = s->current_picture[0] + offset;
src_ptr[1] = s->current_picture[1] + (offset >> 2); src_ptr[1] = s->current_picture[1] + (offset >> 2);
......
...@@ -1684,9 +1684,15 @@ void MPV_decode_mb(MpegEncContext *s, DCTELEM block[6][64]) ...@@ -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; if(s->pict_type==B_TYPE && s->avctx->draw_horiz_band){
dest_cb = s->current_picture[1] + (mb_y * 8 * s->uvlinesize) + mb_x * 8; dest_y = s->current_picture [0] + mb_x * 16;
dest_cr = s->current_picture[2] + (mb_y * 8 * s->uvlinesize) + mb_x * 8; 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) { if (s->interlaced_dct) {
dct_linesize = s->linesize * 2; dct_linesize = s->linesize * 2;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment