diff options
author | Philip Gladstone <philipjsg@users.sourceforge.net> | 2002-11-30 17:16:32 +0000 |
---|---|---|
committer | Philip Gladstone <philipjsg@users.sourceforge.net> | 2002-11-30 17:16:32 +0000 |
commit | 042f24652e09afe9bc7d865fa0af29855ea9dae9 (patch) | |
tree | e333b411d900acba00b3e5973e747ea04de394bb | |
parent | 9e4e1659d694af5269d883ee54e809e0c9732002 (diff) | |
download | ffmpeg-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.c | 19 | ||||
-rw-r--r-- | libavformat/framehook.h | 14 |
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 |