|
|
|
@@ -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); |
|
|
|
|