From: Torsten J. <t....@gm...> - 2014-08-02 16:29:24
|
# HG changeset patch # User Torsten Jager <t....@gm...> # Date 1406996940 -7200 # Node ID 9eb7a17a9d677739c3a89675ccf18372a0a68a46 # Branch default # Parent d3e449e17026f2dda00e947d97223bf801259f86 Fix AVCodecContext/AVFrame freeing. diff --git a/src/combined/ffmpeg/ff_audio_decoder.c b/src/combined/ffmpeg/ff_audio_decoder.c --- a/src/combined/ffmpeg/ff_audio_decoder.c +++ b/src/combined/ffmpeg/ff_audio_decoder.c @@ -1117,11 +1117,11 @@ free16 (this->buf); free16 (this->decode_buffer); - if(this->context && this->context->extradata) - free(this->context->extradata); - - if(this->context) - av_free(this->context); + if (this->context) { + _x_freep (&this->context->extradata); + this->context->extradata_size = 0; + avcodec_free_context (&this->context); + } free (this_gen); } --git a/src/combined/ffmpeg/ff_video_decoder.c b/src/combined/ffmpeg/ff_video_decoder.c --- a/src/combined/ffmpeg/ff_video_decoder.c +++ b/src/combined/ffmpeg/ff_video_decoder.c @@ -2474,14 +2474,14 @@ if (this->slice_offset_table) free (this->slice_offset_table); - if(this->context && this->context->extradata) - free(this->context->extradata); - - if( this->context ) - av_free( this->context ); + if (this->context) { + _x_freep (&this->context->extradata); + this->context->extradata_size = 0; + avcodec_free_context (&this->context); + } if( this->av_frame ) - av_free( this->av_frame ); + avcodec_free_frame( &this->av_frame ); if (this->buf) free(this->buf); --git a/src/combined/ffmpeg/ffmpeg_compat.h b/src/combined/ffmpeg/ffmpeg_compat.h --- a/src/combined/ffmpeg/ffmpeg_compat.h +++ b/src/combined/ffmpeg/ffmpeg_compat.h @@ -205,4 +205,15 @@ # define AV_BUFFER 1 #endif +#if LIBAVCODEC_VERSION_INT < AV_INT_VERSION(55,63,100) +# define avcodec_free_context(pp) av_free(*(pp)) +#endif + +#if LIBAVCODEC_VERSION_INT < AV_INT_VERSION(54,59,100) +# define avcodec_free_frame(pp) av_free(*(pp)) +#elif LIBAVCODEC_VERSION_INT >= AV_INT_VERSION(55,45,101) +# define avcodec_alloc_frame() av_frame_alloc() +# define avcodec_free_frame(pp) av_frame_free(pp) +#endif + #endif /* XINE_AVCODEC_COMPAT_H */ --git a/src/dxr3/ffmpeg_encoder.c b/src/dxr3/ffmpeg_encoder.c --- a/src/dxr3/ffmpeg_encoder.c +++ b/src/dxr3/ffmpeg_encoder.c @@ -319,7 +319,7 @@ lprintf("flushing buffers\n"); if (this->context) { avcodec_close(this->context); - free(this->context); + avcodec_free_context (&this->context); free(this->picture); this->context = NULL; this->picture = NULL; |