}
s->sps = sps;
- s->vps = s->vps_list[s->sps->vps_id];
+ s->vps = (HEVCVPS*) s->vps_list[s->sps->vps_id]->data;
return 0;
fail:
}
for (i = 0; i < FF_ARRAY_ELEMS(s->vps_list); i++)
- av_freep(&s->vps_list[i]);
+ av_buffer_unref(&s->vps_list[i]);
for (i = 0; i < FF_ARRAY_ELEMS(s->sps_list); i++)
av_buffer_unref(&s->sps_list[i]);
for (i = 0; i < FF_ARRAY_ELEMS(s->pps_list); i++)
}
}
+ for (i = 0; i < FF_ARRAY_ELEMS(s->vps_list); i++) {
+ av_buffer_unref(&s->vps_list[i]);
+ if (s0->vps_list[i]) {
+ s->vps_list[i] = av_buffer_ref(s0->vps_list[i]);
+ if (!s->vps_list[i])
+ return AVERROR(ENOMEM);
+ }
+ }
+
for (i = 0; i < FF_ARRAY_ELEMS(s->sps_list); i++) {
av_buffer_unref(&s->sps_list[i]);
if (s0->sps_list[i]) {
const HEVCVPS *vps;
const HEVCSPS *sps;
const HEVCPPS *pps;
- HEVCVPS *vps_list[MAX_VPS_COUNT];
+ AVBufferRef *vps_list[MAX_VPS_COUNT];
AVBufferRef *sps_list[MAX_SPS_COUNT];
AVBufferRef *pps_list[MAX_PPS_COUNT];
GetBitContext *gb = &s->HEVClc.gb;
int vps_id = 0;
HEVCVPS *vps;
+ AVBufferRef *vps_buf = av_buffer_allocz(sizeof(*vps));
- av_log(s->avctx, AV_LOG_DEBUG, "Decoding VPS\n");
+ if (!vps_buf)
+ return AVERROR(ENOMEM);
+ vps = (HEVCVPS*)vps_buf->data;
- vps = av_mallocz(sizeof(*vps));
- if (!vps)
- return AVERROR(ENOMEM);
+ av_log(s->avctx, AV_LOG_DEBUG, "Decoding VPS\n");
vps_id = get_bits(gb, 4);
if (vps_id >= MAX_VPS_COUNT) {
}
get_bits1(gb); /* vps_extension_flag */
- av_free(s->vps_list[vps_id]);
- s->vps_list[vps_id] = vps;
+ av_buffer_unref(&s->vps_list[vps_id]);
+ s->vps_list[vps_id] = vps_buf;
return 0;
err:
- av_free(vps);
+ av_buffer_unref(&vps_buf);
return AVERROR_INVALIDDATA;
}