On Thu, 4 Jan 2018 17:02:41 +0100 wm4 <nfx...@googlemail.com> wrote:
> It was sort of optional before - if you didn't call it, networking was > initialized on demand, and an ugly warning was logged. Also, the doxygen > comments threatened that it would be made strictly required one day. > > Make it explicitly optional. I would prefer to deprecate it fully, but > there might still be legitimate reasons to use this. But the average > user won't need it. > > This is needed only for two reasons: to initialize TLS libraries like > OpenSSL and GnuTLS, and winsock. > > OpenSSL and GnuTLS were already silently initialized on demand if the > global network init function was not called. They also have various > thread-safety acrobatics, which make concurrent initialization within > libavformat safe. In addition, the libraries are moving towards making > their global init functions safe, which removes all need for central > global init. In particular, GnuTLS 3.5.16 and OpenSSL 1.1.0g have been > found to have safe init functions. In all cases, they use internal > reference counters to avoid that the global uninit functions interfere > with concurrent uses of the library by other API users who called global > init. > > winsock should be thread-safe as well, and maintains an internal > reference counter as well. > > Since we still support ancient TLS libraries, which do not have this > fixed, and since it's unknown whether winsock and GnuTLS > reinitialization is costly in any way, don't deprecate the libavformat > functions yet. > --- > doc/APIchanges | 6 ++++++ > libavformat/avformat.h | 19 +++++++++++++------ > libavformat/network.c | 9 --------- > libavformat/network.h | 1 - > libavformat/utils.c | 2 -- > libavformat/version.h | 2 +- > 6 files changed, 20 insertions(+), 19 deletions(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index 38c1be61c7..87ff51bdc2 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -15,6 +15,12 @@ libavutil: 2017-10-21 > > API changes, most recent first: > > +2017-xx-xx - xxxxxxx - lavf 58.3.101 - avformat.h > + Explicitly make avformat_network_init() and avformat_network_deinit() > optional. > + If these are not called, network initialization and deinitialization is > + automatic, and unlike in older versions, fully supported, unless > libavformat > + is linked to ancient GnuTLS and OpenSSL. > + > 2017-xx-xx - xxxxxxx - lavr 4.0.0 - avresample.h > Deprecate the entire library. Merged years ago to provide compatibility > with Libav, it remained unmaintained by the FFmpeg project and duplicated > diff --git a/libavformat/avformat.h b/libavformat/avformat.h > index 4f2798a871..9de851fcc5 100644 > --- a/libavformat/avformat.h > +++ b/libavformat/avformat.h > @@ -1993,17 +1993,24 @@ void av_register_input_format(AVInputFormat *format); > void av_register_output_format(AVOutputFormat *format); > > /** > - * Do global initialization of network components. This is optional, > - * but recommended, since it avoids the overhead of implicitly > - * doing the setup for each session. > + * Do global initialization of network libraries. This is optional, > + * and not recommended anymore. > * > - * Calling this function will become mandatory if using network > - * protocols at some major version bump. > + * This functions only exists to work around thread-safety issues > + * with older GnuTLS or OpenSSL libraries. If libavformat is linked > + * to newer versions of those libraries, or if you do not use them, > + * calling this function is unnecessary. Otherwise, you need to call > + * this function before any other threads using them are started. > + * > + * This function will be deprecated once support for older GnuTLS and > + * OpenSSL libraries is removed, and this function has no purpose > + * anymore. > */ > int avformat_network_init(void); > > /** > - * Undo the initialization done by avformat_network_init. > + * Undo the initialization done by avformat_network_init. Call it only > + * once for each time you called avformat_network_init. > */ > int avformat_network_deinit(void); > > diff --git a/libavformat/network.c b/libavformat/network.c > index e9eb4b443a..d5c82e9ab9 100644 > --- a/libavformat/network.c > +++ b/libavformat/network.c > @@ -54,20 +54,11 @@ void ff_tls_deinit(void) > #endif > } > > -int ff_network_inited_globally; > - > int ff_network_init(void) > { > #if HAVE_WINSOCK2_H > WSADATA wsaData; > -#endif > > - if (!ff_network_inited_globally) > - av_log(NULL, AV_LOG_WARNING, "Using network protocols without global > " > - "network initialization. Please use " > - "avformat_network_init(), this will " > - "become mandatory later.\n"); > -#if HAVE_WINSOCK2_H > if (WSAStartup(MAKEWORD(1,1), &wsaData)) > return 0; > #endif > diff --git a/libavformat/network.h b/libavformat/network.h > index a663115541..22a4fb8950 100644 > --- a/libavformat/network.h > +++ b/libavformat/network.h > @@ -75,7 +75,6 @@ int ff_neterrno(void); > > int ff_socket_nonblock(int socket, int enable); > > -extern int ff_network_inited_globally; > int ff_network_init(void); > void ff_network_close(void); > > diff --git a/libavformat/utils.c b/libavformat/utils.c > index 2185a6f05b..51a510cbb7 100644 > --- a/libavformat/utils.c > +++ b/libavformat/utils.c > @@ -4873,7 +4873,6 @@ int avformat_network_init(void) > { > #if CONFIG_NETWORK > int ret; > - ff_network_inited_globally = 1; > if ((ret = ff_network_init()) < 0) > return ret; > if ((ret = ff_tls_init()) < 0) > @@ -4887,7 +4886,6 @@ int avformat_network_deinit(void) > #if CONFIG_NETWORK > ff_network_close(); > ff_tls_deinit(); > - ff_network_inited_globally = 0; > #endif > return 0; > } > diff --git a/libavformat/version.h b/libavformat/version.h > index 5ced041f0a..6453d4559f 100644 > --- a/libavformat/version.h > +++ b/libavformat/version.h > @@ -33,7 +33,7 @@ > // Also please add any ticket numbers that you believe might be affected here > #define LIBAVFORMAT_VERSION_MAJOR 58 > #define LIBAVFORMAT_VERSION_MINOR 3 > -#define LIBAVFORMAT_VERSION_MICRO 100 > +#define LIBAVFORMAT_VERSION_MICRO 101 > > #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ > LIBAVFORMAT_VERSION_MINOR, \ Pushed. Changed the commit prefix, and made the micro bump a minor one. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel