summaryrefslogtreecommitdiffstats
path: root/options/m_option.c
Commit message (Collapse)AuthorAgeFilesLines
* mpv_talloc.h: rename from talloc.hDmitrij D. Czarkoff2016-01-111-1/+1
| | | | This change helps avoiding conflict with talloc.h from libtalloc.
* options: fix conversion of flags to stringswm42015-07-011-2/+7
| | | | | | | | | | This flags stuff tried to be too clever - if there are overlapping flags (e.g. exclusive or combined flags), the one matching with most bits has to be chosen. This fixes logging of the seek command. E.g. "relative" and "absolute" overlap to make them exclusive, but "relative" was always printed as it happened to match first.
* options: improve an error messagewm42015-06-271-2/+2
| | | | | "mpv --ao=wasapi:help" on Linux gave "Option ao doesn't exist.". Completely misleading and stupid.
* audio: replace format name tablewm42015-06-261-3/+7
| | | | Having a big switch() is simpler.
* options: make keyvalue list parsing less strictwm42015-06-101-7/+8
| | | | | Affects for example --script-opts. A bunch of characters are now allowed in them without causing trouble to the user.
* options: change [...] to balanced quoteswm42015-04-191-1/+12
| | | | | | | | Useful for dealing with libavfilter's terrible graph syntax. Not strictly backwards compatible (for example "[a[b]" fails now - the "[" within the quote is interpreted now). But hopefully it's obscure enough not to warrant any kind of compatibility hacks.
* options: don't let --vf-clr etc. take an argumentwm42015-04-131-0/+5
| | | | | | | It was ignored before. Passing an argument makes no sense, and might be mistaken for some form of --vf-del, so complain about it. This also affects --af-clr and the vf/af commands.
* Update license headersMarcin Kurczewski2015-04-131-5/+4
| | | | Signed-off-by: wm4 <wm4@nowhere>
* video: cleanup stereo mode parsingwm42015-04-021-53/+0
| | | | | | | | | Use OPT_CHOICE_C() instead of the custom parser. The functionality is pretty much equivalent. (On a side note, it seems --video-stereo-mode can't be removed, because it controls whether to "reduce" stereo video to mono, which is also the default. In fact I'm not sure how this should be handled at all.)
* options: fix --geometry to string conversionwm42015-04-011-6/+2
| | | | Fixes #1744.
* video: move colorspace overrides to vf_format, simplifywm42015-03-311-0/+10
| | | | | | | | | | | | | | | | | | | Remove the colorspace-related top-level options, add them to vf_format. They are rather obscure and not needed often, so it's better to get them out of the way. In particular, this gets rid of the semi-complicated logic in command.c (most of which was needed for OSD display and the direct feedback from the VO). It removes the duplicated color-related name mappings. This removes the ability to write the colormatrix and related properties. Since filters can be changed at runtime, there's no loss of functionality, except that you can't cycle automatically through the color constants anymore (but who needs to do this). This also changes the type of the mp_csp_names and related variables, so they can directly be used with OPT_CHOICE. This probably ended up a bit awkward, for the sake of not adding a new option type which would have used the previous format.
* parse_commandline: fail gracefully on bad argswd02015-03-291-1/+1
| | | | | | Args of zero length (i.e. --=) now display a proper error message. Signed-off-by: wm4 <wm4@nowhere>
* options: add conversion to string for geometry option typeswm42015-03-241-0/+31
| | | | | | | | Pretty messy, which is why it wasn't done at first. (Also, I'd really like to have simpler syntax and semantics for this damn option, but who knows when this will happen.) Fixes #1705.
* m_option: remove dead initializationwm42015-03-231-3/+3
|
* options: add flag option typewm42015-03-041-0/+117
|
* options: handle choice -> flag fallback automaticallywm42015-02-271-3/+17
| | | | | | | | | | | | | | | In the past it happened quite often that flag options (yes/no) were changed to choice options (yes/no/some more). The problem with this was that while flag options don't need a parameter, this wasn't the case with choice options. A hack was introduced to compensate for this: setting M_OPT_OPTIONAL_PARAM on the option, and an empty string ("") was added as choice, so that the choice could be used like a flag. So, for example, "--mute" would set the choice "". Fix this by 1. not requiring a parameter if there's a "yes" choice, and 2. redirect an empty parameter to "yes". The effect is that a choice option with the choices ["yes", "no"] is pretty much equivalent to a flag option.
* options: minor simplification in flag option parserwm42015-02-271-20/+14
|
* options: change --msg-level optionwm42015-02-061-56/+67
| | | | | | | | | | | | | | Make it accept "," as separator, instead of only ":". Do this by using the key-value-list parser. Before this, the option was stored as a string, with the option parser verifying that the option value as correct. Now it's stored pre-parsed, although the log levels still require separate verification and parsing-on-use to some degree (which is why the msg-level option type doesn't go away). Because the internal type changes, the client API "native" type also changes. This could be prevented with some more effort, but I don't think it's worth it - if MPV_FORMAT_STRING is used, it still works the same, just with a different separator on read accesses.
* options: allow ":" as separator in key-value listswm42015-02-061-1/+1
| | | | | | | | Before this, unquoted occurrences of ":" lead to parsing errors. There's no reason to reject it, especially since the traditional MPlayer syntax uses ":" as separator. (Which is also the reason why ":" was rejected before: the parser shares this code for handling splitting/quoting, and we merely checked explicitly whether the option was split on ",".)
* options: allow things like --geometry=x50wm42015-02-041-2/+3
| | | | | | Although the use is somewhat questionable, it seems strange that e.g. --geometry=50% works (and sets the width only), but setting the height only in a similar manner does not work.
* options: slightly improve help output for choice and flag optionswm42015-02-021-9/+12
|
* options: fix parsing for --ab-loop-*wm42014-12-121-1/+1
| | | | Editing mistake. Oops.
* options: add slightly more sophistcated mechanism for option deprecationwm42014-12-111-0/+8
|
* m_option: never return NOPTS value as number from propertieswm42014-12-101-5/+36
| | | | | | | | MP_NOPTS_VALUE (basically INT64_MIN) is basically an special timestamp value that means "unset" or "unknown". Its exact value is internal, and should never be returned or interpreted by any API. So return "no" instead (what is also what the parser accepts).
* options: fix channel map options sometimes failingwm42014-12-011-1/+1
| | | | | | | | | | Channel amp otpions were not copied correctly: it copied the size of a pointer to struct chmap, not the struct itself. Since mp_chmap is currently 9 bytes, this meant the last channel entry was not copied correctly on 64 bit systems, leading to very strange failures. It could be triggered especially when using the client API, because the client API always copies options on access (mpv command line options tend to work directly on options).
* options: fix swapped deprecated/replacement in warningwm42014-12-011-1/+1
| | | | | This was relevant for --af and --vo (both use this option type, and have deprecated aliases).
* options: simplify channel map validationwm42014-12-011-4/+3
| | | | | The min=-1 case was never used, and the channel map must always be valid (or in some cases, invalid but empty).
* Remove some unneeded NULL checkswm42014-11-211-16/+13
| | | | Found by Coverity; also see commit 85fb2af3.
* command: implement A-B loopswm42014-11-181-2/+7
| | | | | | | | | | | | | Probably needs to be polished a bit more. Also, might require a key binding that can set/clear the loop points in a more intuitive way. For now, something like this can be put into input.conf to use it: ctrl+y set ab-loop-a ${time-pos} # set A ctrl+x set ab-loop-b ${time-pos} # set B ctrl+c set ab-loop-a no # clear (mostly) Fixes #1241.
* command: export some option metadatawm42014-11-131-1/+1
| | | | | | | This might be interesting for GUIs and such. It's probably still a little bit insufficient. For example, the filter and audio/video output lists are not available through this.
* m_option: format mpv_node as jsonwm42014-10-231-1/+7
| | | | | Useful for debugging and informational purposes. Not sure if it's sane in any form.
* lua: strictly free memory on errorswm42014-10-191-1/+2
| | | | | | | Thanks to the recently introduced mp_lua_PITA(), this is "simple" now. It fixes leaks on Lua errors. The hack to avoid stack overflows manually isn't needed anymore, and the Lua error handler will take care of this.
* video: initial Matroska 3D supportwm42014-08-301-0/+53
| | | | | | | | | | | | | | | | | | | | | This inserts an automatic conversion filter if a Matroska file is marked as 3D (StereoMode element). The basic idea is similar to video rotation and colorspace handling: the 3D mode is added as a property to the video params. Depending on this property, a video filter can be inserted. As of this commit, extending mp_image_params is actually completely unnecessary - but the idea is that it will make it easier to integrate with VOs supporting stereo 3D mogrification. Although vo_opengl does support some stereo rendering, it didn't support the mode my sample file used, so I'll leave that part for later. Not that most mappings from Matroska mode to vf_stereo3d mode are probably wrong, and some are missing. Assuming that Matroska modes, and vf_stereo3d in modes, and out modes are all the same might be an oversimplification - we'll see. See issue #1045.
* options: more detailed output for --vf-... error messagewm42014-08-281-2/+4
|
* options: fix key-value-list optionswm42014-08-051-6/+11
| | | | | | | | The parser can be called with dst (the target) set to NULL if the option should be verified only. The code didn't respect this, and could result in crashes when used in config profiles or filter sub-options. Fixes #981.
* Audit and replace all ctype.h useswm42014-07-011-1/+0
| | | | | | | | | | | | | | | | Something like "char *s = ...; isdigit(s[0]);" triggers undefined behavior, because char can be signed, and thus s[0] can be a negative value. The is*() functions require unsigned char _or_ EOF. EOF is a special value outside of unsigned char range, thus the argument to the is*() functions can't be a char. This undefined behavior can actually trigger crashes if the implementation of these functions e.g. uses lookup tables, which are then indexed with out-of-range values. Replace all <ctype.h> uses with our own custom mp_is*() functions added with misc/ctype.h. As a bonus, these functions are locale-independent. (Although currently, we _require_ C locale for other reasons.)
* options: support setting start time relative to start PTSTsukasa OMOTO2014-06-291-2/+5
| | | | Signed-off-by: wm4 <wm4@nowhere>
* options: remove some more stuffwm42014-06-131-7/+0
| | | | | | | | The "classic" sub-option stuff is not really needed anymore. The only remaining use can be emulated in a simpler way. But note that this breaks the --screenshot option (instead of the "flat" options like --screenshot-...). This was undocumented and discouraged, so it shouldn't affect anyone.
* options: remove OPT_FLAG_CONSTANTSwm42014-06-131-13/+10
| | | | | | | This means use of the min/max fields can be dropped for the flag option type, which makes some things slightly easier. I'm also not sure if the client API handled the case of flag not being 0 or 1 correctly, and this change gets rid of this concern.
* options: change --sub-file behaviorwm42014-06-081-0/+36
| | | | | | | | | | | | | | | | | | | --sub-file is actually a string list, so you can add multipel external subtitle files. But to be able to set a list, the option value was split on ",". This made it impossible to add filenames. One possible solution would be adding escaping. That's probably a good idea (and some other options already do this), but it's also complicated both to implement and for the user. The simpler solution is making --sub-file appending, and make it take only a single entry. I'm not quite sure about this yet. It breaks the invariant that if a value is printed and parsed, you get the same value back. So for now, just go with the simple solution. Fixes #840.
* m_option: use isfinite() instead of isnormal()wm42014-06-011-1/+1
| | | | | | This accidentally rejected d==0. We can actually deal with sub-normals fine, we just want to exclude nan and infinity (although infinity is already accounted for, but anyway).
* command: allow native access to "vf" propertywm42014-04-241-0/+101
| | | | | | This allows client API users and Lua scripts to side-step the pretty horrible video filter string "language" (although it's back and can't be avoided when using libavfilter).
* options: don't allow --no-foo=yeswm42014-04-141-2/+2
| | | | | | | | | It's a bit strange to allow this, so get rid of it. This probably breaks a bunch of user config files. The client API still allows setting them with MPV_FORMAT_FLAG with a value of 1 (i.e. true), but I guess this is tolerable.
* video: change image format names, prefer mostly FFmpeg nameswm42014-04-141-2/+4
| | | | | | | | | | | | | | | The most user visible change is that "420p" is now displayed as "yuv420p". This is what FFmpeg uses (almost), and is also less confusing since "420p" is often confused with "420 pixels vertical resolution". In general, we return the FFmpeg pixel format name. We still use our own old mechanism to keep a list of exceptions to provide compatibility for a while. Also, never return NULL for image format names. If the format is unset (0/IMGFMT_NONE), return "none". If the format has no name (probably never happens, FFmpeg seems to guarantee that a name is set), return "unknown".
* m_option: fix handling of empty channel layoutswm42014-03-101-2/+2
| | | | | Even if a channel map option signaled that empty layouts are accepted, the option parser never actually accepted them.
* m_option: make converting mpv_node to string always failwm42014-02-261-1/+1
|
* m_option: fix key/value list string conversionwm42014-02-261-1/+1
| | | | Meh.
* m_option: don't make "unset" string and string list return NULL stringswm42014-02-261-2/+2
| | | | | | | | | | This is a bit weird: m_option_string types (i.e. char*) can be NULL. But they're supposed to be treated just like empty strings. So don't make the m_option_type.print function return NULL for these values. Returning NULL would mean failure. This didn't matter much before, but was quite visible through the client API.
* m_option: add a way to convert values to/from mpv_nodewm42014-02-241-14/+425
| | | | | | | m_option is basically the mechanism to handle C data types in a dynamic way. Add functions to convert values to and from mpv_node. For example, string lists are turned into mpv_node using MPV_FORMAT_NODE_ARRAY, and so on.
* m_option: fix printf format specifierwm42014-02-241-1/+2
|
* m_option: explicitly allow m_option.name==NULLwm42014-02-231-10/+11
| | | | | | | | Doesn't require other code to care about this, which will allow us to simplify the property code. Only "wildcard" options like "vf" and string lists used this, and m_option_list_findb() (which is excused).
* options: handle escape sequences in e.g. --playing-msg differentlywm42014-02-201-59/+8
| | | | | | | | | | M_OPT_PARSE_ESCAPES was pretty stupid, and broke the (useful) assumption that string variables contain exactly the same value as set by the option. Simplify it, and move escape handling to the place where it's used. Escape handling itself is not terribly useful, but still allows useful things like multiline custom OSD with "\n".
* options: alternative way to specify color optionswm42014-01-311-2/+43
| | | | | | | | | | | | | | | | Try to make it more intuitive by not requiring hex values. The new way uses float values in the range 0.0-1.0, separated by '/' (':' was suggested, but that wouldn't allow color options in sub-options). Example: --osd-color=1.0/0.0/0.0/0.75 Using the range 0.0-1.0 has the advantage that it could be easily extended to colors beyond 8 bit. Details see manpage. Suggestions for alternative syntax or value ranges are welcome, but be quick with it.
* options: add key/value pair list option typewm42014-01-161-0/+64
|
* msg: move special declarations to msg_control.hwm42014-01-161-0/+1
| | | | | While almost everything uses msg.h, the moved definitions are rarely needed by anything.
* options: make --msglevel=help print something helpfulwm42014-01-011-0/+11
|
* common: simplify and optimize string escape parsingwm42013-12-301-11/+8
| | | | | | | | | | | This code is shared between input.conf parser and option parser. Until now, the performance didn't really matter. But I want to use this code for JSON parsing too, and since JSON will have to be parsed a lot, it should probably try to avoid realloc'ing too much. This commit moves parsing of C-style escaped strings into a common function, and allows using it in a way realloc can be completely avoided, if the already allocated buffer is large enough.
* options: simplify handling of some help optionswm42013-12-261-28/+3
|
* options: make --msglevel extend previous settingswm42013-12-221-3/+10
| | | | | | Make it so --msglevel extends previous --msglevel uses, instead of overwriting them. Do this by literally appending the --msglevel option value to the previous one.
* m_option: add mp_log context to sub-module print_help callbackwm42013-12-211-1/+1
|
* m_option: add mp_log callback to OPT_STRING_VALIDATE optionswm42013-12-211-1/+1
| | | | | And also convert a bunch of other code, especially ao_wasapi and ao_portaudio.
* m_option, m_config: mp_msg conversionswm42013-12-211-185/+154
| | | | | | | | Always pass around mp_log contexts in the option parser code. This of course affects all users of this API as well. In stream.c, pass a mp_null_log, because we can't do it properly yet. This will be fixed later.
* msg: change --msglevel, reduce legacy gluewm42013-12-201-0/+41
| | | | | | | | | | | | Basically, reimplement --msglevel. Instead of making the new msg code use the legacy code, make the legacy code use the reimplemented functionality. The handling of the deprecated --identify switch changes. It temporarily stops working; this will be fixed in later commits. The actual sub-options syntax (like --msglevel-vo=...) goes away, but I bet nobody knew about this or used this anyway.
* m_option: don't include config.h in headerwm42013-12-181-0/+8
| | | | Requires a small workaround.