diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 2361660327507b3c70d82b6e8ce6769efaf1a6b3..28b14cd6a0952946cf7884ce0032ceb27a314807 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -52,6 +52,8 @@
 #include "thread.h"
 #include "vdpau_compat.h"
 
+static int h264_decode_end(AVCodecContext *avctx);
+
 const uint16_t ff_h264_mb_sizes[4] = { 256, 384, 512, 768 };
 
 int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx)
@@ -679,7 +681,7 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx)
     if (avctx->extradata_size > 0 && avctx->extradata) {
         ret = ff_h264_decode_extradata(h, avctx->extradata, avctx->extradata_size);
         if (ret < 0) {
-            ff_h264_free_context(h);
+            h264_decode_end(avctx);
             return ret;
         }
     }