diff options
author | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2010-07-11 07:35:00 +0000 |
---|---|---|
committer | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2010-07-11 07:35:00 +0000 |
commit | e1d7c8831cf6dddddb8e151a673e89016d7b10db (patch) | |
tree | 49852530bc45ea8d3acd66d8850c33c602caf93c | |
parent | c426562cbfbe24f3b37ba98b80c128dbcc1b7cc8 (diff) | |
download | ffmpeg-e1d7c8831cf6dddddb8e151a673e89016d7b10db.tar.gz |
Add avsubtitle_free function.
Originally committed as revision 24185 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | doc/APIchanges | 4 | ||||
-rw-r--r-- | ffplay.c | 13 | ||||
-rw-r--r-- | libavcodec/avcodec.h | 13 | ||||
-rw-r--r-- | libavcodec/utils.c | 20 |
4 files changed, 36 insertions, 14 deletions
diff --git a/doc/APIchanges b/doc/APIchanges index 43b8788c48..fe0789d25a 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -12,6 +12,10 @@ libavutil: 2009-03-08 API changes, most recent first: +2010-07-11 - r24185 - lavc 52.82.0 - avsubtitle_free() + Add a function for free the contents of a AVSubtitle generated by + avcodec_decode_subtitle. + 2010-07-08 - r24101 - lavu 50.21.0 - pixdesc.h Rename read/write_line() to av_read/write_image_line(). @@ -677,18 +677,7 @@ static void blend_subrect(AVPicture *dst, const AVSubtitleRect *rect, int imgw, static void free_subpicture(SubPicture *sp) { - int i; - - for (i = 0; i < sp->sub.num_rects; i++) - { - av_freep(&sp->sub.rects[i]->pict.data[0]); - av_freep(&sp->sub.rects[i]->pict.data[1]); - av_freep(&sp->sub.rects[i]); - } - - av_free(sp->sub.rects); - - memset(&sp->sub, 0, sizeof(AVSubtitle)); + avsubtitle_free(&sp->sub); } static void video_image_display(VideoState *is) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 05c96e8e56..475d9b5f03 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -30,7 +30,7 @@ #include "libavutil/avutil.h" #define LIBAVCODEC_VERSION_MAJOR 52 -#define LIBAVCODEC_VERSION_MINOR 81 +#define LIBAVCODEC_VERSION_MINOR 82 #define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ @@ -3548,13 +3548,22 @@ attribute_deprecated int avcodec_decode_subtitle(AVCodecContext *avctx, AVSubtit * due to a potentially very different allocation pattern. * * @param avctx the codec context - * @param[out] sub The AVSubtitle in which the decoded subtitle will be stored. + * @param[out] sub The AVSubtitle in which the decoded subtitle will be stored, must be + freed with avsubtitle_free if *got_sub_ptr is set. * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. * @param[in] avpkt The input AVPacket containing the input buffer. */ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, AVPacket *avpkt); + +/** + * Frees all allocated data in the given subtitle struct. + * + * @param sub AVSubtitle to free. + */ +void avsubtitle_free(AVSubtitle *sub); + int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata, int *data_size_ptr, uint8_t *buf, int buf_size); diff --git a/libavcodec/utils.c b/libavcodec/utils.c index c3d701c74f..ced6b64c29 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -689,6 +689,26 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, return ret; } +void avsubtitle_free(AVSubtitle *sub) +{ + int i; + + for (i = 0; i < sub->num_rects; i++) + { + av_freep(sub->rects[i]->pict.data[0]); + av_freep(sub->rects[i]->pict.data[1]); + av_freep(sub->rects[i]->pict.data[2]); + av_freep(sub->rects[i]->pict.data[3]); + av_freep(sub->rects[i]->text); + av_freep(sub->rects[i]->ass); + av_freep(sub->rects[i]); + } + + av_freep(sub->rects); + + memset(sub, 0, sizeof(AVSubtitle)); +} + av_cold int avcodec_close(AVCodecContext *avctx) { /* If there is a user-supplied mutex locking routine, call it. */ |