return AVERROR_PATCHWELCOME;
}
- if (!frame->key_frame &&
- (avctx->width != width ||
- avctx->height != height)) {
- av_log(avctx, AV_LOG_ERROR, "Frame size change is unsupported.\n");
- return AVERROR_INVALIDDATA;
+ if (avctx->width != width ||
+ avctx->height != height) {
+ if (!frame->key_frame) {
+ av_log(avctx, AV_LOG_ERROR, "Frame size change is unsupported.\n");
+ return AVERROR_INVALIDDATA;
+ }
+ av_frame_unref(s->prev_frame);
}
ret = ff_set_dimensions(avctx, width, height);
return 0;
}
+static void decode_flush(AVCodecContext *avctx)
+{
+ IMM4Context *s = avctx->priv_data;
+
+ av_frame_unref(s->prev_frame);
+}
+
static av_cold int decode_close(AVCodecContext *avctx)
{
IMM4Context *s = avctx->priv_data;
.init = decode_init,
.close = decode_close,
.decode = decode_frame,
+ .flush = decode_flush,
.capabilities = AV_CODEC_CAP_DR1,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE |
FF_CODEC_CAP_INIT_CLEANUP,