Browse Source

lavc: add avcodec_free_frame().

Since an AVFrame now has malloced members (extended_data), it must have
a destructor.
tags/n1.0
Anton Khirnov 12 years ago
parent
commit
a42aadabc6
4 changed files with 33 additions and 2 deletions
  1. +4
    -0
      doc/APIchanges
  2. +13
    -1
      libavcodec/avcodec.h
  3. +15
    -0
      libavcodec/utils.c
  4. +1
    -1
      libavcodec/version.h

+ 4
- 0
doc/APIchanges View File

@@ -13,6 +13,10 @@ libavutil: 2011-04-18

API changes, most recent first:

2012-09-23 - xxxxxxx - lavc 54.28.0 - avcodec.h
Add avcodec_free_frame(). This function must now
be used for freeing an AVFrame.

2012-09-12 - xxxxxxx - lavu 51.41.0 - audioconvert.h
Added AV_CH_LOW_FREQUENCY_2 channel mask value.



+ 13
- 1
libavcodec/avcodec.h View File

@@ -3257,7 +3257,7 @@ int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src);

/**
* Allocate an AVFrame and set its fields to default values. The resulting
* struct can be deallocated by simply calling av_free().
* struct must be freed using avcodec_free_frame().
*
* @return An AVFrame filled with default values or NULL on failure.
* @see avcodec_get_frame_defaults
@@ -3271,6 +3271,18 @@ AVFrame *avcodec_alloc_frame(void);
*/
void avcodec_get_frame_defaults(AVFrame *frame);

/**
* Free the frame and any dynamically allocated objects in it,
* e.g. extended_data.
*
* @param frame frame to be freed. The pointer will be set to NULL.
*
* @warning this function does NOT free the data buffers themselves
* (it does not know how, since they might have been allocated with
* a custom get_buffer()).
*/
void avcodec_free_frame(AVFrame **frame);

/**
* Initialize the AVCodecContext to use the given AVCodec. Prior to using this
* function the context has to be allocated with avcodec_alloc_context3().


+ 15
- 0
libavcodec/utils.c View File

@@ -659,6 +659,21 @@ AVFrame *avcodec_alloc_frame(void)
return frame;
}

void avcodec_free_frame(AVFrame **frame)
{
AVFrame *f;

if (!frame || !*frame)
return;

f = *frame;

if (f->extended_data != f->data)
av_freep(&f->extended_data);

av_freep(frame);
}

int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
{
int ret = 0;


+ 1
- 1
libavcodec/version.h View File

@@ -27,7 +27,7 @@
*/

#define LIBAVCODEC_VERSION_MAJOR 54
#define LIBAVCODEC_VERSION_MINOR 27
#define LIBAVCODEC_VERSION_MINOR 28
#define LIBAVCODEC_VERSION_MICRO 0

#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \


Loading…
Cancel
Save