From 419c44ccf6cc522cd69be0a905d8c6f46e528aca Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 25 Oct 2019 00:25:05 +0200 Subject: vo_gpu, options: don't return NaN through API Internally, vo_gpu uses NaN for some options to indicate a default value that is different depending on the context (e.g. different scalers). There are 2 problems with this: 1. you couldn't reset the options to their defaults 2. NaN is a damn mess and shouldn't be part of the API The option parser already rejected NaN explicitly, which is why 1. didn't work. Regarding 2., JSON might be a good example, and actually caused a bug report. Fix this by mapping NaN to the special value "default". I think I'd prefer other mechanisms (maybe just having every scaler expose separate options?), but for now this will do. See you in a future commit, which painfully deprecates this and replaces it with something else. I refrained from using "no" (my favorite magic value for "unset" etc.) because then I'd have e.g. make --no-scale-param1 work, which in addition to a lot of effort looks dumb and nobody will use it. Here's also an apology for the shitty added test script. Fixes: #6691 --- DOCS/interface-changes.rst | 3 +++ DOCS/man/options.rst | 18 ++++++++++++------ TOOLS/lua/nan-test.lua | 37 +++++++++++++++++++++++++++++++++++++ options/m_option.c | 37 ++++++++++++++++++++++++++++--------- options/m_option.h | 3 +++ video/out/gpu/video.c | 12 ++++++++---- 6 files changed, 91 insertions(+), 19 deletions(-) create mode 100644 TOOLS/lua/nan-test.lua diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst index 038b87b6c1..59891272da 100644 --- a/DOCS/interface-changes.rst +++ b/DOCS/interface-changes.rst @@ -191,6 +191,9 @@ Interface changes internal counter that remembered the current position. - remove deprecated ao/vo auto profiles. Consider using scripts like auto-profiles.lua instead. + - --[c]scale-[w]param[1|2] and --tone-mapping-param now accept "default", + and if set to that value, reading them as property will also return + "default", instead of float nan as in previous versions --- mpv 0.28.0 --- - rename --hwdec=mediacodec option to mediacodec-copy, to reflect conventions followed by other hardware video decoding APIs diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index e147883f29..d537380e78 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -4404,8 +4404,10 @@ The following video options are currently all specific to ``--vo=gpu`` and smooth. ``--scale-param1=``, ``--scale-param2=``, ``--cscale-param1=``, ``--cscale-param2=``, ``--dscale-param1=``, ``--dscale-param2=``, ``--tscale-param1=``, ``--tscale-param2=`` - Set filter parameters. Ignored if the filter is not tunable. Currently, - this affects the following filter parameters: + Set filter parameters. By default, these are set to the special string + ``default``, which maps to a scaler-specific default value. Ignored if the + filter is not tunable. Currently, this affects the following filter + parameters: bcspline Spline parameters (``B`` and ``C``). Defaults to 0.5 for both. @@ -4477,8 +4479,10 @@ The following video options are currently all specific to ``--vo=gpu`` and ``--scale-wparam=``, ``--cscale-wparam=``, ``--cscale-wparam=``, ``--tscale-wparam=`` (Advanced users only) Configure the parameter for the window function given - by ``--scale-window`` etc. Ignored if the window is not tunable. Currently, - this affects the following window parameters: + by ``--scale-window`` etc. By default, these are set to the special string + ``default``, which maps to a window-specific default value. Ignored if the + window is not tunable. Currently, this affects the following window + parameters: kaiser Window parameter (alpha). Defaults to 6.33. @@ -5524,8 +5528,10 @@ The following video options are currently all specific to ``--vo=gpu`` and the display. ``--tone-mapping-param=`` - Set tone mapping parameters. Ignored if the tone mapping algorithm is not - tunable. This affects the following tone mapping algorithms: + Set tone mapping parameters. By default, this is set to the special string + ``default``, which maps to an algorithm-specific default value. Ignored if + the tone mapping algorithm is not tunable. This affects the following tone + mapping algorithms: clip Specifies an extra linear coefficient to multiply into the signal diff --git a/TOOLS/lua/nan-test.lua b/TOOLS/lua/nan-test.lua new file mode 100644 index 0000000000..d3f1c8cc8f --- /dev/null +++ b/TOOLS/lua/nan-test.lua @@ -0,0 +1,37 @@ +-- Test a float property which internally uses NaN. +-- Run with --no-config (or just scale-param1 not set). + +local utils = require 'mp.utils' + +prop_name = "scale-param1" + +-- internal NaN, return string "default" instead of NaN +v = mp.get_property_native(prop_name, "fail") +print("Exp:", "string", "\"default\"") +print("Got:", type(v), utils.to_string(v)) + +v = mp.get_property(prop_name) +print("Exp:", "default") +print("Got:", v) + +-- not representable -> return provided fallback value +v = mp.get_property_number(prop_name, -100) +print("Exp:", -100) +print("Got:", v) + +mp.set_property_native(prop_name, 123) +v = mp.get_property_number(prop_name, -100) +print("Exp:", "number", 123) +print("Got:", type(v), utils.to_string(v)) + +-- try to set an actual NaN +st, msg = mp.set_property_number(prop_name, 0.0/0) +print("Exp:", nil, "") +print("Got:", st, msg) + +-- set default +mp.set_property(prop_name, "default") + +v = mp.get_property(prop_name) +print("Exp:", "default") +print("Got:", v) diff --git a/options/m_option.c b/options/m_option.c index 7bb43ad399..5df8b00291 100644 --- a/options/m_option.c +++ b/options/m_option.c @@ -918,6 +918,11 @@ static int parse_double(struct mp_log *log, const m_option_t *opt, if (bstr_eatstart0(&rest, ":") || bstr_eatstart0(&rest, "/")) tmp_float /= bstrtod(rest, &rest); + if ((opt->flags & M_OPT_DEFAULT_NAN) && bstr_equals0(param, "default")) { + tmp_float = NAN; + goto done; + } + if (rest.len) { mp_err(log, "The %.*s option must be a floating point number or a " "ratio (numerator[:/]denominator): %.*s\n", @@ -931,6 +936,7 @@ static int parse_double(struct mp_log *log, const m_option_t *opt, return M_OPT_OUT_OF_RANGE; } +done: if (dst) VAL(dst) = tmp_float; return 1; @@ -938,12 +944,18 @@ static int parse_double(struct mp_log *log, const m_option_t *opt, static char *print_double(const m_option_t *opt, const void *val) { - return talloc_asprintf(NULL, "%f", VAL(val)); + double f = VAL(val); + if (isnan(f) && (opt->flags & M_OPT_DEFAULT_NAN)) + return talloc_strdup(NULL, "default"); + return talloc_asprintf(NULL, "%f", f); } static char *print_double_f3(const m_option_t *opt, const void *val) { - return talloc_asprintf(NULL, "%.3f", VAL(val)); + double f = VAL(val); + if (isnan(f)) + return print_double(opt, val); + return talloc_asprintf(NULL, "%.3f", f); } static void add_double(const m_option_t *opt, void *val, double add, bool wrap) @@ -989,8 +1001,14 @@ static int double_set(const m_option_t *opt, void *dst, struct mpv_node *src) static int double_get(const m_option_t *opt, void *ta_parent, struct mpv_node *dst, void *src) { - dst->format = MPV_FORMAT_DOUBLE; - dst->u.double_ = *(double *)src; + double f = *(double *)src; + if (isnan(f) && (opt->flags & M_OPT_DEFAULT_NAN)) { + dst->format = MPV_FORMAT_STRING; + dst->u.string = talloc_strdup(ta_parent, "default"); + } else { + dst->format = MPV_FORMAT_DOUBLE; + dst->u.double_ = f; + } return 1; } @@ -1023,12 +1041,14 @@ static int parse_float(struct mp_log *log, const m_option_t *opt, static char *print_float(const m_option_t *opt, const void *val) { - return talloc_asprintf(NULL, "%f", VAL(val)); + double tmp = VAL(val); + return print_double(opt, &tmp); } static char *print_float_f3(const m_option_t *opt, const void *val) { - return talloc_asprintf(NULL, "%.3f", VAL(val)); + double tmp = VAL(val); + return print_double_f3(opt, &tmp); } static void add_float(const m_option_t *opt, void *val, double add, bool wrap) @@ -1057,9 +1077,8 @@ static int float_set(const m_option_t *opt, void *dst, struct mpv_node *src) static int float_get(const m_option_t *opt, void *ta_parent, struct mpv_node *dst, void *src) { - dst->format = MPV_FORMAT_DOUBLE; - dst->u.double_ = VAL(src); - return 1; + double tmp = VAL(src); + return double_get(opt, ta_parent, dst, &tmp); } const m_option_type_t m_option_type_float = { diff --git a/options/m_option.h b/options/m_option.h index a3d008a400..390919141e 100644 --- a/options/m_option.h +++ b/options/m_option.h @@ -424,6 +424,9 @@ char *format_file_size(int64_t size); #define UPDATE_OPTS_MASK \ (((UPDATE_OPT_LAST << 1) - 1) & ~(unsigned)(UPDATE_OPT_FIRST - 1)) +// type_float/type_double: string "default" is parsed as NaN (and reverse) +#define M_OPT_DEFAULT_NAN (1 << 29) + // Like M_OPT_TYPE_OPTIONAL_PARAM. #define M_OPT_OPTIONAL_PARAM (1 << 30) diff --git a/video/out/gpu/video.c b/video/out/gpu/video.c index ea47b308d3..08cd08ebe4 100644 --- a/video/out/gpu/video.c +++ b/video/out/gpu/video.c @@ -342,14 +342,18 @@ static int validate_error_diffusion_opt(struct mp_log *log, const m_option_t *op #define OPT_BASE_STRUCT struct gl_video_opts +// Use for options which use NAN for defaults. +#define OPT_FLOATDEF(name, var, flags) \ + OPT_FLOAT(name, var, (flags) | M_OPT_DEFAULT_NAN) + #define SCALER_OPTS(n, i) \ OPT_STRING_VALIDATE(n, scaler[i].kernel.name, 0, validate_scaler_opt), \ - OPT_FLOAT(n"-param1", scaler[i].kernel.params[0], 0), \ - OPT_FLOAT(n"-param2", scaler[i].kernel.params[1], 0), \ + OPT_FLOATDEF(n"-param1", scaler[i].kernel.params[0], 0), \ + OPT_FLOATDEF(n"-param2", scaler[i].kernel.params[1], 0), \ OPT_FLOAT(n"-blur", scaler[i].kernel.blur, 0), \ OPT_FLOATRANGE(n"-cutoff", scaler[i].cutoff, 0, 0.0, 1.0), \ OPT_FLOATRANGE(n"-taper", scaler[i].kernel.taper, 0, 0.0, 1.0), \ - OPT_FLOAT(n"-wparam", scaler[i].window.params[0], 0), \ + OPT_FLOATDEF(n"-wparam", scaler[i].window.params[0], 0), \ OPT_FLOAT(n"-wblur", scaler[i].window.blur, 0), \ OPT_FLOATRANGE(n"-wtaper", scaler[i].window.taper, 0, 0.0, 1.0), \ OPT_FLOATRANGE(n"-clamp", scaler[i].clamp, 0, 0.0, 1.0), \ @@ -383,7 +387,7 @@ const struct m_sub_options gl_video_conf = { tone_map.scene_threshold_low, 0, 0, 20.0), OPT_FLOATRANGE("hdr-scene-threshold-high", tone_map.scene_threshold_high, 0, 0, 20.0), - OPT_FLOAT("tone-mapping-param", tone_map.curve_param, 0), + OPT_FLOATDEF("tone-mapping-param", tone_map.curve_param, 0), OPT_FLOATRANGE("tone-mapping-max-boost", tone_map.max_boost, 0, 1.0, 10.0), OPT_FLOAT("tone-mapping-desaturate", tone_map.desat, 0), OPT_FLOATRANGE("tone-mapping-desaturate-exponent", -- cgit v1.2.3 From 3c7e20a0e22b61a015b35f989b7d9f0aadb5ae6a Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 25 Oct 2019 00:30:04 +0200 Subject: json: write NaN/Infinity float values as strings JSON doesn't support these for some god-awful reason. (JSON would have been so much better if it weren't based on JavaScript, the plague of this world.) We don't really care whether these specific values "round trip", so we might as well write them in a standard-compliant way. Untested. I was too lazy to even run this, but it probably works. See #6691. --- misc/json.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/misc/json.c b/misc/json.c index d1b2afddb6..d25e0f55c8 100644 --- a/misc/json.c +++ b/misc/json.c @@ -299,9 +299,11 @@ static int json_append(bstr *b, const struct mpv_node *src, int indent) case MPV_FORMAT_INT64: bstr_xappend_asprintf(NULL, b, "%"PRId64, src->u.int64); return 0; - case MPV_FORMAT_DOUBLE: - bstr_xappend_asprintf(NULL, b, "%f", src->u.double_); + case MPV_FORMAT_DOUBLE: { + const char *px = isfinite(src->u.double_) ? "" : "\""; + bstr_xappend_asprintf(NULL, b, "%s%f%s", px, src->u.double_, px); return 0; + } case MPV_FORMAT_STRING: write_json_str(b, src->u.string); return 0; -- cgit v1.2.3 From f5f285ec3ed33c27291bf13200680c7e6a12e55e Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 25 Oct 2019 00:47:45 +0200 Subject: options: set correct range for --video-aspect-override It appears this option didn't have min/max enabled for quite a while (broken while it was still called --aspect). --- options/options.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/options/options.c b/options/options.c index 6743e320da..862975ea48 100644 --- a/options/options.c +++ b/options/options.c @@ -522,9 +522,8 @@ const m_option_t mp_opts[] = { OPT_STRING("audio-spdif", audio_spdif, 0), - // -1 means auto aspect (prefer container size until aspect change) - // 0 means square pixels - OPT_ASPECT("video-aspect-override", movie_aspect, UPDATE_IMGPAR, -1.0, 10.0), + OPT_ASPECT("video-aspect-override", movie_aspect, UPDATE_IMGPAR | M_OPT_RANGE, + .min = -1, .max = 10), OPT_CHOICE("video-aspect-method", aspect_method, UPDATE_IMGPAR, ({"bitstream", 1}, {"container", 2})), -- cgit v1.2.3 From 509f6f5a9bbaec44e253bf355233f428e50321c4 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 25 Oct 2019 00:50:38 +0200 Subject: command: remove some unused property metadata Also add an OSD entry for the video aspect. --- player/command.c | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/player/command.c b/player/command.c index 0b26e7c9a0..1d0da8e105 100644 --- a/player/command.c +++ b/player/command.c @@ -3710,8 +3710,7 @@ static const char *const *const mp_event_property_change[] = { E(MPV_EVENT_VIDEO_RECONFIG, "video-out-params", "video-params", "video-format", "video-codec", "video-bitrate", "dwidth", "dheight", "width", "height", "fps", "aspect", "vo-configured", "current-vo", - "colormatrix", "colormatrix-input-range", "colormatrix-output-range", - "colormatrix-primaries", "video-aspect", "video-dec-params", + "video-aspect", "video-dec-params", "hwdec", "hwdec-current", "hwdec-interop"), E(MPV_EVENT_AUDIO_RECONFIG, "audio-format", "audio-codec", "audio-bitrate", "samplerate", "channels", "audio", "volume", "mute", @@ -3918,16 +3917,6 @@ static const struct property_osd_display { {"border", "Border"}, {"framedrop", "Framedrop"}, {"deinterlace", "Deinterlace"}, - {"colormatrix", - .msg = "YUV colormatrix:\n${colormatrix}"}, - {"colormatrix-input-range", - .msg = "YUV input range:\n${colormatrix-input-range}"}, - {"colormatrix-output-range", - .msg = "RGB output range:\n${colormatrix-output-range}"}, - {"colormatrix-primaries", - .msg = "Colorspace primaries:\n${colormatrix-primaries}"}, - {"colormatrix-gamma", - .msg = "Colorspace gamma:\n${colormatrix-gamma}"}, {"gamma", "Gamma", .osd_progbar = OSD_BRIGHTNESS }, {"brightness", "Brightness", .osd_progbar = OSD_BRIGHTNESS}, {"contrast", "Contrast", .osd_progbar = OSD_CONTRAST}, @@ -3949,14 +3938,11 @@ static const struct property_osd_display { {"sub-ass-override", "ASS subtitle style override"}, {"vf", "Video filters", .msg = "Video filters:\n${vf}"}, {"af", "Audio filters", .msg = "Audio filters:\n${af}"}, - {"tv-brightness", "Brightness", .osd_progbar = OSD_BRIGHTNESS}, - {"tv-hue", "Hue", .osd_progbar = OSD_HUE}, - {"tv-saturation", "Saturation", .osd_progbar = OSD_SATURATION}, - {"tv-contrast", "Contrast", .osd_progbar = OSD_CONTRAST}, {"ab-loop-a", "A-B loop start"}, {"ab-loop-b", .msg = "A-B loop: ${ab-loop-a} - ${ab-loop-b}"}, {"audio-device", "Audio device"}, {"hwdec", .msg = "Hardware decoding: ${hwdec-current}"}, + {"video-aspect-override", "Aspect ratio override"}, // By default, don't display the following properties on OSD {"pause", NULL}, {"fullscreen", NULL}, -- cgit v1.2.3 From 89dc74885db7379fb542ba1ffc9907226dbb000d Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 25 Oct 2019 13:41:34 +0200 Subject: manpage: fix --script docs This doesn't take a ',' separated list. --script is just an alias for --scripts--append. --scripts accepts a list, but uses the mplayer-inherited platform-dependent path separator. Fixes: #5996 --- DOCS/man/options.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index d537380e78..5d35e226dc 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -696,9 +696,9 @@ Program Behavior configuration subdirectory (usually ``~/.config/mpv/scripts/``). (Default: ``yes``) -``--script=`` - Load a Lua script. You can load multiple scripts by separating them with - commas (``,``). +``--script=``, ``--scripts=file1.lua:file2.lua:...`` + Load a Lua script. The second option allows you to load multiple scripts by + separating them with the path separator (``:`` on Unix, ``;`` on Windows). ``--script-opts=key1=value1,key2=value2,...`` Set options for scripts. A script can query an option by key. If an -- cgit v1.2.3 From 3a8abbee2fd25f9d137098cd4ed9f7cedf478fbd Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 25 Oct 2019 15:08:15 +0200 Subject: Release 0.30.0 --- RELEASE_NOTES | 210 +++++++++++++++++++++------------------------------------- VERSION | 2 +- 2 files changed, 77 insertions(+), 135 deletions(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index c68a639c4f..9abfb9ef30 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -1,61 +1,10 @@ Release 0.30.0 ============== +This release requires FFmpeg 4.0 or newer. This release has replaced the internal Vulkan rendering abstraction with libplacebo's more up-to-date implementation. -Features --------- - -Added -~~~~~ - -- vo_gpu: Vulkan API implementation based on libplacebo. -- vo_drm: Add 30bpp support. - -Changed -~~~~~~~ - - -Deprecated -~~~~~~~~~~ - - -Removed -~~~~~~~ - -- vo_gpu: Internal Vulkan API implementation. - - -Options and Commands --------------------- - -Added -~~~~~ - - -Changed -~~~~~~~ - - -Deprecated -~~~~~~~~~~ - - -Removed -~~~~~~~ - - -Fixes and Minor Enhancements ----------------------------- - - - -Release 0.29.0 -============== - -This release requires FFmpeg 4.0 or newer. - Features -------- @@ -63,40 +12,54 @@ Features Added ~~~~~ -- ao/openal: Add better sample format and channel layout selection -- ao/openal: Add support for direct channels output -- cocoa-cb: initial implementation via opengl-cb API -- context_drm_egl: Introduce 30bpp support (requires Mesa 18.0.0_rc4 or later) -- osx: add some more menu bar items as suggested by Apples's HIG -- vo_gpu: make screenshots use the GL renderer (#5498, #5240) -- x11: support Shift+TAB as an input key bind (#5849) -- ytdl_hook: support native dash demuxer, if present +- vo_gpu: vulkan: hwdec_cuda: Add support for Vulkan interop +- command: support for async commands +- input: support for named arguments +- cocoa-cb: add support for mac 10.14 Dark mode and run time switching +- vo_gpu: switch to Vulkan API implementation based on libplacebo +- context_drm_egl: Add support for presentation feedback +- vo_gpu: implement error diffusion for dithering +- vo/gpu: hwdec_vdpau: Support direct mode for 4:4:4 content +- vo_gpu: hwdec_vaapi: Add Vulkan interop +- video, TOOLS: add vf_fingerprint and a skip-logo script +- vo_gpu: d3d11: add support for presentation feedback +- vo_drm: 30bpp support +- cocoa-cb: add support for 10bit opengl rendering +- video: add pure gamma TRC curves for 2.0, 2.4 and 2.6 +- vo_drm: Implement N-buffering and presentation feedback +- Reintroduce vo_wayland as vo_wlshm +- video: add zimg wrapper +- wayland: add presentation time +- input: add gamepad support through SDL2 Changed ~~~~~~~ -- ao_alsa, ao_pulse: reduce requested buffer size -- audio: change format negotiation, remove channel remix fudging -- client API: deprecate opengl-cb API and introduce a replacement API -- demux: lower demuxer cache default sizes from 400MB/400MB to 50MB/150MB -- osx: always deactivate the early opengl flush on macOS -- scripting: change when/how player waits for scripts being loaded -- vo_gpu: various improvements to HDR peak detection -- vo_gpu: various improvements to HDR tone mapping -- wayland_common: update to stable xdg-shell -- ytdl_hook: parse youtube playlist urls to set start index if `--ytdl-raw-option=yes-playlist=` is specified - -Deprecated -~~~~~~~~~~ - -- af_lavrresample: deprecate this filter +- cocoa-cb: use libmpv's advanced rendering control and timing +- vo_gpu: improve tone mapping desaturation +- vo_gpu: redesign peak detection algorithm +- vo_gpu: allow boosting dark scenes when tone mapping +- osc: improve look of seekranges +- vo_gpu: x11: remove special vdpau probing, use EGL by default +- demux: sort filenames naturally when playing a directory / archive +- stream_dvb: rewrite channel switching, remove old stream control +- filters: extend vf_format so that it can convert color parameters Removed ~~~~~~~ -- build: drop support for SDL1 (only applied to ao_sdl) +- demux, stream: rip out the classic stream cache +- vo_gpu: removed internal Vulkan implementation +- Remove libdvdread support in favor of libdvdnav +- demux, stream: remove much of the optical disc support +- Remove classic Linux analog TV support, and DVB runtime controls +- demux, stream: remove old rar support in favor of libarchive +- vo_gpu: remove mali-fbdev +- vo_gpu: remove vdpau/GLX backend +- vf_vapourynth: remove Lua backend +- vo_gpu: remove hwdec_d3d11eglrgb Options and Commands @@ -105,88 +68,67 @@ Options and Commands Added ~~~~~ -- add a number of --audio-resample-* options, which should from now on be used instead of --af-defaults=lavrresample: -- ao/openal: --openal-direct-channels -- command: add --osd-on-seek option defaulting to bar -- command: add a change-list command (#5435) -- options: add --http-proxy -- options: add a builtin low-latency profile -- vaapi: add option to select a non-default device path with --vaapi-device (#4320) -- video: add option to reduce latency by 1 or 2 frames -- vo_gpu: introduce --target-peak (#5521) +- command: add a subprocess command +- vo_gpu: added --tone-mapping-max-boost, --hdr-peak-decay-rate, --hdr-scene-threshold-low/high +- player: add --demuxer-cache-wait option +- Implement backwards playback +- demux: add a on-disk cache +- demux, command: add another stream recording mechanism, `dump-cache` command +- ao_pulse: add --pulse-allow-suspended +- command: add video-add/video-remove/video-reload commands +- demux_cue: added --demuxer-cue-codepage to select CUE sheet charset +- input: add keybind command +- command: add sub-start & sub-end properties +- video/d3d11: added --d3d11-adapter to select a rendering adapter by name +- vo_gpu/d3d11: added --d3d11-output-format for configuring swap chain format Changed ~~~~~~~ -- command: change cycle-value command behavior (#5772) -- config: replace config dir lua-settings/ with dir script-opts/ -- options: --lavfi-complex now requires uniquely named filter pads. -- options: --ytdl is now always enabled, even for libmpv -- options: make --deinterlace=yes always deinterlace (#5219) -- options: slightly improve filter help output for lavfi bridge -- vo: rename --vo=opengl-cb to --vo=libmpv +- vo_gpu: split --linear-scaling into --linear-upscaling and --linear-downscaling +- vo_gpu: split --tone-mapping-desaturate into strength and exponent +- drm: rename --drm-osd-plane-id to --drm-draw-plane, --drm-video-plane-id to --drm-drmprime-video-plane, --drm-osd-size to --drm-draw-surface-size Deprecated ~~~~~~~~~~ -- encoding: deprecate a bunch of obscure options (--ovoffset, --oaoffset, --ovfirst, --oafirst) -- options: deprecate --vf-defaults and --af-defaults -- osx: --gpu-context=cocoa with --gpu-api=opengl is now deprecated in favour of --vo=libmpv +- options: deprecate --video-aspect, replaced by --video-aspect-override +- options: deprecate --record-file, --spirv-compiler Removed ~~~~~~~ -- command: remove an old compatibility hack that allowed CLI aliases to be set as property, deprecated in 0.26.0 -- input: remove legacy command handling for MPlayer commands that were deprecated in 2013 -- options: drop --opensles-sample-rate, as --audio-samplerate should be used if desired -- options: drop deprecated --videotoolbox-format, --ff-aid, --ff-vid, --ff-sid, --ad-spdif-dtshd, --softvol options -- options: remove --video-stereo-mode -- options: remove deprecated ao/vo auto profiles -- options: remove the following encoding options: --ocopyts (now the default, old timestamp handling is gone), --oneverdrop (now default), --oharddup (you need to use --vf=fps=VALUE), --ofps, --oautofps, --omaxfps +- options: remove deprecated --chapter option +- demux: remove "program" property +- stream: remove "disc-titles", "disc-title", "disc-title-list", and "angle" properties +- cocoa-cb: remove --macos-title-bar-style, replaced by --macos-title-bar-material and --macos-title-bar-appearance +- spirv: remove support for --spirv-compiler=nvidia (shaderc is the only remaining option) Fixes and Minor Enhancements ---------------------------- -- HIDRemote: fix volume buttons on macOS 10.13 (#5721) -- TOOLS/autoload: Fix broken "disabled" option -- TOOLS/autoload: be more robust with slow directory listings (#5618) -- ao_sdl: fix default buffer size -- build: add static libraries to libmpv.pc -- build: bump waf to 2.0.9 (fixes Python 3.7 compatibility) -- build: manually add standard library search paths for linking (#5791) -- common: round all integer times to milliseconds -- demux, player: fix playback of sparse video streams (w/ still images) -- demux: support for some kinds of timed metadata (e.g. ICY) -- demux_mkv: add V_AV1 identifier for AV1 -- demux_mkv: support Meridian Lossless Packing in Matroska (#5923) -- display additional metadata tags during video playback -- drm_atomic: Fix memory leaks in drm_atomic_create -- enable cache for FUSE filesystems on OpenBSD and FreeBSD -- gpu: prefer 16bit floating point FBO formats to 16bit integer ones -- hwdec_vaegl: Fix VAAPI EGL interop used with gpu-context=drm -- input.conf: use exact value for [ binding, which does the inverse of ] -- input: add a keybinding to toggle hardware decoding -- input: minor additions to default key bindings (#973) -- osc: fix accidentally skipping files when seeking with slider -- player: fix strange behavior on edition switching -- player: fix track autoselection of external files yet again -- terminal-unix: stop trying to read when terminal disappears (#5842) -- video: actually wait for last frame being rendered on EOF -- video: fix --video-rotate in some cases -- video: fix crash with vdpau when reinitializing rendering (#5447) -- vo_gpu: fix anamorphic screenshots (#5619) -- vo_vdpau: fix resizing and rotation problems +- context_drm_egl: implement n-buffering +- cocoa-cb: add support for custom colored title bar +- vo_gpu: x11egl: support Mesa OML sync extension +- demux, demux_edl: add extension for tracks sourced from separate streams +- context_drm_egl: Use eglGetPlatformDisplayEXT if available +- vo_gpu: vulkan: add Android context +- wayland: use xdg-decoration if available +- vo_gpu: glx: use GLX_OML_sync_control for better vsync reporting +- demux: runtime option changing for cache and stream recording +- x11: fix ICC profiling for multiple monitors +- zsh completion: move generation to runtime and improve This listing is not complete. Check DOCS/client-api-changes.rst for a history of changes to the client API, and DOCS/interface-changes.rst for a history of changes to other user-visible interfaces. -A complete changelog can be seen by running `git log v0.28.2..v0.29.0` +A complete changelog can be seen by running `git log v0.29.1..v0.30.0` in the git repository or by visiting either -https://github.com/mpv-player/mpv/compare/v0.28.2...v0.29.0 or -https://git.srsfckn.biz/mpv/log/?qt=range&q=v0.28.2..v0.29.0 +https://github.com/mpv-player/mpv/compare/v0.29.1...v0.30.0 or +https://git.srsfckn.biz/mpv/log/?qt=range&q=v0.29.1..v0.30.0 diff --git a/VERSION b/VERSION index 66d9195e3f..c25c8e5b74 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.29.0-UNKNOWN +0.30.0 -- cgit v1.2.3