[FFmpeg-devel] [RFC] eval API review
Michael Niedermayer
michaelni
Mon Apr 5 21:16:59 CEST 2010
On Sun, Apr 04, 2010 at 05:03:03PM +0200, Stefano Sabatini wrote:
> On date Sunday 2010-04-04 14:50:27 +0200, Michael Niedermayer encoded:
> > On Fri, Apr 02, 2010 at 06:32:31PM +0200, Stefano Sabatini wrote:
> > > Hi all,
> > >
> > > it has been mentioned many times that the eval API should be moved
> > > from lavc to lavu and make it public, where it could be used by
> > > non-lavc dependant applications and libraries (e.g. libswscale and
> > > libavfilter).
> > >
> > > Michael also mentioned that he wanted to review the API before to make
> > > it public, follows an attempt at it.
> >
> > a review of the existing API is in the form of
> > pieces of code of the existing api (that is .h file) interleaved with
> > comments about them like what you consider bad and why.
> > Iam completely puzzled about what you did or why
> > we have a existing api that is well tested and well working it just is
> > missing a review to make sure its future proof and fit for being made
> > public. You here post a changes api mixing cosmetic and functional
> > changes and its not even a patch nor do you explain why you made
> > these changes.
> > summary everything you did does not belong to a review
> > everything that does belong to a review is missing
> > a review implicates no changes
>
> I started by working to some patches for the eval API, but then I
> concluded that was it better to just show how the whole API would
> appear once applied all the changes I'm going to propose.
>
> Then once it is clear which is the final destination, providing each
> single patch should be simpler and almost mechanics (because the
> design and its rationale has been already discussed).
>
> Follows my comments to the current API.
>
> ...
>
> General considerations.
>
> I propose to change the interface of the various function, to make it
> always return an int expressing an error condition, rather than
> provide a string with the error.
>
> This is both more consistent with the rest of the API, and imo easier
> to use. Error condition can be printed by av_log(), this also allows
> to specify in detail the error condition, while we currently return a
> const char* just describing the kind of error encountered (I mean "The
> variable "foo" is unknown." is generally more helpful than "Unknown
> variable.").
iam ok with using av_log() instead of returning a string.
>
> Then I suggest to use a more intuitive naming for the current
> functions and in some cases to change the order of parameters.
>
> ...
>
> |/**
> | * Parses and evaluates an expression.
> | * Note, this is significantly slower than ff_parse_eval()
> | * @param s expression as a zero terminated string for example "1+2^3+5*5+sin(2/3)"
> | * @param func1 NULL terminated array of function pointers for functions which take 1 argument
> | * @param func2 NULL terminated array of function pointers for functions which take 2 arguments
> | * @param const_name NULL terminated array of zero terminated strings of constant identifers for example {"PI", "E", 0}
> | * @param func1_name NULL terminated array of zero terminated strings of func1 identifers
> | * @param func2_name NULL terminated array of zero terminated strings of func2 identifers
> | * @param error pointer to a char* which is set to an error message if something goes wrong
> | * @param const_value a zero terminated array of values for the identifers from const_name
> | * @param opaque a pointer which will be passed to all functions from func1 and func2
> | * @return the value of the expression
> | */
> |double ff_eval2(const char *s, const double *const_value, const char * const *const_name,
> | double (**func1)(void *, double), const char **func1_name,
> | double (**func2)(void *, double, double), const char **func2_name,
> | void *opaque, const char **error);
>
> I propose to change this to:
> int av_parse_eval_expr(double *res,
> const char *expr,
> const char * const *var_names , const double *var_values,
> const char * const *func1_names, double (**func1)(void *, double),
> const char * const *func2_names, double (**func2)(void *, double, double),
> void *opaque);
>
> In this variant the disposition of identifier names <->
> values/functions referred is thighter than in ff_eval2(), which should
> help usability.
>
> |typedef struct ff_expr_s AVEvalExpr;
why not AVExpr ?
and if so all the names might need to be adapted to that
[...]
> |[...]
> |double av_strtod(const char *numstr, char **tail);
>
> I propose to replace this with a function:
> int av_strtod2(double *res, const char *numstr, char **tail);
>
> for consistency with the rest of the API.
libc strtod() has a widespread API, iam against us using a different one
that is unless the widespread one has a shortcomming.
>
> At the end the API should consist of the following functions:
> av_parse_expr() // parse an expression and create an AVEvalExpr
> av_eval_expr() // evaluate an already parsed expression
> av_parse_eval_expr() // parse and evaluate at once an expression
if you want to use long names then this is missing an "and"
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
I have never wished to cater to the crowd; for what I know they do not
approve, and what they approve I do not know. -- Epicurus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20100405/8c184cf3/attachment.pgp>
More information about the ffmpeg-devel
mailing list