On 10/30/2016 11:51 PM, Matt Oliver wrote:
On 31 October 2016 at 05:30, James Almer <jamr...@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 <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.
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
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Tested under Ubuntu and Windows 10. The AviSynth stuff LGTM.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel