Commit 2ed0f766 authored by Ronald S. Bultje's avatar Ronald S. Bultje Committed by Michael Niedermayer

Fix crash on resolution change (issue 2393).

Don't free RBSP tables (containing decoded NAL units) on resolution
change, because we actually need this data to decode the frame after
reiniting (with new resolution). Fixed issue 2393.
Signed-off-by: 's avatarJanne Grunau <janne-ffmpeg@jannau.net>
(cherry picked from commit 91078926)
parent 60c99b55
......@@ -614,7 +614,7 @@ static void hl_motion(H264Context *h, uint8_t *dest_y, uint8_t *dest_cb, uint8_t
}
static void free_tables(H264Context *h){
static void free_tables(H264Context *h, int free_rbsp){
int i;
H264Context *hx;
av_freep(&h->intra4x4_pred_mode);
......@@ -637,10 +637,12 @@ static void free_tables(H264Context *h){
av_freep(&hx->top_borders[1]);
av_freep(&hx->top_borders[0]);
av_freep(&hx->s.obmc_scratchpad);
if (free_rbsp){
av_freep(&hx->rbsp_buffer[1]);
av_freep(&hx->rbsp_buffer[0]);
hx->rbsp_buffer_size[0] = 0;
hx->rbsp_buffer_size[1] = 0;
}
if (i) av_freep(&h->thread_context[i]);
}
}
......@@ -748,7 +750,7 @@ int ff_h264_alloc_tables(H264Context *h){
return 0;
fail:
free_tables(h);
free_tables(h, 1);
return -1;
}
......@@ -1776,7 +1778,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
|| av_cmp_q(h->sps.sar, s->avctx->sample_aspect_ratio))) {
if(h != h0)
return -1; // width / height changed during parallelized decoding
free_tables(h);
free_tables(h, 0);
flush_dpb(s->avctx);
MPV_common_end(s);
}
......@@ -3331,7 +3333,7 @@ av_cold void ff_h264_free_context(H264Context *h)
{
int i;
free_tables(h); //FIXME cleanup init stuff perhaps
free_tables(h, 1); //FIXME cleanup init stuff perhaps
for(i = 0; i < MAX_SPS_COUNT; i++)
av_freep(h->sps_buffers + i);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment