diff --git a/libavcodec/rv30.c b/libavcodec/rv30.c index f8c7ed4608..3b9868cd5e 100644 --- a/libavcodec/rv30.c +++ b/libavcodec/rv30.c @@ -67,6 +67,9 @@ static int rv30_parse_slice_header(RV34DecContext *r, GetBitContext *gb, SliceIn w = r->s.avctx->extradata[6 + rpr*2] << 2; h = r->s.avctx->extradata[7 + rpr*2] << 2; + } else { + w = r->orig_width; + h = r->orig_height; } si->width = w; si->height = h; @@ -259,6 +262,9 @@ static av_cold int rv30_decode_init(AVCodecContext *avctx) RV34DecContext *r = avctx->priv_data; int ret; + r->orig_width = avctx->coded_width; + r->orig_height = avctx->coded_height; + if (avctx->extradata_size < 2) { av_log(avctx, AV_LOG_ERROR, "Extradata is too small.\n"); return AVERROR(EINVAL); diff --git a/libavcodec/rv34.h b/libavcodec/rv34.h index 870164c6e5..e2f40c8e5a 100644 --- a/libavcodec/rv34.h +++ b/libavcodec/rv34.h @@ -109,6 +109,8 @@ typedef struct RV34DecContext{ int weight1, weight2; ///< B frame distance fractions (0.14) used in motion compensation int mv_weight1, mv_weight2; + int orig_width, orig_height; + uint16_t *cbp_luma; ///< CBP values for luma subblocks uint8_t *cbp_chroma; ///< CBP values for chroma subblocks uint16_t *deblock_coefs; ///< deblock coefficients for each macroblock