aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Gladstone <philipjsg@users.sourceforge.net>2002-11-30 17:16:32 +0000
committerPhilip Gladstone <philipjsg@users.sourceforge.net>2002-11-30 17:16:32 +0000
commit042f24652e09afe9bc7d865fa0af29855ea9dae9 (patch)
treee333b411d900acba00b3e5973e747ea04de394bb
parent9e4e1659d694af5269d883ee54e809e0c9732002 (diff)
downloadffmpeg-042f24652e09afe9bc7d865fa0af29855ea9dae9.tar.gz
Added support for a realease function to eliminate the context blocks used
by each hook. Originally committed as revision 1294 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavformat/framehook.c19
-rw-r--r--libavformat/framehook.h14
2 files changed, 30 insertions, 3 deletions
diff --git a/libavformat/framehook.c b/libavformat/framehook.c
index 03ee32e188..e0597f00c1 100644
--- a/libavformat/framehook.c
+++ b/libavformat/framehook.c
@@ -21,7 +21,7 @@
#include "framehook.h"
#include "avformat.h"
-#ifdef HAVE_VHOOK
+#ifdef CONFIG_HAVE_DLFCN
#include <dlfcn.h>
#endif
@@ -30,6 +30,7 @@ typedef struct _FrameHookEntry {
struct _FrameHookEntry *next;
FrameHookConfigureFn Configure;
FrameHookProcessFn Process;
+ FrameHookReleaseFn Release;
void *ctx;
} FrameHookEntry;
@@ -59,6 +60,7 @@ int frame_hook_add(int argc, char *argv[])
fhe->Configure = dlsym(loaded, "Configure");
fhe->Process = dlsym(loaded, "Process");
+ fhe->Release = dlsym(loaded, "Release"); /* Optional */
if (!fhe->Process) {
fprintf(stderr, "Failed to find Process entrypoint in %s\n", argv[0]);
@@ -100,3 +102,18 @@ void frame_hook_process(AVPicture *pict, enum PixelFormat pix_fmt, int width, in
}
}
}
+
+void frame_hook_release()
+{
+ FrameHookEntry *fhe;
+ FrameHookEntry *fhenext;
+
+ for (fhe = first_hook; fhe; fhe = fhenext) {
+ fhenext = fhe->next;
+ if (fhe->Release)
+ fhe->Release(fhe->ctx);
+ av_free(fhe);
+ }
+
+ first_hook = NULL;
+}
diff --git a/libavformat/framehook.h b/libavformat/framehook.h
index eb1a51f7e4..210b3d20f4 100644
--- a/libavformat/framehook.h
+++ b/libavformat/framehook.h
@@ -8,12 +8,22 @@
#include "avcodec.h"
/* Function must be called 'Configure' */
-typedef int (*FrameHookConfigureFn)(void **ctxp, int argc, char *argv[]);
+typedef int (FrameHookConfigure)(void **ctxp, int argc, char *argv[]);
+typedef FrameHookConfigure *FrameHookConfigureFn;
+extern FrameHookConfigure Configure;
/* Function must be called 'Process' */
-typedef void (*FrameHookProcessFn)(void *ctx, struct AVPicture *pict, enum PixelFormat pix_fmt, int width, int height, INT64 pts);
+typedef void (FrameHookProcess)(void *ctx, struct AVPicture *pict, enum PixelFormat pix_fmt, int width, int height, INT64 pts);
+typedef FrameHookProcess *FrameHookProcessFn;
+extern FrameHookProcess Process;
+
+/* Function must be called 'Release' */
+typedef void (FrameHookRelease)(void *ctx);
+typedef FrameHookRelease *FrameHookReleaseFn;
+extern FrameHookRelease Release;
extern int frame_hook_add(int argc, char *argv[]);
extern void frame_hook_process(struct AVPicture *pict, enum PixelFormat pix_fmt, int width, int height);
+extern void frame_hook_release();
#endif