diff --git a/libavcodec/indeo2.c b/libavcodec/indeo2.c
index f8e7415..79b844e 100644
--- a/libavcodec/indeo2.c
+++ b/libavcodec/indeo2.c
@@ -34,7 +34,7 @@
 
 typedef struct Ir2Context{
     AVCodecContext *avctx;
-    AVFrame picture;
+    AVFrame *picture;
     GetBitContext gb;
     int decode_delta;
 } Ir2Context;
@@ -146,7 +146,7 @@
     const uint8_t *buf   = avpkt->data;
     int buf_size         = avpkt->size;
     AVFrame *picture     = data;
-    AVFrame * const p    = &s->picture;
+    AVFrame * const p    = s->picture;
     int start, ret;
 
     if ((ret = ff_reget_buffer(avctx, p)) < 0)
@@ -171,36 +171,36 @@
 
     if (s->decode_delta) { /* intraframe */
         if ((ret = ir2_decode_plane(s, avctx->width, avctx->height,
-                                    s->picture.data[0], s->picture.linesize[0],
+                                    s->picture->data[0], s->picture->linesize[0],
                                     ir2_luma_table)) < 0)
             return ret;
 
         /* swapped U and V */
         if ((ret = ir2_decode_plane(s, avctx->width >> 2, avctx->height >> 2,
-                                    s->picture.data[2], s->picture.linesize[2],
+                                    s->picture->data[2], s->picture->linesize[2],
                                     ir2_luma_table)) < 0)
             return ret;
         if ((ret = ir2_decode_plane(s, avctx->width >> 2, avctx->height >> 2,
-                                    s->picture.data[1], s->picture.linesize[1],
+                                    s->picture->data[1], s->picture->linesize[1],
                                     ir2_luma_table)) < 0)
             return ret;
     } else { /* interframe */
         if ((ret = ir2_decode_plane_inter(s, avctx->width, avctx->height,
-                                          s->picture.data[0], s->picture.linesize[0],
+                                          s->picture->data[0], s->picture->linesize[0],
                                           ir2_luma_table)) < 0)
             return ret;
         /* swapped U and V */
         if ((ret = ir2_decode_plane_inter(s, avctx->width >> 2, avctx->height >> 2,
-                                          s->picture.data[2], s->picture.linesize[2],
+                                          s->picture->data[2], s->picture->linesize[2],
                                           ir2_luma_table)) < 0)
             return ret;
         if ((ret = ir2_decode_plane_inter(s, avctx->width >> 2, avctx->height >> 2,
-                                          s->picture.data[1], s->picture.linesize[1],
+                                          s->picture->data[1], s->picture->linesize[1],
                                           ir2_luma_table)) < 0)
             return ret;
     }
 
-    if ((ret = av_frame_ref(picture, &s->picture)) < 0)
+    if ((ret = av_frame_ref(picture, s->picture)) < 0)
         return ret;
 
     *got_frame = 1;
@@ -213,12 +213,13 @@
     Ir2Context * const ic = avctx->priv_data;
     static VLC_TYPE vlc_tables[1 << CODE_VLC_BITS][2];
 
-    avcodec_get_frame_defaults(&ic->picture);
     ic->avctx = avctx;
 
     avctx->pix_fmt= AV_PIX_FMT_YUV410P;
 
-    avcodec_get_frame_defaults(&ic->picture);
+    ic->picture = av_frame_alloc();
+    if (!ic->picture)
+        return AVERROR(ENOMEM);
 
     ir2_vlc.table = vlc_tables;
     ir2_vlc.table_allocated = 1 << CODE_VLC_BITS;
@@ -238,9 +239,8 @@
 static av_cold int ir2_decode_end(AVCodecContext *avctx)
 {
     Ir2Context * const ic = avctx->priv_data;
-    AVFrame *pic = &ic->picture;
 
-    av_frame_unref(pic);
+    av_frame_free(&ic->picture);
 
     return 0;
 }
