• wm4's avatar
    avformat: make avformat_network_init() explicitly optional · 631c56a8
    wm4 authored
    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.
    631c56a8
utils.c 193 KB