mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
indeo4: Do not access missing reference MV
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind CC: libav-stable@libav.org
This commit is contained in:
parent
031be5b41b
commit
8435bca087
@ -459,7 +459,7 @@ static int decode_mb_info(IVI45DecContext *ctx, IVIBandDesc *band,
|
|||||||
}
|
}
|
||||||
|
|
||||||
mb->mv_x = mb->mv_y = 0; /* no motion vector coded */
|
mb->mv_x = mb->mv_y = 0; /* no motion vector coded */
|
||||||
if (band->inherit_mv) {
|
if (band->inherit_mv && ref_mb) {
|
||||||
/* motion vector inheritance */
|
/* motion vector inheritance */
|
||||||
if (mv_scale) {
|
if (mv_scale) {
|
||||||
mb->mv_x = ivi_scale_mv(ref_mb->mv_x, mv_scale);
|
mb->mv_x = ivi_scale_mv(ref_mb->mv_x, mv_scale);
|
||||||
@ -471,7 +471,10 @@ static int decode_mb_info(IVI45DecContext *ctx, IVIBandDesc *band,
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (band->inherit_mv) {
|
if (band->inherit_mv) {
|
||||||
mb->type = ref_mb->type; /* copy mb_type from corresponding reference mb */
|
/* 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 ||
|
} else if (ctx->frame_type == FRAMETYPE_INTRA ||
|
||||||
ctx->frame_type == FRAMETYPE_INTRA1) {
|
ctx->frame_type == FRAMETYPE_INTRA1) {
|
||||||
mb->type = 0; /* mb_type is always INTRA for intra-frames */
|
mb->type = 0; /* mb_type is always INTRA for intra-frames */
|
||||||
@ -495,14 +498,15 @@ static int decode_mb_info(IVI45DecContext *ctx, IVIBandDesc *band,
|
|||||||
mb->mv_x = mb->mv_y = 0; /* there is no motion vector in intra-macroblocks */
|
mb->mv_x = mb->mv_y = 0; /* there is no motion vector in intra-macroblocks */
|
||||||
} else {
|
} else {
|
||||||
if (band->inherit_mv) {
|
if (band->inherit_mv) {
|
||||||
/* motion vector inheritance */
|
if (ref_mb)
|
||||||
if (mv_scale) {
|
/* motion vector inheritance */
|
||||||
mb->mv_x = ivi_scale_mv(ref_mb->mv_x, mv_scale);
|
if (mv_scale) {
|
||||||
mb->mv_y = ivi_scale_mv(ref_mb->mv_y, mv_scale);
|
mb->mv_x = ivi_scale_mv(ref_mb->mv_x, mv_scale);
|
||||||
} else {
|
mb->mv_y = ivi_scale_mv(ref_mb->mv_y, mv_scale);
|
||||||
mb->mv_x = ref_mb->mv_x;
|
} else {
|
||||||
mb->mv_y = ref_mb->mv_y;
|
mb->mv_x = ref_mb->mv_x;
|
||||||
}
|
mb->mv_y = ref_mb->mv_y;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/* decode motion vector deltas */
|
/* decode motion vector deltas */
|
||||||
mv_delta = get_vlc2(&ctx->gb, ctx->mb_vlc.tab->table,
|
mv_delta = get_vlc2(&ctx->gb, ctx->mb_vlc.tab->table,
|
||||||
|
Loading…
Reference in New Issue
Block a user