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

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