From 526604545fb1cc0c11af356fbffd5cddf8cdc95f Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 11 Dec 2011 10:34:08 +0100 Subject: [PATCH] lavf: add avformat_close_input(). It sets the supplied AVFormatContext pointer to NULL after freeing it, which is safer and its name is consistent with other lavf functions. Also deprecate av_close_input_file(). --- doc/APIchanges | 4 ++++ libavformat/avformat.h | 10 ++++++++++ libavformat/utils.c | 9 +++++++++ libavformat/version.h | 5 ++++- 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index 2c43e75dba..49c49d8b49 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -13,6 +13,10 @@ libavutil: 2011-04-18 API changes, most recent first: +2011-xx-xx - xxxxxxx - lavf 53.17.0 + Add avformat_open_input(). + Deprecate av_close_input_file() and av_close_input_stream(). + 2011-xx-xx - xxxxxxx - lavc 53.25.0 Add nb_samples and extended_data fields to AVFrame. Deprecate AVCODEC_MAX_AUDIO_FRAME_SIZE. diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 548bc186fb..2eb75df43a 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1570,12 +1570,22 @@ attribute_deprecated void av_close_input_stream(AVFormatContext *s); #endif +#if FF_API_CLOSE_INPUT_FILE /** + * @deprecated use avformat_close_input() * Close a media file (but not its codecs). * * @param s media file handle */ +attribute_deprecated void av_close_input_file(AVFormatContext *s); +#endif + +/** + * Close an opened input AVFormatContext. Free it and all its contents + * and set *s to NULL. + */ +void avformat_close_input(AVFormatContext **s); /** * @} */ diff --git a/libavformat/utils.c b/libavformat/utils.c index 8a76cb815e..a078d9c88b 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -2684,14 +2684,23 @@ void avformat_free_context(AVFormatContext *s) av_free(s); } +#if FF_API_CLOSE_INPUT_FILE void av_close_input_file(AVFormatContext *s) { + avformat_close_input(&s); +} +#endif + +void avformat_close_input(AVFormatContext **ps) +{ + AVFormatContext *s = *ps; AVIOContext *pb = (s->iformat->flags & AVFMT_NOFILE) || (s->flags & AVFMT_FLAG_CUSTOM_IO) ? NULL : s->pb; flush_packet_queue(s); if (s->iformat->read_close) s->iformat->read_close(s); avformat_free_context(s); + *ps = NULL; if (pb) avio_close(pb); } diff --git a/libavformat/version.h b/libavformat/version.h index 7ba411c494..e80787b2ee 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -30,7 +30,7 @@ #include "libavutil/avutil.h" #define LIBAVFORMAT_VERSION_MAJOR 53 -#define LIBAVFORMAT_VERSION_MINOR 16 +#define LIBAVFORMAT_VERSION_MINOR 17 #define LIBAVFORMAT_VERSION_MICRO 0 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ @@ -122,5 +122,8 @@ #ifndef FF_API_SET_PTS_INFO #define FF_API_SET_PTS_INFO (LIBAVFORMAT_VERSION_MAJOR < 54) #endif +#ifndef FF_API_CLOSE_INPUT_FILE +#define FF_API_CLOSE_INPUT_FILE (LIBAVFORMAT_VERSION_MAJOR < 54) +#endif #endif /* AVFORMAT_VERSION_H */