summaryrefslogtreecommitdiffstats
path: root/video
Commit message (Collapse)AuthorAgeFilesLines
* cocoa-cb: use EventHelper for event handlingder richter2024-03-241-8/+4
|
* cocoa-cb: use a separate mpv_handle for cocoa-cb to simplify shutdownder richter2024-03-241-5/+4
|
* mac/apphub: migrate remaining events functionality to new AppHubder richter2024-03-241-1/+1
| | | | | | | | add new app_bridge objc file for bridging between mpv core and app functionality. replace old EventsResponder singleton with AppHub. another step to clean up all App functionality and have one central place for it.
* hwdec/vulkan: enable the stable AV1 extensionLynne2024-03-241-2/+1
| | | | | | | As no drivers were ever released with the unstable extension, it's not needed anymore. Not bumping the required headers version yet.
* mac: optimise and shorten some codeder richter2024-03-213-15/+6
|
* mac/option: remove now unused computed option variablesder richter2024-03-211-1/+0
|
* mac/option: rename option structs to properly represent their contentder richter2024-03-216-59/+59
| | | | also optimise option cache setup.
* mac/libmpv: remove mac option handling in favour of option handlerder richter2024-03-211-4/+4
| | | | | | since the option handler is not optional anymore and available on init in cocoa-cb we don't need to duplicate this functionality in libmpv anymore.
* mac/option: make option helper none optionalder richter2024-03-216-79/+49
| | | | gets rid of some unwrapping boilerplate and nil coalescing operators.
* mac/option: make option helper vo struct independentder richter2024-03-213-6/+9
|
* mac/option: remove unused and obsolete variablesder richter2024-03-212-2/+2
|
* mac/option: move option functionality from mpv helper to option helperder richter2024-03-216-90/+90
| | | | delete now empty mpv helper
* mac/type: move c<>swift type bridging into a dedicated type helperder richter2024-03-211-20/+20
|
* video/egl_helpers: fix fallback logic for EGL_KHR_create_contextsfan52024-03-211-3/+4
| | | | | | | | | | | | Both possible paths had bugs: For OpenGL it passed EGL_CONTEXT_CLIENT_VERSION, which - in older versions of the standard - was not permitted. For GLES it always assumed EGL_CONTEXT_FLAGS_KHR to work, which belongs to the aforementioned extension. Ironically this was never a problem (probably saved by implementations not being overly strict) except in 2024 on an emulated Android 14 device that trips over this edge case. It is a mystery.
* video/egl_helpers: log error for eglCreateContextsfan52024-03-211-1/+2
|
* various: use thread safe mp_strerror()nanahi2024-03-192-2/+3
|
* image_writer: refactor screenshot write functionsnanahi2024-03-191-50/+24
| | | | | | | | | | | | When 3cb9119984b88b31a5b958b1b83efe8d1cf0b818 introduced AVIF screenshot support, FILE * in write functions were replaced by filenames. This resulted in unnecessary duplication of FILE * handling code and the usage of avio_open API made it hard to use exclusive open with it. To unify file handling, use avio_open_dyn_buf instead which writes to memory instead. This way FILE * can be used for the write functions and file handling code can be deduplicated. Since we now control the file opening, exclusive open can now be used for AVIF screenshots.
* image_writer: fix TOCTOU in screenshot filename generationnanahi2024-03-193-11/+26
| | | | | | | | | | | | | | | | The screenshot command is documented to not overwrite existing files. However, there is a race window between the filename is generated with gen_fname and when the file is open to write. Specifically, the convert_image function in this window can be very time consuming depending on video and screenshot image format and size. This results in existing file being overwritten because the file writing functions don't check for the existance of file. Fix this be opening the file in exclusive mode. Add overwrite parameter to write_image for other operations that are documented to overwrite existing files, like screenshot-to-file. Note that for write_avif, checking existance is used instead because avio_open does not support exclusive open mode.
* repack: add restrict qualifier to src/dst pointersKacper Michajłow2024-03-191-36/+36
| | | | | Allows compiler to do its job and optimize this code. We don't really want to repack in-place.
* win32: resolve dropped shell links (Windows shortcuts)nanahi2024-03-191-1/+3
| | | | | When a shell link is dropped onto the mpv window, the file name will be replaced by the file name of its target so that the linked file is played.
* video/image_writer: attach MDVC metadata and CLLI metadataLeo Izen2024-03-192-13/+8
| | | | | | | | This commit allows image_writer to attach HDR metadata to AVFrames via the corresponding AVFrameSideData attachments, if present. It does this by calling pl_avframe_set_color, already used by mp_image_to_avframe. Signed-off-by: Leo Izen <leo.izen@gmail.com>
* vo_gpu_next: make `dither-depth=auto` mean 8 bpc for non-d3d11 SDRllyyr2024-03-191-1/+5
| | | | | | | Fixes the issue described in https://github.com/mpv-player/mpv/issues/11862 for SDR files for non-d3d11 gpu-api. We currently don't have a smarter way to get the real on-the-wire bpc for other APIs, so this is the best that can be done.
* vulkan: remove color_depth stubllyyr2024-03-191-6/+0
| | | | Needed for the next commit
* vo_gpu_next: fix -Wembedded-directive warningnanahi2024-03-192-18/+19
| | | | warning: embedding a directive within macro arguments has undefined behavior
* video/out/gpu/spirv: fix warning: zero size arrays are an extensionnanahi2024-03-191-0/+1
|
* various: fix -Wold-style-declaration warningnanahi2024-03-195-6/+6
| | | | warning: `static' is not at beginning of declaration
* video/out/placebo/utils: fix -Wignored-qualifiers warningnanahi2024-03-191-1/+1
| | | | warning: type qualifiers ignored on function return type
* vo_gpu_next: don't render ASS subtitles at HDR colorspaceKacper Michajłow2024-03-181-1/+1
| | | | | | | | | | | | Upstream ASS specification says that all subtitles should be rendered with color primaries and transfer matching their associated video. But as expected after further discussion the decision has been made to fallback to SDR mode in case of HDR video. See-Also: https://github.com/libass/libass/blob/649a7c2e1fc6f4188ea1a89968560715800b883d/libass/ass_types.h#L233-L237 See-Also: libass/libass#297 See-Also: mpv-player#13381 Fixes: mpv-player#13673
* win32: remove all NC area on Windows 10 with --title-bar=noKacper Michajłow2024-03-181-3/+12
| | | | | | | | | Windows 10 top bar height cannot be adjusted individually when WS_CAPTION is enabled due to buggy DWM NC drawing behavior. The issue is fixed in Windows 11. To keep consistent window look remove the border on each side, but only on Windows 10.
* win32: add helper function to check Windows 10 build numberKacper Michajłow2024-03-181-8/+20
|
* win32: adjust top border offset when title bar is disabledKacper Michajłow2024-03-181-18/+52
| | | | | | | | | | | | | | | Windows 11 draws border regardless, so we are 1px off on window size, blending border with one line of video. Fix that by adding the border to our internal windows size calculation. Windows 10 on the other hand has a bug where specifying left and top NC area will trigger title bar drawn in full height always. Keep old behaviour in this case. Also while there is similar "visible" border there, it seems to be transparent on Windows 10. For high contrast themes, don't adjust title bar height and instead remove WS_CAPTION to have the same border all around the window, as DWM doesn't make borders invisible in this case.
* win32: add DWMWA_VISIBLE_FRAME_BORDER_THICKNESS definitionKacper Michajłow2024-03-181-1/+8
|
* win32: use dpi aware GetSystemMetricsForDpiKacper Michajłow2024-03-181-9/+19
|
* win32: update maximized state when leaving fullscreennanahi2024-03-181-6/+7
| | | | | If the window-maximized is set while in fullscreen, it needs to be applied when leaving fullscreen, as noted in the comment.
* win32: fix window maximized state after setting window sizenanahi2024-03-181-0/+20
| | | | | | | | | | | With runtime geometry change, currently it only results in a SetWindowPos call to resize the window. However, SetWindowPos doesn't change the window maximized state, so Windows still thinks that the window is maximized even though it no longer covers the whole workspace. This results in visual glitches, and if the window is dragged afterwards it's "restored" again. Fix this by correctly setting the window maximized state in this case.
* wayland_common: respect compositor's preferenced size on state changenanahi2024-03-171-4/+2
| | | | | | | | | | | Currently mpv always uses the previous window size when unmaximizing or exiting fullscreen. This disregards compositor's preferenced size in the configure event, resulting in wrong window size if changing window state and size are delivered in the same configure event. It's better to always respect the preferenced size instead, unless the state change is due to runtime geometry change, where we want to use our preference.
* wayland_common: always use the current geometry for prepare_resizenanahi2024-03-171-14/+12
| | | | | | | | | | | | | | | | | | | | In the xdg_toplevel_configure handler, in some cases the geometry is not equal to the width and height in the event. This can happen when runtime geometry change is requested (a new size is set), or in the case of wl->state_change || width == 0 || height == 0 (the old size is used). However, prepare_resize always uses the width and height in the event and not the corrected geometry here. This causes xdg_surface_set_window_geometry using the wrong value resulting in wrong size of window decoration. Amusingly, the debug message right above it uses the correct size. Fix this by using the updated geometry size instead. Since now all prepare_resize have parameters of 0, the width and height parameters are no longer needed. Fixes: 828dd65ef84b4d8e95e70752b9eb0833909d1d23
* x11_common: unmaximize window on runtime geometry changenanahi2024-03-171-9/+6
| | | | | | | | | | | | | 8e793bde78f00fbb64223db30851c6d080c4abeb made that changing geometry while maximized has no effect until the window is unmaximazed. However, this behavior is inconsistent with setting window-scale on all of win32, wayland, and x11, which always unmaximizes the window and sets the window size. Since setting geometry is conceptually similar to setting window-scale (both change the window size), they should have the same behavior. If not fullscreen, unmaximize window on runtime geometry change to keep the behavior consistent with window-scale.
* win32: support runtime geometry updatenanahi2024-03-171-5/+13
| | | | | Similar to other platforms. Also make sure that the x/y positions are set on geometry update.
* x11_common: fix window x/y position when updating geometry on runtimenanahi2024-03-172-4/+9
| | | | | | | | | | | Currently, setting geometry on runtime only changes the window size but not the position. This is because reset_size is only set if the window size is changed, and vo_x11_highlevel_resize doesn't set the window position without force_window_position enabled. Fix this by setting the related flags and perform a window move when geometry is updated. Fixes 8e793bde78f00fbb64223db30851c6d080c4abeb.
* gpu-next: add support for --dither-depth=autoKacper Michajłow2024-03-171-3/+8
| | | | | On supported APIs. Fixes: https://github.com/mpv-player/mpv/issues/11862
* d3d11: get real on the wire bits per color channelKacper Michajłow2024-03-171-0/+5
|
* d3d11: add mp_get_dxgi_output_descKacper Michajłow2024-03-172-22/+25
|
* mac/view: optimise drag and drop event handlingder richter2024-03-161-17/+11
|
* mac/input: move scroll wheel event handling into input helperder richter2024-03-161-35/+1
|
* mac/input: optimise mouse movement enabled checkder richter2024-03-161-6/+2
|
* mac/input: move mouse event handling into input helperder richter2024-03-161-47/+12
|
* vo_{drm,wlshm}: make query_format checks more correctsfan52024-03-162-6/+7
| | | | | We're using mp_sws here, so we should ask it for format support and not the underlying library (usually swscale) directly.
* vo_drm: add support for YUYV formatsfan52024-03-163-9/+20
| | | | | | | | | | As the first aligned format this required a fix to reconfig(). Adding the other component-swapped formats in this group would be trivial but I checked the DRM database [1] and no driver exists that supports one of those but not YUYV and this is quite fringe as-is, so I opted not to. [1] <https://drmdb.emersion.fr/formats>
* vo_{drm,wlshm,x11}: add support for video-target-paramssfan52024-03-163-0/+12
|
* vo: move target_params into responsibility of VOsfan52024-03-163-6/+5
| | | | | | | | | The VO generic code tries to be helpful and resets this after each reconfig. However for the simpler VOs the target params are constant after a reconfig or even for the entire lifetime. So it's clearly better to let the VO decide. This also allows the VO to use a static buffer instead.
* context_drm_egl: log fallback correctlysfan52024-03-161-0/+4
| | | | Currently a theoretical concern because we handle all existing formats.
* vo_drm: add support for BGR formatssfan52024-03-161-3/+21
|
* vo_drm: use native matching pixel format for XRGB2101010sfan52024-03-161-34/+6
|
* mac/event: move key event handling to input helper and optimise itder richter2024-03-142-6/+6
|
* mac/events: remove redundant functions and optimise input helper usageder richter2024-03-142-6/+6
| | | | some redundant functions that jump through hoops.
* mac/helper: move input ctx related functionality into new input helperder richter2024-03-145-18/+23
| | | | also make functions thread safe.
* wayland_common: move WAYLAND_DISPLAY check above vo_wayland_state initDudemanguy2024-03-131-3/+3
| | | | | | | | Segfaults otherwise on uninit because some objects are created while others are not. Move it to the very top since the purpose of this is to skip wayland initialization entirely while autoprobing. Fixes f6f1721101e299b0989a631213375da73db719a2.
* wayland_common: require WAYLAND_DISPLAY to be set for initializationnanahi2024-03-131-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | Currently, Wayland is above X11 and DRM in probe order. The success of automatic probing depends on the fact that unsuitable backends would fail to initialize. For example, X11 backend (which uses Xlib) fails to initialize if DISPLAY environment variable is not set, so starting mpv in VT console will pick the DRM backend as expected, even when an X server is running in another VT. However, libwayland-client used by the Wayland backend has the "helpful" behavior of falling back to "wayland-0" if WAYLAND_DISPLAY is not set. This breaks autoprobing if mpv is started from X server or VT console while a running Wayland compositor running in another VT (or even running as an X client) is using "wayland-0" for protocol socket name: mpv will start playing in the Wayland compsitor instead of using the X11 or DRM backends. Similar to DISPLAY for X server, We should consider exporting WAYLAND_DISPLAY to child processes the responsibility of Wayland compositors, and any compositor not doing this should be considered broken. Thus we now require WAYLAND_DISPLAY to be set for the backend initialization to succeed to make sure that autoprobing works as intended.
* vo_gpu/vo_gpu_next: fix transparency in glxDudemanguy2024-03-134-21/+22
| | | | | | | It seems that GLX requires us to explicitly set opts.want alpha before ra_ctx_create is called. b7fd232524bc213df91fa77ca0261ff514fad1e4 rearranged the function calls in a way made this not work. Fix this by rearranging it again so the value is set before ra_ctx is created.
* vo_gpu: fix broken chroma plane for rotated semi-planar formatsnanahi2024-03-111-0/+19
| | | | | | | | | | | | | | | | | For image formats with 2 or more chroma planes such as YU12, there is a plane merging pass for these planes calling finish_pass_tex which does a format conversion. After this conversion, the cscale shader afterwards works properly. However, for image formats with only 1 chroma plane (semi-planar formats), including NV12 and P010, this merging pass is never called, which breaks the cscale shader afterwards if the video is rotated with subsampled chroma. Fix this by adding an explicit conversion pass if this situation is detected after the pre-scale hooks, so if there are shaders hooking on CHROMA (like the deband filter) and the conversion is done by pass_hook already, this conversion won't be called.
* options: remove --focus-on-open and add --focus-onder richter2024-03-103-3/+10
| | | | | | | | | replaces the old focus-on-open option with a more generic focus-on options that can be extended. adjust the only platform that uses that option. Fixes #8337
* vf_format: add hdr10plus sub-parameter to format video filterKacper Michajłow2024-03-091-0/+10
|
* mp_image: add Dolby Vision metadata mappingKacper Michajłow2024-03-096-42/+50
| | | | | Remove side-loading metadata in vo_gpu_next.c and remove unneded side-data duplication.
* csputils: add missing PL_COLOR_SYSTEM namesKacper Michajłow2024-03-092-0/+12
|
* mp_image: add mp_image_params_static_equal for finer comparisionKacper Michajłow2024-03-097-7/+26
| | | | In case of dynamic HDR metadata is present.
* wayland: always rescale geometry if in a fullscreen/maximized stateDudemanguy2024-03-091-1/+1
| | | | | | | | | | | | | | | | | This should only be a problem during initialization. If in a multi-monitor setup, mpv guesses the wrong scale value and the user passes --fs, the scaled size will be wrong and you have to unfullscreen and fullscreen again to fix it. This is because rescale geometry won't do anything if the value of hidpi-window-scale is false (the default) so the geometry is never rescaled to the correct value thus the wrong size. Normally, mpv will just correct itself after subsequent events occur but because it is considered a locked size (as it should be), we avoid doing any other resizing events thus it never gets corrected. Fix this by just always rescaling the geometry in the locked size case. It shouldn't matter elsewhere because mpv will always have the correct scale value and the possibility of having the wrong one is only possible on startup. Fixes ded181f642bc8915e3569d718d404e915cb62c27
* vo_gpu_next: infer target parametersKacper Michajłow2024-03-071-3/+5
| | | | This allows us to read them back.
* vo_gpu_next: add support for video-target-paramsKacper Michajłow2024-03-071-1/+13
|
* vo: add video-target-params propertyKacper Michajłow2024-03-072-0/+16
|
* mp_image: add imgfmt_name to mp_image_paramsKacper Michajłow2024-03-071-0/+1
| | | | | | | | Convenience to override name if imgfmt is not set. Allows to create mp_image_params without setting imgfmt. Will be useful for the next change where mp_imgfmt is not available. This is workaround that will be remved once all codebase switches to pl_fmt.
* mac/menu: add explicit menu type instead of an inferred typeder richter2024-03-071-5/+5
| | | |