Mercurial > libavcodec.hg
changeset 3743:fc613a610303 libavcodec
Reorder MV order in B-frames so no swapping in vc1_b_mc() is needed
author | kostya |
---|---|
date | Thu, 21 Sep 2006 04:38:47 +0000 |
parents | 9a6bbda8cf7e |
children | 805aee1f7cce |
files | vc1.c |
diffstat | 1 files changed, 8 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/vc1.c Thu Sep 21 04:28:46 2006 +0000 +++ b/vc1.c Thu Sep 21 04:38:47 2006 +0000 @@ -2106,14 +2106,6 @@ { int t; - //XXX: more elegant solution is possible - t = v->s.mv[0][0][0]; - v->s.mv[0][0][0] = v->s.mv[1][0][0]; - v->s.mv[1][0][0] = t; - t = v->s.mv[0][0][1]; - v->s.mv[0][0][1] = v->s.mv[1][0][1]; - v->s.mv[1][0][1] = t; - if(direct) { vc1_mc_1mv(v, 0); vc1_interp_mc(v); @@ -2156,10 +2148,10 @@ s->current_picture.motion_val[1][xy][1] = 0; return; } - s->mv[0][0][0] = scale_mv(s->next_picture.motion_val[1][xy][0], v->bfraction, 1, s->quarter_sample); - s->mv[0][0][1] = scale_mv(s->next_picture.motion_val[1][xy][1], v->bfraction, 1, s->quarter_sample); - s->mv[1][0][0] = scale_mv(s->next_picture.motion_val[1][xy][0], v->bfraction, 0, s->quarter_sample); - s->mv[1][0][1] = scale_mv(s->next_picture.motion_val[1][xy][1], v->bfraction, 0, s->quarter_sample); + s->mv[0][0][0] = scale_mv(s->next_picture.motion_val[1][xy][0], v->bfraction, 0, s->quarter_sample); + s->mv[0][0][1] = scale_mv(s->next_picture.motion_val[1][xy][1], v->bfraction, 0, s->quarter_sample); + s->mv[1][0][0] = scale_mv(s->next_picture.motion_val[1][xy][0], v->bfraction, 1, s->quarter_sample); + s->mv[1][0][1] = scale_mv(s->next_picture.motion_val[1][xy][1], v->bfraction, 1, s->quarter_sample); if(direct) { s->current_picture.motion_val[0][xy][0] = s->mv[0][0][0]; s->current_picture.motion_val[0][xy][1] = s->mv[0][0][1]; @@ -2168,7 +2160,7 @@ return; } - if((mvtype == BMV_TYPE_BACKWARD) || (mvtype == BMV_TYPE_INTERPOLATED)) { + if((mvtype == BMV_TYPE_FORWARD) || (mvtype == BMV_TYPE_INTERPOLATED)) { C = s->current_picture.motion_val[0][xy - 2]; A = s->current_picture.motion_val[0][xy - wrap*2]; off = (s->mb_x == (s->mb_width - 1)) ? -2 : 2; @@ -2245,7 +2237,7 @@ s->mv[0][0][0] = ((px + dmv_x[0] + r_x) & ((r_x << 1) - 1)) - r_x; s->mv[0][0][1] = ((py + dmv_y[0] + r_y) & ((r_y << 1) - 1)) - r_y; } - if((mvtype == BMV_TYPE_FORWARD) || (mvtype == BMV_TYPE_INTERPOLATED)) { + if((mvtype == BMV_TYPE_BACKWARD) || (mvtype == BMV_TYPE_INTERPOLATED)) { C = s->current_picture.motion_val[1][xy - 2]; A = s->current_picture.motion_val[1][xy - wrap*2]; off = (s->mb_x == (s->mb_width - 1)) ? -2 : 2; @@ -3537,7 +3529,7 @@ break; case 2: bmvtype = BMV_TYPE_INTERPOLATED; - dmv_x[1] = dmv_y[1] = 0; + dmv_x[0] = dmv_y[0] = 0; } } } @@ -3576,7 +3568,7 @@ vc1_pred_b_mv(v, dmv_x, dmv_y, direct, bmvtype); } else { if(bmvtype == BMV_TYPE_INTERPOLATED) { - GET_MVDATA(dmv_x[1], dmv_y[1]); + GET_MVDATA(dmv_x[0], dmv_y[0]); if(!mb_has_coeffs) { /* interpolated skipped block */ vc1_pred_b_mv(v, dmv_x, dmv_y, direct, bmvtype);