diff --git a/libavcodec/hevc_parser.c b/libavcodec/hevc_parser.c
index 1ba950829718ec351d2028d4f2946d020a359d69..dc1f6d5a38dc8cf8916c9338b6ef414b93568c86 100644
--- a/libavcodec/hevc_parser.c
+++ b/libavcodec/hevc_parser.c
@@ -187,7 +187,7 @@ static inline int parse_nal_units(AVCodecParserContext *s, AVCodecContext *avctx
             }
             if (h->sps != (HEVCSPS*)h->sps_list[h->pps->sps_id]->data) {
                 h->sps = (HEVCSPS*)h->sps_list[h->pps->sps_id]->data;
-                h->vps = h->vps_list[h->sps->vps_id];
+                h->vps = (HEVCVPS*)h->vps_list[h->sps->vps_id]->data;
             }
 
             if (!sh->first_slice_in_pic_flag) {
@@ -325,7 +325,7 @@ static void hevc_close(AVCodecParserContext *s)
     av_freep(&pc->buffer);
 
     for (i = 0; i < FF_ARRAY_ELEMS(h->vps_list); i++)
-        av_freep(&h->vps_list[i]);
+        av_buffer_unref(&h->vps_list[i]);
     for (i = 0; i < FF_ARRAY_ELEMS(h->sps_list); i++)
         av_buffer_unref(&h->sps_list[i]);
     for (i = 0; i < FF_ARRAY_ELEMS(h->pps_list); i++)