indeo4: Do not access missing reference MV

Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
(cherry picked from commit 8435bca087)

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>

Conflicts:

	libavcodec/indeo4.c
This commit is contained in:
Luca Barbato
2013-07-12 14:32:03 +02:00
committed by Sean McGovern
parent 68b1008719
commit ba5dfc25ee

View File

@@ -458,7 +458,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);
@@ -470,7 +470,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) {
mb->type = 0; /* mb_type is always INTRA for intra-frames */ mb->type = 0; /* mb_type is always INTRA for intra-frames */
} else { } else {
@@ -493,6 +496,7 @@ 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) {
if (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);