Commit Graph

172 Commits

Author SHA1 Message Date
Stefano Pigozzi 9a6e6b2fc2 cocoa_common: keep aspect ratio when clipping window
With commit 33ffc283 resizing to double size would cause the window to lose
aspect ratio. This commit fixes this bug.
2013-04-17 21:22:22 +02:00
Stefano Pigozzi 22d53fb97c change reverse DNS strings to io.mpv.*
fixes #60
2013-04-16 23:34:58 +02:00
Stefano Pigozzi 33ffc28373 cocoa_common: refactor centered resize
This refactor makes the code easier to understand. Also corrects a bug that
caused the window to move to the left when the new size was bigger than the
visible frame.
2013-04-16 22:51:01 +02:00
Alexander Preisinger 8f1168b73f wayland: use vo flags for enabling alpha support
I missed the VOFLAG for enabling alpha support
2013-04-02 21:10:22 +02:00
Alexander Preisinger 39116ecf31 wayland: enable alpha support
It is now possible to show images and videos with alpha information correctly.
This was disalbed before, because there was a bug that made black parts of
videos also transparent.
2013-04-02 20:50:54 +02:00
Stefano Pigozzi e31567fe41 gl_video: remove double const qualifier
This fixes a warning when compiling with clang.
2013-03-30 20:42:11 +01:00
wm4 d39b131bde gl_video: add some missing includes
On most platforms, they are recursively included, but not all.
2013-03-30 04:01:17 +01:00
wm4 624fe1736e gl_lcms: fix compilation when lcms2 is not available 2013-03-30 03:29:54 +01:00
wm4 b617863c24 gl_video: actually fix shader compilation on OSX
The previous attempt was missing some code paths, so there were still
shaders generated that triggered the shader compilation error. Fix it
instead by special handling USE_CONV in the shader.

By the way, the shader compiler did not accept:

    #if defined(USE_CONV) && (USE_CONV == ...)

In my opinion this should be perfectly fine, but it gives the same
error as before. So test USE_CONV separately with #ifndef.
2013-03-28 23:52:40 +01:00
wm4 5d8b50bda8 gl_video: fix OSX by not using undefined name in GLSL "#if"
The OSX shader compiler was giving this error:

    ERROR: 0:235: '' : syntax error incorrect preprocessor directive

on this line:

    [235] #if USE_CONV == CONV_PLANAR

USE_CONV was undefined in some cases. The expected behavior is that the
shader preprocessor interprets this as branch not taken (AFAIK exactly
as in C), which is probably what the standard would dictate. This is
possible an OSX bug. But admittedly, I'm not sure whether this is really
standard behavior (in C or GLSL), and doing this is extremely weird at
best, so make sure that USE_CONV is always defined.

Should fix behavior on OSX.
2013-03-28 23:30:54 +01:00
wm4 6232fa26b3 gl_header_fixes: add GL_RGBA32F
Should fix compilation on OSX 10.8.3 and maybe other platforms.
2013-03-28 22:55:56 +01:00
wm4 2585baa649 gl_video: use choice option type for dither-depth suboption
Replaces the numeric magic values -1 and 0 with "no" and "auto". The
numeric values are still allowed for compatibility.
2013-03-28 21:46:18 +01:00
wm4 8d7858dd9d vo: rename vo_draw_image to vo_queue_image 2013-03-28 21:46:18 +01:00
wm4 7f64a1fde9 vo: remove two unused symbols 2013-03-28 21:46:18 +01:00
wm4 a0e2f7113b gl_video: add some alpha FBO formats 2013-03-28 21:46:17 +01:00
wm4 8099cbe9dd vo_opengl: add alpha output
Allows playing video with alpha information on X11, as long as the video
contains alpha and the window manager does compositing. See vo.rst.

Whether a window can be transparent is decided by the choice of the X
Visual used for window creation. Unfortunately, there's no direct way to
request such a Visual through the GLX or the X API, and use of the
XRender extension is required to find out whether a Visual implies a
framebuffer with alpha used by XRender (see for example [1]). Instead of
depending on the XRender wrapper library (which would require annoying
configure checks, even though XRender is virtually always supported),
use a simple heuristics to find out whether a Visual has alpha. Since
getting it wrong just means an optional feature will not work as
expected, we consider this ok.

[1] http://stackoverflow.com/questions/4052940/how-to-make-an-opengl-
rendering-context-with-transparent-background/9215724#9215724
2013-03-28 21:46:17 +01:00
wm4 69c4baad91 gl_video: always upload all planes
When displaying YUV with alpha plane (an extremely rare special case),
we didn't upload the alpha plane, because we don't do anything with it.
This actually created some annoying special cases, so upload the alpha
planes as well, even if they're unused.
2013-03-28 21:46:17 +01:00
wm4 4221417875 gl_video: support NV21 too 2013-03-28 21:46:17 +01:00
wm4 120d6bf57c gl_video: add support for NV12
There's really no reason for this, but it feels nice being able to
support a weird pixel format.
2013-03-28 21:46:17 +01:00
wm4 1df2edda3a gl_video: make it possible for planes to have different formats
Preparation for NV12 support.

Also adds support for IMGFMT_YA8.
2013-03-28 21:46:17 +01:00
wm4 47d8fd0713 gl_video: move video image fields into a struct
This is a bit cleaner. Also don't repeat the chroma shift calculations
over and over, but store the image size instead, which is simpler and
will give us a chance to fix display of non-mod-2 image sizes.
2013-03-28 21:46:17 +01:00
wm4 6ef06aa145 vo_opengl: split into multiple files, convert to new option API
gl_video.c contains all rendering code, gl_lcms.c the .icc loader and
creation of 3D LUT (and all LittleCMS specific code). vo_opengl.c is
reduced to interfacing between the various parts.
2013-03-28 21:46:17 +01:00
wm4 16e951c2cd gl_common: split into platform specific files
Do this instead of stuffing all x11/cocoa/win32/wayland specific code
into gl_common.c. The cocoa specific parts could probably go directly
into cocoa_common.m, possibly same with wayland.

Also redo how the list of backends is managed. Get rid of the GLTYPE_
constants. Instead of having a big switch() on GLTYPE_, each backend
entry has a function pointer to setup the MPGLContext callback (e.g.
mpgl_set_backend_x11()).
2013-03-28 21:46:17 +01:00
Kovensky 4be6ff5ee3 w32_common: Cygwin64 fixes
Good news: MPV worked fine even without the fixes, but pointer size
mismatch warnings aren't the nicest things to leave lying around.

Fix macro that assumed HWND is uint32_t-sized.

Win64 is also a special butterfly and is an LLP64 platform on amd64
CPUs, while all the other amd64 platforms are LP64. Cygwin decided to go
with the other platforms, and thus sizeof(long) != sizeof(int), and in
cygwin's windows headers LONG is int-sized. Fix an mp_msg that assumed
LONG is long.
2013-03-23 21:04:59 +01:00
Alexander Preisinger 1fc58386d1 wayland: fully support cursor autohide options
I missed the special cases in the previous commits.
2013-03-23 12:58:34 +01:00
wm4 e4be357bce w32_common: reset internal display size to the window size
vo->dwidth/dheight are overwritten by vo.c at this point (which is not
nice, but it's how things are currently).
2013-03-19 23:36:43 +01:00
wm4 594ad5acc2 video: deal with 0x0 window size
If this happens, don't set a NaN aspect ratio.
2013-03-19 23:34:50 +01:00
wm4 ea03cc6712 x11_common: remove assumption that video is always centered
The vo_x11_clearwindow_part() function assumed that the video is always
centered. Replace it with a new vo_x11_clear_background() function
instead, which essentially does the same as the old function. It takes
the video rectangle instead of just the video size, and doesn't have to
make the assumption that the video rectangle is centered.

Also make vo_x11 use it (seems advantageous).
2013-03-17 23:01:33 +01:00
wm4 79d35b8f01 video: enable panscan calculations even in windowed mode
This was probably enabled to guarantee that panscan is always reset in
windowed mode. However, the window size should be exactly the video size
in windowed mode, unless in cases where the user forcibly changed the
window size (e.g. --geometry). In the former case, panscan will have no
influence at all, and in the latter case we want it to have influence.
2013-03-17 22:12:16 +01:00
wm4 f86deec58b video: apply --no-keepaspect even on fullscreen
If that's what the user asked for, there's no reason to introduce
special cases to ignore it on fullscreen.

The old behavior is perhaps accidentally due to the fact that aspect
calculations used to be disabled in windowed mode, rather than a
deliberate decision.
2013-03-17 22:07:13 +01:00
wm4 b049ffb330 video: remove rounding of display size to multiples of 2
The code that is changed is responsible for scaling the video size to
display size, so that the resulting video rectangle is letter-boxed
inside the display window. This is before panscan calculations, which
can actually enlarge the video and make it larger than the display size
again. (src_dst_split_scaling() in vo.c takes cares of clipping the
video size to window size.)

I'm not sure why this rounding is done, as using panscan controls can
introduce odd sizes again. The rounding has been part of the code since
the initial commit. On the other hand, this rounding can slightly
influence the aspect ratio of the displayed image to the worse. It
forces the image to be scaled by an additional pixel, without actually
correcting the display size into the other direction.

Although video sizes are usually at least aligned on 2 (and often more),
odd sizes can still happen when playing e.g. anamorphic DVDs.

Remove the additional rounding.

(Note that we still round the _source_ image position and size when the
displayed image is larger than the screen, e.g. when panscan is used.
This is needed by some VOs so that the image source rectangle starts on
full chroma pixels. Maybe this rounding should be moved to the
respective VOs, which includes at least vo_direct3d.)
2013-03-17 22:07:13 +01:00
wm4 1ae1939742 video: remove aspect.h includes from files which don't need it 2013-03-17 22:07:13 +01:00
wm4 4b87cb39a3 video: simplify aspect calculation stuff
Remove lots of weird logic and dead code.

The only difference is that when specifying a monitor aspect ratio, it
will always upscale and never downscale.
2013-03-17 22:07:13 +01:00
wm4 59960baa7f vo_xv: minor simplifications
The draw_osd change is a bit tricky: I guess originally, there was some
intention not to second-guess the generic aspect code, but the result is
the same and the code is more confusing.
2013-03-17 19:07:30 +01:00
wm4 36f5d800d5 vo_x11: accept all swscale formats
There's no reason why there should be a separate vf_scale stage.
2013-03-17 19:07:29 +01:00
wm4 5b6da6e286 vo_corevideo: use generic aspect ratio code
The rescaling is rather silly. vo_get_src_dst_rects() doesn't return an
uncropped image, so the texture coordinates have to be recalculated,
which looks more complicated, but is actually what the other OpenGL VOs
also do.

Tested and fixed by Stefano Pigozzi.
2013-03-17 19:07:29 +01:00
wm4 b424dacbe5 vo_opengl_old: use generic aspect ratio code
Make sure scaled_osd still works. Although this is a completely
worthless feature for a deprecated VO.
2013-03-17 18:51:32 +01:00
wm4 b1b982941d vo_x11: use generic aspect ratio code, refactor
Instead of manually calculating aspect ratio etc., use
vo_get_src_dst_rects(). This has the advantage that we can drop some
special cases in aspect.c later.

Simplify the code, and move resizing the X images from draw_image() to a
new resize() function.

Do some other simplifications. The gXErrorFlag check was actually dead
code, even in mplayer-svn. Special-casing on WinID is not needed
anymore (we created an embedded window, and its size is updated by
x11_common.c).
2013-03-17 18:46:03 +01:00
Stefano Pigozzi ad000fb916 cocoa_common: fix regression when changing videos in fullscreen
I introuced this regression in 8fc0b618d5. The backend would go into
incosistent state caused by calling `vo_cocoa_fullscreen` where it wasn't
needed.

Fixes #44
2013-03-15 22:48:57 +01:00
Alexander Preisinger f7ad81737b wayland: remove asserts from egl_create_context
Instead of assert return false on most check.
Removes the redundant second inclusion of the assert header.
2013-03-13 20:01:12 +01:00
Alexander Preisinger db6325853a wayland: simplify egl_create_window
Removes the local ret because it was only in an assert statement and also
removes the window size assignments, because they are already done in
config_wnidow_wayland.
2013-03-13 19:47:11 +01:00
Alexander Preisinger ba43d98ac2 wayland: use the cursor_autohide_delay option
In the previous implemention the backend always assumed 1 second
instead of honoring the cursor_autohide_delay option
2013-03-11 18:31:09 +01:00
Alexander Preisinger f2debeca66 wayland: move window by grabing it
Because the are no server-side-decorations in the available wayland compositors
use grabbing the surface to move it.
2013-03-11 18:24:12 +01:00
wm4 b1be668b9d vo_opengl: insert a magical glFlush call
Helps a little bit with stuttering with pans and "heavy" subtitles
covering the screen.
2013-03-11 00:44:27 +01:00
Stefano Pigozzi 89aae59e89 cocoa_common: fix window position when bigger than display
Fix a regression introduced in commit 979ce46c64 causing a window to take up
more space than what the display allows.

Add keepCentered:YES, so that the video area is always clipped to the current
visible frame (even when using scale).

Fixes #38.
2013-03-10 17:27:43 +01:00
Rudolf Polzer fe4213b164 vo_sdl: we don't want to minize the window when losing focus
Because: this makes multi-monitor use entirely useless (as soon as
pointer leaves left screen, mpv gets auto minimized).
2013-03-06 18:10:20 +01:00
wm4 a1a9dc9c85 options: remove --no-vsync
Latest nvidia drivers ignore the application setting, so this switch
makes even less sense than before. It's still possible to control this
with VO specific suboptions.
2013-03-06 00:24:34 +01:00
wm4 3a0d647e0f w32_common: fix compilation
Broken by commit 1198c03.
2013-03-05 17:46:17 +01:00
Alexander Preisinger 1198c031e4 vo: Separate vo options from MPOpts
Separate the video output options from the big MPOpts structure and also only
pass the new mp_vo_opts structure to the vo backend.

Move video_driver_list into mp_vo_opts
2013-03-04 23:32:47 +01:00
Stefano Pigozzi 39824c071e cocoa_common: fix crash 2013-03-04 23:23:12 +01:00