[FFmpeg-devel] [PATCH] New registration system for avfilter filters
Stefano Sabatini
stefano.sabatini-lala
Mon Nov 23 01:37:20 CET 2009
On date Monday 2009-11-23 00:07:02 +0100, Michael Niedermayer encoded:
> On Sun, Nov 22, 2009 at 08:47:47PM +0100, Stefano Sabatini wrote:
> > Hi,
> >
> > this may be applied to the other list of registered elements in
> > libav*.
> >
> > This system avoids a non-const field in struct AVFilter, thus allowing
> > for the use of shareable memory for the AVFilter definitions.
> >
> > I'm also attaching a patch for an av_filter_next() which uses it, and
> > an application example.
> >
> > Regards.
> > --
> > FFmpeg = Frightening and Funny Monstrous Pitiful ExchanGer
>
> > avfilter.c | 31 +++++++++++++++++--------------
> > avfilter.h | 4 +++-
> > 2 files changed, 20 insertions(+), 15 deletions(-)
> > f971a01b2d1e8e9d30b76b68e9bbc99d7495b028 change-avfilter-register.patch
> > Index: ffmpeg/libavfilter/avfilter.c
> > ===================================================================
> > --- ffmpeg.orig/libavfilter/avfilter.c 2009-11-22 18:50:31.000000000 +0100
> > +++ ffmpeg/libavfilter/avfilter.c 2009-11-22 20:22:49.000000000 +0100
> > @@ -328,33 +328,36 @@
> > draw_slice(link, y, h);
> > }
> >
> > -AVFilter *first_avfilter = NULL;
> > +#define MAX_REGISTERED_AVFILTERS_NB 64
> > +
> > +AVFilter *registered_avfilters[MAX_REGISTERED_AVFILTERS_NB + 1];
> >
> > AVFilter *avfilter_get_by_name(const char *name)
> > {
> > - AVFilter *filter;
> > -
> > - for (filter = first_avfilter; filter; filter = filter->next)
> > - if (!strcmp(filter->name, name))
> > - return filter;
>
> > + for (int i = 0; registered_avfilters[i] && i < MAX_REGISTERED_AVFILTERS_NB; i++)
>
> i suspect that breaks gcc 2.95
>
>
> > + if (!strcmp(registered_avfilters[i]->name, name))
> > + return registered_avfilters[i];
> >
> > return NULL;
> > }
> >
>
> > -void avfilter_register(AVFilter *filter)
> > +int avfilter_register(AVFilter *filter)
> > {
> > - AVFilter **p;
> > - p = &first_avfilter;
> > - while (*p)
> > - p = &(*p)->next;
> > + int i;
> > +
> > + for (i = 0; registered_avfilters[i] && i < MAX_REGISTERED_AVFILTERS_NB; i++)
> > + ;
>
> please keep a registered_avfilters_idx variable somewhere instead of this
> search
Done.
> > +
> > + if (i == MAX_REGISTERED_AVFILTERS_NB)
> > + return -1;
> >
> > - *p = filter;
> > - filter->next = NULL;
> > + registered_avfilters[i] = filter;
> > + return 0;
> > }
> >
>
> > void avfilter_uninit(void)
> > {
> > - first_avfilter = NULL;
> > + memset(registered_avfilters, 0, sizeof(AVFilter *) * MAX_REGISTERED_AVFILTERS_NB);
>
> sizeof(registered_avfilters)
Fixed.
[...]
Regards.
--
FFmpeg = Faboulous Free Merciful Patchable Elastic God
-------------- next part --------------
A non-text attachment was scrubbed...
Name: change-avfilter-register.patch
Type: text/x-diff
Size: 2177 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20091123/0de68934/attachment.patch>
More information about the ffmpeg-devel
mailing list