[FFmpeg-devel] [PATCH] lavf/os_support: Add safe win32 dlopen/dlclose/dlsym functions.
Matt Oliver
protogonoi at gmail.com
Mon Oct 31 05:51:48 EET 2016
On 31 October 2016 at 05:30, James Almer <jamrial at gmail.com> wrote:
> On 10/30/2016 8:31 AM, Matt Oliver wrote:
> > From 1dc1f59158cfb12d9160ee47342f5742d67ad864 Mon Sep 17 00:00:00 2001
> > From: Matt Oliver <protogonoi at 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.
>
Changed, I also moved the avisynth stuff up to the external libraries
section of configure
>
> > 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0003-avformat-avisynth.c-Use-new-safe-dlopen-code.patch
Type: application/octet-stream
Size: 4959 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20161031/42f553e6/attachment.obj>
More information about the ffmpeg-devel
mailing list