diff options
author | Anton Khirnov <anton@khirnov.net> | 2013-11-26 14:34:52 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2013-11-29 17:37:16 +0100 |
commit | e026ee0446de27fc38e33e98704fada012fdc763 (patch) | |
tree | fe0c5691772dcea6086e44914f385f961b291a64 | |
parent | 513d849bb605d3d862da1ada709bd2ca1ac68f58 (diff) | |
download | ffmpeg-e026ee0446de27fc38e33e98704fada012fdc763.tar.gz |
mpeg4videodec: move sprite_{shift,traj} from MpegEncContext to Mpeg4DecContext
-rw-r--r-- | libavcodec/mpeg4video.h | 4 | ||||
-rw-r--r-- | libavcodec/mpeg4videodec.c | 46 | ||||
-rw-r--r-- | libavcodec/mpegvideo.h | 2 | ||||
-rw-r--r-- | libavcodec/vaapi_mpeg4.c | 4 |
4 files changed, 29 insertions, 27 deletions
diff --git a/libavcodec/mpeg4video.h b/libavcodec/mpeg4video.h index 5dc22033dd..63956a6414 100644 --- a/libavcodec/mpeg4video.h +++ b/libavcodec/mpeg4video.h @@ -68,6 +68,10 @@ typedef struct Mpeg4DecContext { int vol_sprite_usage; int sprite_brightness_change; int num_sprite_warping_points; + ///< sprite trajectory points + uint16_t sprite_traj[4][2]; + ///< sprite shift [isChroma] + int sprite_shift[2]; // reversible vlc int rvlc; diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c index f8bb54c4c8..115fae403f 100644 --- a/libavcodec/mpeg4videodec.c +++ b/libavcodec/mpeg4videodec.c @@ -188,11 +188,11 @@ static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *g y = get_xbits(gb, length); skip_bits1(gb); /* marker bit */ - s->sprite_traj[i][0] = d[i][0] = x; - s->sprite_traj[i][1] = d[i][1] = y; + ctx->sprite_traj[i][0] = d[i][0] = x; + ctx->sprite_traj[i][1] = d[i][1] = y; } for (; i < 4; i++) - s->sprite_traj[i][0] = s->sprite_traj[i][1] = 0; + ctx->sprite_traj[i][0] = ctx->sprite_traj[i][1] = 0; while ((1 << alpha) < w) alpha++; @@ -250,8 +250,8 @@ static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *g s->sprite_delta[0][1] = s->sprite_delta[1][0] = 0; s->sprite_delta[1][1] = a; - s->sprite_shift[0] = - s->sprite_shift[1] = 0; + ctx->sprite_shift[0] = + ctx->sprite_shift[1] = 0; break; case 1: // GMC only s->sprite_offset[0][0] = sprite_ref[0][0] - a * vop_ref[0][0]; @@ -264,8 +264,8 @@ static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *g s->sprite_delta[0][1] = s->sprite_delta[1][0] = 0; s->sprite_delta[1][1] = a; - s->sprite_shift[0] = - s->sprite_shift[1] = 0; + ctx->sprite_shift[0] = + ctx->sprite_shift[1] = 0; break; case 2: s->sprite_offset[0][0] = (sprite_ref[0][0] << (alpha + rho)) + @@ -293,8 +293,8 @@ static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *g s->sprite_delta[1][0] = (-r * sprite_ref[0][1] + virtual_ref[0][1]); s->sprite_delta[1][1] = (-r * sprite_ref[0][0] + virtual_ref[0][0]); - s->sprite_shift[0] = alpha + rho; - s->sprite_shift[1] = alpha + rho + 2; + ctx->sprite_shift[0] = alpha + rho; + ctx->sprite_shift[1] = alpha + rho + 2; break; case 3: min_ab = FFMIN(alpha, beta); @@ -329,35 +329,35 @@ static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *g s->sprite_delta[1][0] = (-r * sprite_ref[0][1] + virtual_ref[0][1]) * h3; s->sprite_delta[1][1] = (-r * sprite_ref[0][1] + virtual_ref[1][1]) * w3; - s->sprite_shift[0] = alpha + beta + rho - min_ab; - s->sprite_shift[1] = alpha + beta + rho - min_ab + 2; + ctx->sprite_shift[0] = alpha + beta + rho - min_ab; + ctx->sprite_shift[1] = alpha + beta + rho - min_ab + 2; break; } /* try to simplify the situation */ - if (s->sprite_delta[0][0] == a << s->sprite_shift[0] && + if (s->sprite_delta[0][0] == a << ctx->sprite_shift[0] && s->sprite_delta[0][1] == 0 && s->sprite_delta[1][0] == 0 && - s->sprite_delta[1][1] == a << s->sprite_shift[0]) { - s->sprite_offset[0][0] >>= s->sprite_shift[0]; - s->sprite_offset[0][1] >>= s->sprite_shift[0]; - s->sprite_offset[1][0] >>= s->sprite_shift[1]; - s->sprite_offset[1][1] >>= s->sprite_shift[1]; + s->sprite_delta[1][1] == a << ctx->sprite_shift[0]) { + s->sprite_offset[0][0] >>= ctx->sprite_shift[0]; + s->sprite_offset[0][1] >>= ctx->sprite_shift[0]; + s->sprite_offset[1][0] >>= ctx->sprite_shift[1]; + s->sprite_offset[1][1] >>= ctx->sprite_shift[1]; s->sprite_delta[0][0] = a; s->sprite_delta[0][1] = 0; s->sprite_delta[1][0] = 0; s->sprite_delta[1][1] = a; - s->sprite_shift[0] = 0; - s->sprite_shift[1] = 0; + ctx->sprite_shift[0] = 0; + ctx->sprite_shift[1] = 0; s->real_sprite_warping_points = 1; } else { - int shift_y = 16 - s->sprite_shift[0]; - int shift_c = 16 - s->sprite_shift[1]; + int shift_y = 16 - ctx->sprite_shift[0]; + int shift_c = 16 - ctx->sprite_shift[1]; for (i = 0; i < 2; i++) { s->sprite_offset[0][i] <<= shift_y; s->sprite_offset[1][i] <<= shift_c; s->sprite_delta[0][i] <<= shift_y; s->sprite_delta[1][i] <<= shift_y; - s->sprite_shift[i] = 16; + ctx->sprite_shift[i] = 16; } s->real_sprite_warping_points = ctx->num_sprite_warping_points; } @@ -493,7 +493,7 @@ static inline int get_amv(Mpeg4DecContext *ctx, int n) } else { dx = s->sprite_delta[n][0]; dy = s->sprite_delta[n][1]; - shift = s->sprite_shift[0]; + shift = ctx->sprite_shift[0]; if (n) dy -= 1 << (shift + a + 1); else diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 4a4b9253ac..843970dcbf 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -580,10 +580,8 @@ typedef struct MpegEncContext { uint16_t pp_field_time; uint16_t pb_field_time; ///< like above, just for interlaced int real_sprite_warping_points; - uint16_t sprite_traj[4][2]; ///< sprite trajectory points int sprite_offset[2][2]; ///< sprite offset[isChroma][isMVY] int sprite_delta[2][2]; ///< sprite_delta [isY][isMVY] - int sprite_shift[2]; ///< sprite shift [isChroma] int mcsel; int quant_precision; int quarter_sample; ///< 1->qpel, 0->half pel ME/MC diff --git a/libavcodec/vaapi_mpeg4.c b/libavcodec/vaapi_mpeg4.c index b6615567f4..f5298d1bf5 100644 --- a/libavcodec/vaapi_mpeg4.c +++ b/libavcodec/vaapi_mpeg4.c @@ -75,8 +75,8 @@ static int vaapi_mpeg4_start_frame(AVCodecContext *avctx, av_unused const uint8_ pic_param->vol_fields.bits.resync_marker_disable = !ctx->resync_marker; pic_param->no_of_sprite_warping_points = ctx->num_sprite_warping_points; for (i = 0; i < ctx->num_sprite_warping_points && i < 3; i++) { - pic_param->sprite_trajectory_du[i] = s->sprite_traj[i][0]; - pic_param->sprite_trajectory_dv[i] = s->sprite_traj[i][1]; + pic_param->sprite_trajectory_du[i] = ctx->sprite_traj[i][0]; + pic_param->sprite_trajectory_dv[i] = ctx->sprite_traj[i][1]; } pic_param->quant_precision = s->quant_precision; pic_param->vop_fields.value = 0; /* reset all bits */ |