On 10/30/2016 8:31 AM, Matt Oliver wrote: > From 1dc1f59158cfb12d9160ee47342f5742d67ad864 Mon Sep 17 00:00:00 2001 > From: Matt Oliver <protogo...@gmail.com> > Date: Sun, 30 Oct 2016 15:13:47 +1100 > Subject: [PATCH] avformat/avisynth.c: Use new safe dlopen code. > > --- > configure | 5 ++--- > libavformat/avisynth.c | 14 +++++--------- > 2 files changed, 7 insertions(+), 12 deletions(-) > > diff --git a/configure b/configure > index 5993de5..9feb544 100755 > --- a/configure > +++ b/configure > @@ -2850,6 +2850,7 @@ asf_stream_muxer_select="asf_muxer" > avi_demuxer_select="iso_media riffdec exif" > avi_muxer_select="riffenc" > avisynth_demuxer_deps="avisynth" > +avisynth_demuxer_deps_any="dlopen LoadLibrary" > avisynth_demuxer_select="riffdec"
With this change and the stuff removed below, avisynth (CONFIG_AVISYNTH) will always be enabled if you configure with --enable-avisynth, and only avisynth_demuxer will be disabled depending on the presence of dlopen and LoadLibrary. This is probably not intended, seeing how libavformat/Makefile checks for CONFIG_AVISYNTH and not CONFIG_AVISYNTH_DEMUXER in order to compile the source file, so you should make it avisynth_deps_any="dlopen LoadLibrary" since avisynth_demuxer already depends on avisynth. Also, consider changing libavformat/Makefile to check for the demuxer rather than the library/feature. > caf_demuxer_select="iso_media riffdec" > dash_muxer_select="mp4_muxer" > @@ -5417,6 +5418,7 @@ elif check_func dlopen -ldl && check_func dlsym -ldl; > then > ldl=-ldl > fi > > +avisynth_demuxer_extralibs='$ldl' > decklink_outdev_extralibs="$decklink_outdev_extralibs $ldl" > decklink_indev_extralibs="$decklink_indev_extralibs $ldl" > frei0r_filter_extralibs='$ldl' > @@ -5664,9 +5666,6 @@ fi > enabled avfoundation_indev && { check_header_objcc > AVFoundation/AVFoundation.h || disable avfoundation_indev; } > enabled avfoundation_indev && { check_lib2 CoreGraphics/CoreGraphics.h > CGGetActiveDisplayList -framework CoreGraphics || > check_lib2 > ApplicationServices/ApplicationServices.h CGGetActiveDisplayList -framework > ApplicationServices; } > -enabled avisynth && { { check_lib2 "windows.h" LoadLibrary; } || > - { check_lib2 "dlfcn.h" dlopen -ldl; } || > - die "ERROR: LoadLibrary/dlopen not found for > avisynth"; } > enabled cuda && { check_lib cuda.h cuInit -lcuda || > die "ERROR: CUDA not found"; } > enabled cuvid && { add_cflags -I$source_path; > diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c > index 1acc44f..514cb99 100644 > --- a/libavformat/avisynth.c > +++ b/libavformat/avisynth.c > @@ -29,7 +29,7 @@ > > /* Platform-specific directives for AviSynth vs AvxSynth. */ > #ifdef _WIN32 > - #include <windows.h> > + #include "compat/w32dlfcn.h" > #undef EXTERN_C > #include "compat/avisynth/avisynth_c.h" > #define AVISYNTH_LIB "avisynth" > @@ -39,10 +39,6 @@ > #include "compat/avisynth/avxsynth_c.h" > #define AVISYNTH_NAME "libavxsynth" > #define AVISYNTH_LIB AVISYNTH_NAME SLIBSUF > - > - #define LoadLibrary(x) dlopen(x, RTLD_NOW | RTLD_LOCAL) > - #define GetProcAddress dlsym > - #define FreeLibrary dlclose > #endif > > typedef struct AviSynthLibrary { > @@ -118,13 +114,13 @@ static av_cold void avisynth_atexit_handler(void); > > static av_cold int avisynth_load_library(void) > { > - avs_library.library = LoadLibrary(AVISYNTH_LIB); > + avs_library.library = dlopen(AVISYNTH_LIB, RTLD_NOW | RTLD_LOCAL); > if (!avs_library.library) > return AVERROR_UNKNOWN; > > #define LOAD_AVS_FUNC(name, continue_on_fail) \ > avs_library.name = \ > - (void *)GetProcAddress(avs_library.library, #name); \ > + (void *)dlsym(avs_library.library, #name); \ > if (!continue_on_fail && !avs_library.name) \ > goto fail; > > @@ -157,7 +153,7 @@ static av_cold int avisynth_load_library(void) > return 0; > > fail: > - FreeLibrary(avs_library.library); > + dlclose(avs_library.library); > return AVERROR_UNKNOWN; > } > > @@ -225,7 +221,7 @@ static av_cold void avisynth_atexit_handler(void) > avisynth_context_destroy(avs); > avs = next; > } > - FreeLibrary(avs_library.library); > + dlclose(avs_library.library); > > avs_atexit_called = 1; > } > -- 2.10.1.windows.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel