Commit 58b4e540 authored by Stefano Sabatini's avatar Stefano Sabatini

Fix FFv1 decoder buffer releasing.

Previously it was releasing the buffer which was returned to the user,
which was resulting in a crash in case of direct rendering.

Originally committed as revision 25678 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent e61bb085
...@@ -1274,6 +1274,9 @@ static av_cold int common_end(AVCodecContext *avctx){ ...@@ -1274,6 +1274,9 @@ static av_cold int common_end(AVCodecContext *avctx){
FFV1Context *s = avctx->priv_data; FFV1Context *s = avctx->priv_data;
int i, j; int i, j;
if (avctx->codec->decode && s->picture.data[0])
avctx->release_buffer(avctx, &s->picture);
for(j=0; j<s->slice_count; j++){ for(j=0; j<s->slice_count; j++){
FFV1Context *fs= s->slice_context[j]; FFV1Context *fs= s->slice_context[j];
for(i=0; i<s->plane_count; i++){ for(i=0; i<s->plane_count; i++){
...@@ -1712,6 +1715,10 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac ...@@ -1712,6 +1715,10 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
AVFrame *picture = data; AVFrame *picture = data;
/* release previously stored data */
if (p->data[0])
avctx->release_buffer(avctx, p);
ff_init_range_decoder(c, buf, buf_size); ff_init_range_decoder(c, buf, buf_size);
ff_build_rac_states(c, 0.05*(1LL<<32), 256-8); ff_build_rac_states(c, 0.05*(1LL<<32), 256-8);
...@@ -1774,9 +1781,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac ...@@ -1774,9 +1781,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
f->picture_number++; f->picture_number++;
*picture= *p; *picture= *p;
avctx->release_buffer(avctx, p); //FIXME
*data_size = sizeof(AVFrame); *data_size = sizeof(AVFrame);
return buf_size; return buf_size;
......
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