12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127 |
- @chapter Syntax
- @c man begin SYNTAX
- This section documents the syntax and formats employed by the FFmpeg
- libraries and tools.
- @anchor{quoting_and_escaping}
- @section Quoting and escaping
- FFmpeg adopts the following quoting and escaping mechanism, unless
- explicitly specified. The following rules are applied:
- @itemize
- @item
- @samp{'} and @samp{\} are special characters (respectively used for
- quoting and escaping). In addition to them, there might be other
- special characters depending on the specific syntax where the escaping
- and quoting are employed.
- @item
- A special character is escaped by prefixing it with a @samp{\}.
- @item
- All characters enclosed between @samp{''} are included literally in the
- parsed string. The quote character @samp{'} itself cannot be quoted,
- so you may need to close the quote and escape it.
- @item
- Leading and trailing whitespaces, unless escaped or quoted, are
- removed from the parsed string.
- @end itemize
- Note that you may need to add a second level of escaping when using
- the command line or a script, which depends on the syntax of the
- adopted shell language.
- The function @code{av_get_token} defined in
- @file{libavutil/avstring.h} can be used to parse a token quoted or
- escaped according to the rules defined above.
- The tool @file{tools/ffescape} in the FFmpeg source tree can be used
- to automatically quote or escape a string in a script.
- @subsection Examples
- @itemize
- @item
- Escape the string @code{Crime d'Amour} containing the @code{'} special
- character:
- @example
- Crime d\'Amour
- @end example
- @item
- The string above contains a quote, so the @code{'} needs to be escaped
- when quoting it:
- @example
- 'Crime d'\''Amour'
- @end example
- @item
- Include leading or trailing whitespaces using quoting:
- @example
- ' this string starts and ends with whitespaces '
- @end example
- @item
- Escaping and quoting can be mixed together:
- @example
- ' The string '\'string\'' is a string '
- @end example
- @item
- To include a literal @samp{\} you can use either escaping or quoting:
- @example
- 'c:\foo' can be written as c:\\foo
- @end example
- @end itemize
- @anchor{date syntax}
- @section Date
- The accepted syntax is:
- @example
- [(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]
- now
- @end example
- If the value is "now" it takes the current time.
- Time is local time unless Z is appended, in which case it is
- interpreted as UTC.
- If the year-month-day part is not specified it takes the current
- year-month-day.
- @anchor{time duration syntax}
- @section Time duration
- There are two accepted syntaxes for expressing time duration.
- @example
- [-][@var{HH}:]@var{MM}:@var{SS}[.@var{m}...]
- @end example
- @var{HH} expresses the number of hours, @var{MM} the number of minutes
- for a maximum of 2 digits, and @var{SS} the number of seconds for a
- maximum of 2 digits. The @var{m} at the end expresses decimal value for
- @var{SS}.
- @emph{or}
- @example
- [-]@var{S}+[.@var{m}...][s|ms|us]
- @end example
- @var{S} expresses the number of seconds, with the optional decimal part
- @var{m}. The optional literal suffixes @samp{s}, @samp{ms} or @samp{us}
- indicate to interpret the value as seconds, milliseconds or microseconds,
- respectively.
- In both expressions, the optional @samp{-} indicates negative duration.
- @subsection Examples
- The following examples are all valid time duration:
- @table @samp
- @item 55
- 55 seconds
- @item 0.2
- 0.2 seconds
- @item 200ms
- 200 milliseconds, that's 0.2s
- @item 200000us
- 200000 microseconds, that's 0.2s
- @item 12:03:45
- 12 hours, 03 minutes and 45 seconds
- @item 23.189
- 23.189 seconds
- @end table
- @anchor{video size syntax}
- @section Video size
- Specify the size of the sourced video, it may be a string of the form
- @var{width}x@var{height}, or the name of a size abbreviation.
- The following abbreviations are recognized:
- @table @samp
- @item ntsc
- 720x480
- @item pal
- 720x576
- @item qntsc
- 352x240
- @item qpal
- 352x288
- @item sntsc
- 640x480
- @item spal
- 768x576
- @item film
- 352x240
- @item ntsc-film
- 352x240
- @item sqcif
- 128x96
- @item qcif
- 176x144
- @item cif
- 352x288
- @item 4cif
- 704x576
- @item 16cif
- 1408x1152
- @item qqvga
- 160x120
- @item qvga
- 320x240
- @item vga
- 640x480
- @item svga
- 800x600
- @item xga
- 1024x768
- @item uxga
- 1600x1200
- @item qxga
- 2048x1536
- @item sxga
- 1280x1024
- @item qsxga
- 2560x2048
- @item hsxga
- 5120x4096
- @item wvga
- 852x480
- @item wxga
- 1366x768
- @item wsxga
- 1600x1024
- @item wuxga
- 1920x1200
- @item woxga
- 2560x1600
- @item wqsxga
- 3200x2048
- @item wquxga
- 3840x2400
- @item whsxga
- 6400x4096
- @item whuxga
- 7680x4800
- @item cga
- 320x200
- @item ega
- 640x350
- @item hd480
- 852x480
- @item hd720
- 1280x720
- @item hd1080
- 1920x1080
- @item 2k
- 2048x1080
- @item 2kflat
- 1998x1080
- @item 2kscope
- 2048x858
- @item 4k
- 4096x2160
- @item 4kflat
- 3996x2160
- @item 4kscope
- 4096x1716
- @item nhd
- 640x360
- @item hqvga
- 240x160
- @item wqvga
- 400x240
- @item fwqvga
- 432x240
- @item hvga
- 480x320
- @item qhd
- 960x540
- @item 2kdci
- 2048x1080
- @item 4kdci
- 4096x2160
- @item uhd2160
- 3840x2160
- @item uhd4320
- 7680x4320
- @end table
- @anchor{video rate syntax}
- @section Video rate
- Specify the frame rate of a video, expressed as the number of frames
- generated per second. It has to be a string in the format
- @var{frame_rate_num}/@var{frame_rate_den}, an integer number, a float
- number or a valid video frame rate abbreviation.
- The following abbreviations are recognized:
- @table @samp
- @item ntsc
- 30000/1001
- @item pal
- 25/1
- @item qntsc
- 30000/1001
- @item qpal
- 25/1
- @item sntsc
- 30000/1001
- @item spal
- 25/1
- @item film
- 24/1
- @item ntsc-film
- 24000/1001
- @end table
- @anchor{ratio syntax}
- @section Ratio
- A ratio can be expressed as an expression, or in the form
- @var{numerator}:@var{denominator}.
- Note that a ratio with infinite (1/0) or negative value is
- considered valid, so you should check on the returned value if you
- want to exclude those values.
- The undefined value can be expressed using the "0:0" string.
- @anchor{color syntax}
- @section Color
- It can be the name of a color as defined below (case insensitive match) or a
- @code{[0x|#]RRGGBB[AA]} sequence, possibly followed by @@ and a string
- representing the alpha component.
- The alpha component may be a string composed by "0x" followed by an
- hexadecimal number or a decimal number between 0.0 and 1.0, which
- represents the opacity value (@samp{0x00} or @samp{0.0} means completely
- transparent, @samp{0xff} or @samp{1.0} completely opaque). If the alpha
- component is not specified then @samp{0xff} is assumed.
- The string @samp{random} will result in a random color.
- The following names of colors are recognized:
- @table @samp
- @item AliceBlue
- 0xF0F8FF
- @item AntiqueWhite
- 0xFAEBD7
- @item Aqua
- 0x00FFFF
- @item Aquamarine
- 0x7FFFD4
- @item Azure
- 0xF0FFFF
- @item Beige
- 0xF5F5DC
- @item Bisque
- 0xFFE4C4
- @item Black
- 0x000000
- @item BlanchedAlmond
- 0xFFEBCD
- @item Blue
- 0x0000FF
- @item BlueViolet
- 0x8A2BE2
- @item Brown
- 0xA52A2A
- @item BurlyWood
- 0xDEB887
- @item CadetBlue
- 0x5F9EA0
- @item Chartreuse
- 0x7FFF00
- @item Chocolate
- 0xD2691E
- @item Coral
- 0xFF7F50
- @item CornflowerBlue
- 0x6495ED
- @item Cornsilk
- 0xFFF8DC
- @item Crimson
- 0xDC143C
- @item Cyan
- 0x00FFFF
- @item DarkBlue
- 0x00008B
- @item DarkCyan
- 0x008B8B
- @item DarkGoldenRod
- 0xB8860B
- @item DarkGray
- 0xA9A9A9
- @item DarkGreen
- 0x006400
- @item DarkKhaki
- 0xBDB76B
- @item DarkMagenta
- 0x8B008B
- @item DarkOliveGreen
- 0x556B2F
- @item Darkorange
- 0xFF8C00
- @item DarkOrchid
- 0x9932CC
- @item DarkRed
- 0x8B0000
- @item DarkSalmon
- 0xE9967A
- @item DarkSeaGreen
- 0x8FBC8F
- @item DarkSlateBlue
- 0x483D8B
- @item DarkSlateGray
- 0x2F4F4F
- @item DarkTurquoise
- 0x00CED1
- @item DarkViolet
- 0x9400D3
- @item DeepPink
- 0xFF1493
- @item DeepSkyBlue
- 0x00BFFF
- @item DimGray
- 0x696969
- @item DodgerBlue
- 0x1E90FF
- @item FireBrick
- 0xB22222
- @item FloralWhite
- 0xFFFAF0
- @item ForestGreen
- 0x228B22
- @item Fuchsia
- 0xFF00FF
- @item Gainsboro
- 0xDCDCDC
- @item GhostWhite
- 0xF8F8FF
- @item Gold
- 0xFFD700
- @item GoldenRod
- 0xDAA520
- @item Gray
- 0x808080
- @item Green
- 0x008000
- @item GreenYellow
- 0xADFF2F
- @item HoneyDew
- 0xF0FFF0
- @item HotPink
- 0xFF69B4
- @item IndianRed
- 0xCD5C5C
- @item Indigo
- 0x4B0082
- @item Ivory
- 0xFFFFF0
- @item Khaki
- 0xF0E68C
- @item Lavender
- 0xE6E6FA
- @item LavenderBlush
- 0xFFF0F5
- @item LawnGreen
- 0x7CFC00
- @item LemonChiffon
- 0xFFFACD
- @item LightBlue
- 0xADD8E6
- @item LightCoral
- 0xF08080
- @item LightCyan
- 0xE0FFFF
- @item LightGoldenRodYellow
- 0xFAFAD2
- @item LightGreen
- 0x90EE90
- @item LightGrey
- 0xD3D3D3
- @item LightPink
- 0xFFB6C1
- @item LightSalmon
- 0xFFA07A
- @item LightSeaGreen
- 0x20B2AA
- @item LightSkyBlue
- 0x87CEFA
- @item LightSlateGray
- 0x778899
- @item LightSteelBlue
- 0xB0C4DE
- @item LightYellow
- 0xFFFFE0
- @item Lime
- 0x00FF00
- @item LimeGreen
- 0x32CD32
- @item Linen
- 0xFAF0E6
- @item Magenta
- 0xFF00FF
- @item Maroon
- 0x800000
- @item MediumAquaMarine
- 0x66CDAA
- @item MediumBlue
- 0x0000CD
- @item MediumOrchid
- 0xBA55D3
- @item MediumPurple
- 0x9370D8
- @item MediumSeaGreen
- 0x3CB371
- @item MediumSlateBlue
- 0x7B68EE
- @item MediumSpringGreen
- 0x00FA9A
- @item MediumTurquoise
- 0x48D1CC
- @item MediumVioletRed
- 0xC71585
- @item MidnightBlue
- 0x191970
- @item MintCream
- 0xF5FFFA
- @item MistyRose
- 0xFFE4E1
- @item Moccasin
- 0xFFE4B5
- @item NavajoWhite
- 0xFFDEAD
- @item Navy
- 0x000080
- @item OldLace
- 0xFDF5E6
- @item Olive
- 0x808000
- @item OliveDrab
- 0x6B8E23
- @item Orange
- 0xFFA500
- @item OrangeRed
- 0xFF4500
- @item Orchid
- 0xDA70D6
- @item PaleGoldenRod
- 0xEEE8AA
- @item PaleGreen
- 0x98FB98
- @item PaleTurquoise
- 0xAFEEEE
- @item PaleVioletRed
- 0xD87093
- @item PapayaWhip
- 0xFFEFD5
- @item PeachPuff
- 0xFFDAB9
- @item Peru
- 0xCD853F
- @item Pink
- 0xFFC0CB
- @item Plum
- 0xDDA0DD
- @item PowderBlue
- 0xB0E0E6
- @item Purple
- 0x800080
- @item Red
- 0xFF0000
- @item RosyBrown
- 0xBC8F8F
- @item RoyalBlue
- 0x4169E1
- @item SaddleBrown
- 0x8B4513
- @item Salmon
- 0xFA8072
- @item SandyBrown
- 0xF4A460
- @item SeaGreen
- 0x2E8B57
- @item SeaShell
- 0xFFF5EE
- @item Sienna
- 0xA0522D
- @item Silver
- 0xC0C0C0
- @item SkyBlue
- 0x87CEEB
- @item SlateBlue
- 0x6A5ACD
- @item SlateGray
- 0x708090
- @item Snow
- 0xFFFAFA
- @item SpringGreen
- 0x00FF7F
- @item SteelBlue
- 0x4682B4
- @item Tan
- 0xD2B48C
- @item Teal
- 0x008080
- @item Thistle
- 0xD8BFD8
- @item Tomato
- 0xFF6347
- @item Turquoise
- 0x40E0D0
- @item Violet
- 0xEE82EE
- @item Wheat
- 0xF5DEB3
- @item White
- 0xFFFFFF
- @item WhiteSmoke
- 0xF5F5F5
- @item Yellow
- 0xFFFF00
- @item YellowGreen
- 0x9ACD32
- @end table
- @anchor{channel layout syntax}
- @section Channel Layout
- A channel layout specifies the spatial disposition of the channels in
- a multi-channel audio stream. To specify a channel layout, FFmpeg
- makes use of a special syntax.
- Individual channels are identified by an id, as given by the table
- below:
- @table @samp
- @item FL
- front left
- @item FR
- front right
- @item FC
- front center
- @item LFE
- low frequency
- @item BL
- back left
- @item BR
- back right
- @item FLC
- front left-of-center
- @item FRC
- front right-of-center
- @item BC
- back center
- @item SL
- side left
- @item SR
- side right
- @item TC
- top center
- @item TFL
- top front left
- @item TFC
- top front center
- @item TFR
- top front right
- @item TBL
- top back left
- @item TBC
- top back center
- @item TBR
- top back right
- @item DL
- downmix left
- @item DR
- downmix right
- @item WL
- wide left
- @item WR
- wide right
- @item SDL
- surround direct left
- @item SDR
- surround direct right
- @item LFE2
- low frequency 2
- @end table
- Standard channel layout compositions can be specified by using the
- following identifiers:
- @table @samp
- @item mono
- FC
- @item stereo
- FL+FR
- @item 2.1
- FL+FR+LFE
- @item 3.0
- FL+FR+FC
- @item 3.0(back)
- FL+FR+BC
- @item 4.0
- FL+FR+FC+BC
- @item quad
- FL+FR+BL+BR
- @item quad(side)
- FL+FR+SL+SR
- @item 3.1
- FL+FR+FC+LFE
- @item 5.0
- FL+FR+FC+BL+BR
- @item 5.0(side)
- FL+FR+FC+SL+SR
- @item 4.1
- FL+FR+FC+LFE+BC
- @item 5.1
- FL+FR+FC+LFE+BL+BR
- @item 5.1(side)
- FL+FR+FC+LFE+SL+SR
- @item 6.0
- FL+FR+FC+BC+SL+SR
- @item 6.0(front)
- FL+FR+FLC+FRC+SL+SR
- @item 3.1.2
- FL+FR+FC+LFE+TFL+TFR
- @item hexagonal
- FL+FR+FC+BL+BR+BC
- @item 6.1
- FL+FR+FC+LFE+BC+SL+SR
- @item 6.1
- FL+FR+FC+LFE+BL+BR+BC
- @item 6.1(front)
- FL+FR+LFE+FLC+FRC+SL+SR
- @item 7.0
- FL+FR+FC+BL+BR+SL+SR
- @item 7.0(front)
- FL+FR+FC+FLC+FRC+SL+SR
- @item 7.1
- FL+FR+FC+LFE+BL+BR+SL+SR
- @item 7.1(wide)
- FL+FR+FC+LFE+BL+BR+FLC+FRC
- @item 7.1(wide-side)
- FL+FR+FC+LFE+FLC+FRC+SL+SR
- @item 5.1.2
- FL+FR+FC+LFE+BL+BR+TFL+TFR
- @item octagonal
- FL+FR+FC+BL+BR+BC+SL+SR
- @item cube
- FL+FR+BL+BR+TFL+TFR+TBL+TBR
- @item 5.1.4
- FL+FR+FC+LFE+BL+BR+TFL+TFR+TBL+TBR
- @item 7.1.2
- FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR
- @item 7.1.4
- FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBL+TBR
- @item 7.2.3
- FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBC+LFE2
- @item 9.1.4
- FL+FR+FC+LFE+BL+BR+FLC+FRC+SL+SR+TFL+TFR+TBL+TBR
- @item hexadecagonal
- FL+FR+FC+BL+BR+BC+SL+SR+WL+WR+TBL+TBR+TBC+TFC+TFL+TFR
- @item binaural
- BIL+BIR
- @item downmix
- DL+DR
- @item 22.2
- FL+FR+FC+LFE+BL+BR+FLC+FRC+BC+SL+SR+TC+TFL+TFC+TFR+TBL+TBC+TBR+LFE2+TSL+TSR+BFC+BFL+BFR
- @end table
- A custom channel layout can be specified as a sequence of terms, separated by '+'.
- Each term can be:
- @itemize
- @item
- the name of a single channel (e.g. @samp{FL}, @samp{FR}, @samp{FC}, @samp{LFE}, etc.),
- each optionally containing a custom name after a '@@', (e.g. @samp{FL@@Left},
- @samp{FR@@Right}, @samp{FC@@Center}, @samp{LFE@@Low_Frequency}, etc.)
- @end itemize
- A standard channel layout can be specified by the following:
- @itemize
- @item
- the name of a single channel (e.g. @samp{FL}, @samp{FR}, @samp{FC}, @samp{LFE}, etc.)
- @item
- the name of a standard channel layout (e.g. @samp{mono},
- @samp{stereo}, @samp{4.0}, @samp{quad}, @samp{5.0}, etc.)
- @item
- a number of channels, in decimal, followed by 'c', yielding the default channel
- layout for that number of channels (see the function
- @code{av_channel_layout_default}). Note that not all channel counts have a
- default layout.
- @item
- a number of channels, in decimal, followed by 'C', yielding an unknown channel
- layout with the specified number of channels. Note that not all channel layout
- specification strings support unknown channel layouts.
- @item
- a channel layout mask, in hexadecimal starting with "0x" (see the
- @code{AV_CH_*} macros in @file{libavutil/channel_layout.h}.
- @end itemize
- Before libavutil version 53 the trailing character "c" to specify a number of
- channels was optional, but now it is required, while a channel layout mask can
- also be specified as a decimal number (if and only if not followed by "c" or "C").
- See also the function @code{av_channel_layout_from_string} defined in
- @file{libavutil/channel_layout.h}.
- @c man end SYNTAX
- @chapter Expression Evaluation
- @c man begin EXPRESSION EVALUATION
- When evaluating an arithmetic 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{-}.
- Some internal variables can be used to store and load intermediary
- results. They can be accessed using the @code{ld} and @code{st}
- functions with an index argument varying from 0 to 9 to specify which
- internal variable to access.
- The following functions are available:
- @table @option
- @item abs(x)
- Compute absolute value of @var{x}.
- @item acos(x)
- Compute arccosine of @var{x}.
- @item asin(x)
- Compute arcsine of @var{x}.
- @item atan(x)
- Compute arctangent of @var{x}.
- @item atan2(y, x)
- Compute principal value of the arc tangent of @var{y}/@var{x}.
- @item between(x, min, max)
- Return 1 if @var{x} is greater than or equal to @var{min} and lesser than or
- equal to @var{max}, 0 otherwise.
- @item bitand(x, y)
- @item bitor(x, y)
- Compute bitwise and/or operation on @var{x} and @var{y}.
- The results of the evaluation of @var{x} and @var{y} are converted to
- integers before executing the bitwise operation.
- Note that both the conversion to integer and the conversion back to
- floating point can lose precision. Beware of unexpected results for
- large numbers (usually 2^53 and larger).
- @item ceil(expr)
- Round the value of expression @var{expr} upwards to the nearest
- integer. For example, "ceil(1.5)" is "2.0".
- @item clip(x, min, max)
- Return the value of @var{x} clipped between @var{min} and @var{max}.
- @item cos(x)
- Compute cosine of @var{x}.
- @item cosh(x)
- Compute hyperbolic cosine of @var{x}.
- @item eq(x, y)
- Return 1 if @var{x} and @var{y} are equivalent, 0 otherwise.
- @item exp(x)
- Compute exponential of @var{x} (with base @code{e}, the Euler's number).
- @item floor(expr)
- Round the value of expression @var{expr} downwards to the nearest
- integer. For example, "floor(-1.5)" is "-2.0".
- @item gauss(x)
- Compute Gauss function of @var{x}, corresponding to
- @code{exp(-x*x/2) / sqrt(2*PI)}.
- @item gcd(x, y)
- Return the greatest common divisor of @var{x} and @var{y}. If both @var{x} and
- @var{y} are 0 or either or both are less than zero then behavior is undefined.
- @item gt(x, y)
- Return 1 if @var{x} is greater than @var{y}, 0 otherwise.
- @item gte(x, y)
- Return 1 if @var{x} is greater than or equal to @var{y}, 0 otherwise.
- @item hypot(x, y)
- This function is similar to the C function with the same name; it returns
- "sqrt(@var{x}*@var{x} + @var{y}*@var{y})", the length of the hypotenuse of a
- right triangle with sides of length @var{x} and @var{y}, or the distance of the
- point (@var{x}, @var{y}) from the origin.
- @item if(x, y)
- Evaluate @var{x}, and if the result is non-zero return the result of
- the evaluation of @var{y}, return 0 otherwise.
- @item if(x, y, z)
- Evaluate @var{x}, and if the result is non-zero return the evaluation
- result of @var{y}, otherwise the evaluation result of @var{z}.
- @item ifnot(x, y)
- Evaluate @var{x}, and if the result is zero return the result of the
- evaluation of @var{y}, return 0 otherwise.
- @item ifnot(x, y, z)
- Evaluate @var{x}, and if the result is zero return the evaluation
- result of @var{y}, otherwise the evaluation result of @var{z}.
- @item isinf(x)
- Return 1.0 if @var{x} is +/-INFINITY, 0.0 otherwise.
- @item isnan(x)
- Return 1.0 if @var{x} is NAN, 0.0 otherwise.
- @item ld(idx)
- Load the value of the internal variable with index @var{idx}, which was
- previously stored with st(@var{idx}, @var{expr}).
- The function returns the loaded value.
- @item lerp(x, y, z)
- Return linear interpolation between @var{x} and @var{y} by amount of @var{z}.
- @item log(x)
- Compute natural logarithm of @var{x}.
- @item lt(x, y)
- Return 1 if @var{x} is lesser than @var{y}, 0 otherwise.
- @item lte(x, y)
- Return 1 if @var{x} is lesser than or equal to @var{y}, 0 otherwise.
- @item max(x, y)
- Return the maximum between @var{x} and @var{y}.
- @item min(x, y)
- Return the minimum between @var{x} and @var{y}.
- @item mod(x, y)
- Compute the remainder of division of @var{x} by @var{y}.
- @item not(expr)
- Return 1.0 if @var{expr} is zero, 0.0 otherwise.
- @item pow(x, y)
- Compute the power of @var{x} elevated @var{y}, it is equivalent to
- "(@var{x})^(@var{y})".
- @item print(t)
- @item print(t, l)
- Print the value of expression @var{t} with loglevel @var{l}. If @var{l} is not
- specified then a default log level is used.
- Return the value of the expression printed.
- @item random(idx)
- Return a pseudo random value between 0.0 and 1.0. @var{idx} is the
- index of the internal variable used to save the seed/state, which can be
- previously stored with @code{st(idx)}.
- To initialize the seed, you need to store the seed value as a 64-bit
- unsigned integer in the internal variable with index @var{idx}.
- For example, to store the seed with value @code{42} in the internal
- variable with index @code{0} and print a few random values:
- @example
- st(0,42); print(random(0)); print(random(0)); print(random(0))
- @end example
- @item randomi(idx, min, max)
- Return a pseudo random value in the interval between @var{min} and
- @var{max}. @var{idx} is the index of the internal variable which will be used to
- save the seed/state, which can be previously stored with @code{st(idx)}.
- To initialize the seed, you need to store the seed value as a 64-bit
- unsigned integer in the internal variable with index @var{idx}.
- @item root(expr, max)
- Find an input value for which the function represented by @var{expr}
- with argument @var{ld(0)} is 0 in the interval 0..@var{max}.
- The expression in @var{expr} must denote a continuous function or the
- result is undefined.
- @var{ld(0)} is used to represent the function input value, which means that the
- given expression will be evaluated multiple times with various input values that
- the expression can access through @code{ld(0)}. When the expression evaluates to
- 0 then the corresponding input value will be returned.
- @item round(expr)
- Round the value of expression @var{expr} to the nearest integer. For example,
- "round(1.5)" is "2.0".
- @item sgn(x)
- Compute sign of @var{x}.
- @item sin(x)
- Compute sine of @var{x}.
- @item sinh(x)
- Compute hyperbolic sine of @var{x}.
- @item sqrt(expr)
- Compute the square root of @var{expr}. This is equivalent to
- "(@var{expr})^.5".
- @item squish(x)
- Compute expression @code{1/(1 + exp(4*x))}.
- @item st(idx, expr)
- Store the value of the expression @var{expr} in an internal
- variable. @var{idx} specifies the index 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.
- The stored value can be retrieved with @code{ld(var)}.
- Note: variables are currently not shared between expressions.
- @item tan(x)
- Compute tangent of @var{x}.
- @item tanh(x)
- Compute hyperbolic tangent of @var{x}.
- @item taylor(expr, x)
- @item taylor(expr, x, idx)
- Evaluate a Taylor series at @var{x}, given an expression representing
- the @code{ld(idx)}-th derivative of a function at 0.
- When the series does not converge the result is undefined.
- @var{ld(idx)} is used to represent the derivative order in @var{expr},
- which means that the given expression will be evaluated multiple times
- with various input values that the expression can access through
- @code{ld(idx)}. If @var{idx} is not specified then 0 is assumed.
- Note, when you have the derivatives at y instead of 0,
- @code{taylor(expr, x-y)} can be used.
- @item time(0)
- Return the current (wallclock) time in seconds.
- @item trunc(expr)
- Round the value of expression @var{expr} towards zero to the nearest
- integer. For example, "trunc(-1.5)" is "-1.0".
- @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
- The following constants are available:
- @table @option
- @item PI
- area of the unit disc, approximately 3.14
- @item E
- exp(1) (Euler's number), approximately 2.718
- @item PHI
- golden ratio (1+sqrt(5))/2, approximately 1.618
- @end table
- Assuming that an expression is considered "true" if it has a non-zero
- value, note that:
- @code{*} works like AND
- @code{+} works like OR
- For example the construct:
- @example
- if (A AND B) then C
- @end example
- is equivalent to:
- @example
- if(A*B, 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 unit prefixes.
- If 'i' is appended after the prefix, binary prefixes are used, which
- are based on powers of 1024 instead of powers of 1000.
- The 'B' postfix multiplies the value by 8, and can be appended after a
- unit prefix or used alone. This allows using for example 'KB', 'MiB',
- 'G' and 'B' as number postfix.
- The list of available International System prefixes follows, with
- indication of the corresponding powers of 10 and of 2.
- @table @option
- @item y
- 10^-24 / 2^-80
- @item z
- 10^-21 / 2^-70
- @item a
- 10^-18 / 2^-60
- @item f
- 10^-15 / 2^-50
- @item p
- 10^-12 / 2^-40
- @item n
- 10^-9 / 2^-30
- @item u
- 10^-6 / 2^-20
- @item m
- 10^-3 / 2^-10
- @item c
- 10^-2
- @item d
- 10^-1
- @item h
- 10^2
- @item k
- 10^3 / 2^10
- @item K
- 10^3 / 2^10
- @item M
- 10^6 / 2^20
- @item G
- 10^9 / 2^30
- @item T
- 10^12 / 2^40
- @item P
- 10^15 / 2^50
- @item E
- 10^18 / 2^60
- @item Z
- 10^21 / 2^70
- @item Y
- 10^24 / 2^80
- @end table
- @c man end EXPRESSION EVALUATION
|