mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
lavc: add avcodec_free_context().
Right now, the caller has to manually manage some allocated AVCodecContext fields, like extradata or subtitle_header. This is fragile and prone to leaks, especially if we want to add more such fields in the future. The only reason for this behaviour is so that the AVStream codec context can be reused for decoding. Such reuse is discouraged anyway, so this commit is the first step to deprecating it.
This commit is contained in:
parent
e1b66778b6
commit
fd056029f4
@ -13,6 +13,10 @@ libavutil: 2013-12-xx
|
|||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
|
||||||
|
2014-04-xx - xxxxxxx - lavc 55.52.0 - avcodec.h
|
||||||
|
Add avcodec_free_context(). From now on it should be used for freeing
|
||||||
|
AVCodecContext.
|
||||||
|
|
||||||
2014-05-xx - xxxxxxx - lavf 55.17.0 - avformat.h
|
2014-05-xx - xxxxxxx - lavf 55.17.0 - avformat.h
|
||||||
Add AVMFT_FLAG_BITEXACT flag. Muxers now use it instead of checking
|
Add AVMFT_FLAG_BITEXACT flag. Muxers now use it instead of checking
|
||||||
CODEC_FLAG_BITEXACT on the first stream.
|
CODEC_FLAG_BITEXACT on the first stream.
|
||||||
|
@ -3147,8 +3147,7 @@ void avcodec_register_all(void);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Allocate an AVCodecContext and set its fields to default values. The
|
* Allocate an AVCodecContext and set its fields to default values. The
|
||||||
* resulting struct can be deallocated by calling avcodec_close() on it followed
|
* resulting struct should be freed with avcodec_free_context().
|
||||||
* by av_free().
|
|
||||||
*
|
*
|
||||||
* @param codec if non-NULL, allocate private data and initialize defaults
|
* @param codec if non-NULL, allocate private data and initialize defaults
|
||||||
* for the given codec. It is illegal to then call avcodec_open2()
|
* for the given codec. It is illegal to then call avcodec_open2()
|
||||||
@ -3162,6 +3161,12 @@ void avcodec_register_all(void);
|
|||||||
*/
|
*/
|
||||||
AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);
|
AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Free the codec context and everything associated with it and write NULL to
|
||||||
|
* the provided pointer.
|
||||||
|
*/
|
||||||
|
void avcodec_free_context(AVCodecContext **avctx);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the fields of the given AVCodecContext to default values corresponding
|
* Set the fields of the given AVCodecContext to default values corresponding
|
||||||
* to the given codec (defaults may be codec-dependent).
|
* to the given codec (defaults may be codec-dependent).
|
||||||
|
@ -135,6 +135,21 @@ AVCodecContext *avcodec_alloc_context3(const AVCodec *codec)
|
|||||||
return avctx;
|
return avctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void avcodec_free_context(AVCodecContext **pavctx)
|
||||||
|
{
|
||||||
|
AVCodecContext *avctx = *pavctx;
|
||||||
|
|
||||||
|
if (!avctx)
|
||||||
|
return;
|
||||||
|
|
||||||
|
avcodec_close(avctx);
|
||||||
|
|
||||||
|
av_freep(&avctx->extradata);
|
||||||
|
av_freep(&avctx->subtitle_header);
|
||||||
|
|
||||||
|
av_freep(pavctx);
|
||||||
|
}
|
||||||
|
|
||||||
int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src)
|
int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src)
|
||||||
{
|
{
|
||||||
const AVCodec *orig_codec = dest->codec;
|
const AVCodec *orig_codec = dest->codec;
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
#include "libavutil/version.h"
|
#include "libavutil/version.h"
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 55
|
#define LIBAVCODEC_VERSION_MAJOR 55
|
||||||
#define LIBAVCODEC_VERSION_MINOR 51
|
#define LIBAVCODEC_VERSION_MINOR 52
|
||||||
#define LIBAVCODEC_VERSION_MICRO 0
|
#define LIBAVCODEC_VERSION_MICRO 0
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||||
|
Loading…
Reference in New Issue
Block a user