[FFmpeg-devel] [PATCH] add init/uninit code to cmdutils.c

Reimar Döffinger Reimar.Doeffinger
Sat Sep 25 15:52:50 CEST 2010


On Sat, Sep 25, 2010 at 02:26:09PM +0100, M?ns Rullg?rd wrote:
> Stefano Sabatini <stefano.sabatini-lala at poste.it> writes:
> 
> > On date Saturday 2010-09-25 14:19:55 +0200, Reimar D?ffinger encoded:
> >> Hello,
> >> this avoids some code duplication between ffmpeg and ffplay and also frees
> >> the AVFormatContext::key value.
> >> The tests pass, but I do not know the code well enough to be 100%
> >> certain that using SWS_BICUBIC always instead of sws_flags is ok for
> >> the option parsing.
> >
> > [...]
> >> Index: cmdutils.c
> >> ===================================================================
> >> --- cmdutils.c	(revision 25163)
> >> +++ cmdutils.c	(working copy)
> >> @@ -56,6 +56,25 @@
> >>  
> >>  const int this_year = 2010;
> >>  
> >> +void init_opts(void)
> >> +{
> >> +    int i;
> >> +    for (i = 0; i < AVMEDIA_TYPE_NB; i++)
> >> +        avcodec_opts[i] = avcodec_alloc_context2(i);
> >> +    avformat_opts = avformat_alloc_context();
> >> +    sws_opts = sws_getContext(16, 16, 0, 16, 16, 0, SWS_BICUBIC, NULL, NULL, NULL);
> >> +}
> >> +
> >> +void uninit_opts(void)
> >> +{
> >> +    int i;
> >> +    for (i = 0; i < AVMEDIA_TYPE_NB; i++)
> >> +        av_freep(&avcodec_opts[i]);
> >
> >> +    av_freep(&avformat_opts->key);
> >
> > Why is AVFormatContext.key special?
> 
> It is the only FF_OPT_TYPE_BINARY option.
> 
> > Shouldn't we have a function for automatically clean it up?
> 
> I suppose a function traversing the list and freeing all
> FF_OPT_TYPE_BINARY things might make sense.  Would you like to write
> one?

It should also free all FF_OPT_TYPE_STRING.
However you can't traverse the option list since you don't have one.
I can take this one out if you mind the hack, however I at least
won't be writing a proper solution to this any time soon.
(the proper solution would probably to free anything in the
contexts that is a pointer type and marked as allocated by the
user in the documentation).



More information about the ffmpeg-devel mailing list