Originally committed as revision 25665 to svn://svn.ffmpeg.org/ffmpeg/trunktags/n0.8
| @@ -115,8 +115,8 @@ documentation: $(addprefix doc/, developer.html faq.html general.html libavfilte | |||||
| $(HTMLPAGES) $(MANPAGES): doc/fftools-common-opts.texi | $(HTMLPAGES) $(MANPAGES): doc/fftools-common-opts.texi | ||||
| doc/ffmpeg.pod doc/ffmpeg-doc.html: doc/indevs.texi doc/filters.texi doc/outdevs.texi doc/protocols.texi | |||||
| doc/ffplay.pod doc/ffplay-doc.html: doc/indevs.texi doc/filters.texi doc/outdevs.texi doc/protocols.texi | |||||
| doc/ffmpeg.pod doc/ffmpeg-doc.html: doc/eval.texi doc/indevs.texi doc/filters.texi doc/outdevs.texi doc/protocols.texi | |||||
| doc/ffplay.pod doc/ffplay-doc.html: doc/eval.texi doc/indevs.texi doc/filters.texi doc/outdevs.texi doc/protocols.texi | |||||
| doc/ffprobe.pod doc/ffprobe-doc.html: doc/indevs.texi doc/protocols.texi | doc/ffprobe.pod doc/ffprobe-doc.html: doc/indevs.texi doc/protocols.texi | ||||
| doc/%.html: TAG = HTML | doc/%.html: TAG = HTML | ||||
| @@ -0,0 +1,137 @@ | |||||
| @chapter Expression Evaluation | |||||
| @c man begin EXPRESSION EVALUATION | |||||
| When evaluating an arithemetic expression, FFmpeg uses an internal | |||||
| formula evaluator, implemented through the @file{libavutil/eval.h} | |||||
| interface. | |||||
| An expression may contain unary, binary operators, constants, and | |||||
| functions. | |||||
| Two expressions @var{expr1} and @var{expr2} can be combined to form | |||||
| another expression "@var{expr1};@var{expr2}". | |||||
| @var{expr1} and @var{expr2} are evaluated in turn, and the new | |||||
| expression evaluates to the value of @var{expr2}. | |||||
| The following binary operators are available: @code{+}, @code{-}, | |||||
| @code{*}, @code{/}, @code{^}. | |||||
| The following unary operators are available: @code{+}, @code{-}. | |||||
| The following functions are available: | |||||
| @table @option | |||||
| @item sinh(x) | |||||
| @item cosh(x) | |||||
| @item tanh(x) | |||||
| @item sin(x) | |||||
| @item cos(x) | |||||
| @item tan(x) | |||||
| @item atan(x) | |||||
| @item asin(x) | |||||
| @item acos(x) | |||||
| @item exp(x) | |||||
| @item log(x) | |||||
| @item abs(x) | |||||
| @item squish(x) | |||||
| @item gauss(x) | |||||
| @item mod(x, y) | |||||
| @item max(x, y) | |||||
| @item min(x, y) | |||||
| @item eq(x, y) | |||||
| @item gte(x, y) | |||||
| @item gt(x, y) | |||||
| @item lte(x, y) | |||||
| @item lt(x, y) | |||||
| @item st(var, expr) | |||||
| Allow to store the value of the expression @var{expr} in an internal | |||||
| variable. @var{var} specifies the number of the variable where to | |||||
| store the value, and it is a value ranging from 0 to 9. The function | |||||
| returns the value stored in the internal variable. | |||||
| @item ld(var) | |||||
| Allow to load the value of the internal variable with number | |||||
| @var{var}, which was previosly stored with st(@var{var}, @var{expr}). | |||||
| The function returns the loaded value. | |||||
| @item while(cond, expr) | |||||
| Evaluate expression @var{expr} while the expression @var{cond} is | |||||
| non-zero, and returns the value of the last @var{expr} evaluation, or | |||||
| NAN if @var{cond} was always false. | |||||
| @end table | |||||
| Note that: | |||||
| @code{*} works like AND | |||||
| @code{+} works like OR | |||||
| thus | |||||
| @example | |||||
| if A then B else C | |||||
| @end example | |||||
| is equivalent to | |||||
| @example | |||||
| A*B + not(A)*C | |||||
| @end example | |||||
| When A evaluates to either 1 or 0, that is the same as | |||||
| @example | |||||
| A*B + eq(A,0)*C | |||||
| @end example | |||||
| In your C code, you can extend the list of unary and binary functions, | |||||
| and define recognized constants, so that they are available for your | |||||
| expressions. | |||||
| The evaluator also recognizes the International System number | |||||
| postfixes. If 'i' is appended after the postfix, powers of 2 are used | |||||
| instead of powers of 10. The 'B' postfix multiplies the value for 8, | |||||
| and can be appended after another postfix or used alone. This allows | |||||
| using for example 'KB', 'MiB', 'G' and 'B' as postfix. | |||||
| Follows the list of available International System postfixes, with | |||||
| indication of the corresponding powers of 10 and of 2. | |||||
| @table @option | |||||
| @item y | |||||
| -24 / -80 | |||||
| @item z | |||||
| -21 / -70 | |||||
| @item a | |||||
| -18 / -60 | |||||
| @item f | |||||
| -15 / -50 | |||||
| @item p | |||||
| -12 / -40 | |||||
| @item n | |||||
| -9 / -30 | |||||
| @item u | |||||
| -6 / -20 | |||||
| @item m | |||||
| -3 / -10 | |||||
| @item c | |||||
| -2 | |||||
| @item d | |||||
| -1 | |||||
| @item h | |||||
| 2 | |||||
| @item k | |||||
| 3 / 10 | |||||
| @item K | |||||
| 3 / 10 | |||||
| @item M | |||||
| 6 / 20 | |||||
| @item G | |||||
| 9 / 30 | |||||
| @item T | |||||
| 12 / 40 | |||||
| @item P | |||||
| 15 / 40 | |||||
| @item E | |||||
| 18 / 50 | |||||
| @item Z | |||||
| 21 / 60 | |||||
| @item Y | |||||
| 24 / 70 | |||||
| @end table | |||||
| @c man end | |||||
| @@ -354,8 +354,39 @@ qp offset between P- and B-frames | |||||
| @item -i_qoffset @var{offset} | @item -i_qoffset @var{offset} | ||||
| qp offset between P- and I-frames | qp offset between P- and I-frames | ||||
| @item -rc_eq @var{equation} | @item -rc_eq @var{equation} | ||||
| Set rate control equation (@pxref{FFmpeg formula | |||||
| evaluator}) (default = @code{tex^qComp}). | |||||
| Set rate control equation (see section "Expression Evaluation") | |||||
| (default = @code{tex^qComp}). | |||||
| When computing the rate control equation expression, besides the | |||||
| standard functions defined in the section "Expression Evaluation", the | |||||
| following functions are available: | |||||
| @table @var | |||||
| @item bits2qp(bits) | |||||
| @item qp2bits(qp) | |||||
| @end table | |||||
| and the following constants are available: | |||||
| @table @var | |||||
| @item iTex | |||||
| @item pTex | |||||
| @item tex | |||||
| @item mv | |||||
| @item fCode | |||||
| @item iCount | |||||
| @item mcVar | |||||
| @item var | |||||
| @item isI | |||||
| @item isP | |||||
| @item isB | |||||
| @item avgQP | |||||
| @item qComp | |||||
| @item avgIITex | |||||
| @item avgPITex | |||||
| @item avgPPTex | |||||
| @item avgBPTex | |||||
| @item avgTex | |||||
| @end table | |||||
| @item -rc_override @var{override} | @item -rc_override @var{override} | ||||
| rate control override for specific intervals | rate control override for specific intervals | ||||
| @item -me_method @var{method} | @item -me_method @var{method} | ||||
| @@ -694,74 +725,6 @@ directories, where @var{codec_name} is the name of the codec to which | |||||
| the preset file options will be applied. For example, if you select | the preset file options will be applied. For example, if you select | ||||
| the video codec with @code{-vcodec libx264} and use @code{-vpre max}, | the video codec with @code{-vcodec libx264} and use @code{-vpre max}, | ||||
| then it will search for the file @file{libx264-max.ffpreset}. | then it will search for the file @file{libx264-max.ffpreset}. | ||||
| @anchor{FFmpeg formula evaluator} | |||||
| @section FFmpeg formula evaluator | |||||
| When evaluating a rate control string, FFmpeg uses an internal formula | |||||
| evaluator. | |||||
| The following binary operators are available: @code{+}, @code{-}, | |||||
| @code{*}, @code{/}, @code{^}. | |||||
| The following unary operators are available: @code{+}, @code{-}, | |||||
| @code{(...)}. | |||||
| The following statements are available: @code{ld}, @code{st}, | |||||
| @code{while}. | |||||
| The following functions are available: | |||||
| @table @var | |||||
| @item sinh(x) | |||||
| @item cosh(x) | |||||
| @item tanh(x) | |||||
| @item sin(x) | |||||
| @item cos(x) | |||||
| @item tan(x) | |||||
| @item atan(x) | |||||
| @item asin(x) | |||||
| @item acos(x) | |||||
| @item exp(x) | |||||
| @item log(x) | |||||
| @item abs(x) | |||||
| @item squish(x) | |||||
| @item gauss(x) | |||||
| @item mod(x, y) | |||||
| @item max(x, y) | |||||
| @item min(x, y) | |||||
| @item eq(x, y) | |||||
| @item gte(x, y) | |||||
| @item gt(x, y) | |||||
| @item lte(x, y) | |||||
| @item lt(x, y) | |||||
| @item bits2qp(bits) | |||||
| @item qp2bits(qp) | |||||
| @end table | |||||
| The following constants are available: | |||||
| @table @var | |||||
| @item PI | |||||
| @item E | |||||
| @item iTex | |||||
| @item pTex | |||||
| @item tex | |||||
| @item mv | |||||
| @item fCode | |||||
| @item iCount | |||||
| @item mcVar | |||||
| @item var | |||||
| @item isI | |||||
| @item isP | |||||
| @item isB | |||||
| @item avgQP | |||||
| @item qComp | |||||
| @item avgIITex | |||||
| @item avgPITex | |||||
| @item avgPPTex | |||||
| @item avgBPTex | |||||
| @item avgTex | |||||
| @end table | |||||
| @c man end | @c man end | ||||
| @chapter Tips | @chapter Tips | ||||
| @@ -970,6 +933,7 @@ options have to be specified immediately after the name of the output | |||||
| file to which you want to add them. | file to which you want to add them. | ||||
| @c man end EXAMPLES | @c man end EXAMPLES | ||||
| @include eval.texi | |||||
| @include indevs.texi | @include indevs.texi | ||||
| @include outdevs.texi | @include outdevs.texi | ||||
| @include protocols.texi | @include protocols.texi | ||||
| @@ -153,6 +153,7 @@ Seek to percentage in file corresponding to fraction of width. | |||||
| @c man end | @c man end | ||||
| @include eval.texi | |||||
| @include indevs.texi | @include indevs.texi | ||||
| @include outdevs.texi | @include outdevs.texi | ||||
| @include protocols.texi | @include protocols.texi | ||||