|
|
|
@@ -510,8 +510,11 @@ static int decode_mb_info(IVI45DecContext *ctx, IVIBandDesc *band, |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
if (band->inherit_mv && ref_mb) { |
|
|
|
mb->type = ref_mb->type; /* copy mb_type from corresponding reference mb */ |
|
|
|
if (band->inherit_mv) { |
|
|
|
/* copy mb_type from corresponding reference mb */ |
|
|
|
if (!ref_mb) |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
mb->type = ref_mb->type; |
|
|
|
} else if (ctx->frame_type == FRAMETYPE_INTRA || |
|
|
|
ctx->frame_type == FRAMETYPE_INTRA1) { |
|
|
|
mb->type = 0; /* mb_type is always INTRA for intra-frames */ |
|
|
|
@@ -534,15 +537,16 @@ static int decode_mb_info(IVI45DecContext *ctx, IVIBandDesc *band, |
|
|
|
if (!mb->type) { |
|
|
|
mb->mv_x = mb->mv_y = 0; /* there is no motion vector in intra-macroblocks */ |
|
|
|
} else { |
|
|
|
if (band->inherit_mv && ref_mb) { |
|
|
|
/* motion vector inheritance */ |
|
|
|
if (mv_scale) { |
|
|
|
mb->mv_x = ivi_scale_mv(ref_mb->mv_x, mv_scale); |
|
|
|
mb->mv_y = ivi_scale_mv(ref_mb->mv_y, mv_scale); |
|
|
|
} else { |
|
|
|
mb->mv_x = ref_mb->mv_x; |
|
|
|
mb->mv_y = ref_mb->mv_y; |
|
|
|
} |
|
|
|
if (band->inherit_mv) { |
|
|
|
if (ref_mb) |
|
|
|
/* motion vector inheritance */ |
|
|
|
if (mv_scale) { |
|
|
|
mb->mv_x = ivi_scale_mv(ref_mb->mv_x, mv_scale); |
|
|
|
mb->mv_y = ivi_scale_mv(ref_mb->mv_y, mv_scale); |
|
|
|
} else { |
|
|
|
mb->mv_x = ref_mb->mv_x; |
|
|
|
mb->mv_y = ref_mb->mv_y; |
|
|
|
} |
|
|
|
} else { |
|
|
|
/* decode motion vector deltas */ |
|
|
|
mv_delta = get_vlc2(&ctx->gb, ctx->mb_vlc.tab->table, |
|
|
|
|