mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-14 19:25:01 +00:00
vp8: force reallocation in update_thread_context after frame size change
Signed-off-by: Janne Grunau <janne-libav@jannau.net>
This commit is contained in:
parent
f05c2fb6eb
commit
5653579381
@ -33,6 +33,19 @@
|
||||
# include "arm/vp8.h"
|
||||
#endif
|
||||
|
||||
static void free_buffers(VP8Context *s)
|
||||
{
|
||||
av_freep(&s->macroblocks_base);
|
||||
av_freep(&s->filter_strength);
|
||||
av_freep(&s->intra4x4_pred_mode_top);
|
||||
av_freep(&s->top_nnz);
|
||||
av_freep(&s->edge_emu_buffer);
|
||||
av_freep(&s->top_border);
|
||||
av_freep(&s->segmentation_map);
|
||||
|
||||
s->macroblocks = NULL;
|
||||
}
|
||||
|
||||
static void vp8_decode_flush(AVCodecContext *avctx)
|
||||
{
|
||||
VP8Context *s = avctx->priv_data;
|
||||
@ -45,15 +58,7 @@ static void vp8_decode_flush(AVCodecContext *avctx)
|
||||
}
|
||||
memset(s->framep, 0, sizeof(s->framep));
|
||||
|
||||
av_freep(&s->macroblocks_base);
|
||||
av_freep(&s->filter_strength);
|
||||
av_freep(&s->intra4x4_pred_mode_top);
|
||||
av_freep(&s->top_nnz);
|
||||
av_freep(&s->edge_emu_buffer);
|
||||
av_freep(&s->top_border);
|
||||
av_freep(&s->segmentation_map);
|
||||
|
||||
s->macroblocks = NULL;
|
||||
free_buffers(s);
|
||||
}
|
||||
|
||||
static int update_dimensions(VP8Context *s, int width, int height)
|
||||
@ -1750,6 +1755,11 @@ static int vp8_decode_update_thread_context(AVCodecContext *dst, const AVCodecCo
|
||||
{
|
||||
VP8Context *s = dst->priv_data, *s_src = src->priv_data;
|
||||
|
||||
if (s->macroblocks_base &&
|
||||
(s_src->mb_width != s->mb_width || s_src->mb_height != s->mb_height)) {
|
||||
free_buffers(s);
|
||||
}
|
||||
|
||||
s->prob[0] = s_src->prob[!s_src->update_probabilities];
|
||||
s->segmentation = s_src->segmentation;
|
||||
s->lf_delta = s_src->lf_delta;
|
||||
|
Loading…
Reference in New Issue
Block a user