1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-27 01:22:30 +00:00
Commit Graph

34733 Commits

Author SHA1 Message Date
wm4
ef3c0e6eda osd: draw the OSD bar with ASS vector drawings
Drawing the bar with vector drawings (instead with characters from the
OSD font) offers more flexibility and looks better. This also adds
chapter marks to the OSD bar, which are visible as small triangles on
the top and bottom inner border of the bar.

Change the default position of the OSD bar below the center of the
screen. This is less annoying than putting the bar directly into the
center of the view, where it obscures the video. The new position is
not quite on the bottom of the screen to avoid collisions with
subtitles.

The old centered position can be forced with ``--osd-bar-align-y=0``.

Also make it possible to change the OSD bar width/height with the new
--osd-bar-w and --osd-bar-h options.

It's possible that the new OSD bar renders much slower than the old
one. There are two reasons for this: 1. the character based bar
allowed libass to cache each character, while the vector drawing forces
it to redraw every time the bar position changes. 2., the bar position
is updated at a much higher granularity (the bar position is passed
along as float instead of as integer in the range 0-100, so the bar
will be updated on every single video frame).
2013-03-30 20:23:45 +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
f6a68063ba sub: don't crash on GBRP video
mp_get_yuv2rgb_coeffs() will crash if the colorspace is explicitly set
to RGB.
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
wm4
3374a43998 core: always pass data via packet fields to video decoders
Makes the code a bit simpler to follow, at least in the "modern"
decoding path (update_video_nocorrect_pts() is used with old demuxers,
which don't return proper packets and need further parsing, so this code
looks less simple now).
2013-03-28 21:46:17 +01:00
wm4
ac1c5e6e18 demux_mkv: improve robustness against broken files
Fixes test7.mkv from the Matroska test file collection, as well as some
real broken files I've found in the wild. (Unfortunately, true recovery
requires resetting the decoders and playback state with a manual seek,
but it's still better than just exiting.)

If there are broken EBML elements, try harder to skip them correctly.
Do this by searching for the next cluster element. The cluster element
intentionally has a long ID, so it's a suitable element for
resynchronizing (mkvmerge does something similar).

We know that data is corrupt if the ID or length fields of an element
are malformed. Additionally, if skipping an unknown element goes past
the end of the file, we assume it's corrupt and undo the seek. Do this
because it often happens that corrupt data is interpreted as correct
EBML elements. Since these elements will have a ridiculous values in
their length fields due to the large value range that is possible
(0-2^56-2), they will go past the end of the file. So instead of
skipping them (which would result in playback termination), try to
find the next cluster instead. (We still skip unknown elements that
are within the file, as this is needed for correct operation. Also, we
first execute the seek, because we don't really know where the file
ends. Doing it this way is better for unseekable streams too, because
it will still work in the non-error case.)

This is done as special case in the packet reading function only. On
the other hand, that's the only part of the file that's read after
initialization is done.
2013-03-28 21:45:16 +01:00
wm4
3533ee3ae4 demux_mkv: fix skipping broken header elements
Fixes test4.mkv from the Matroska test file collection.

demux_mkv_open() contains a loop that reads header elements. It starts
by reading the EBML element ID with ebml_read_id(). If there is broken
data in the header, ebml_read_id() might return EBML_ID_INVALID.
However, that is not handled specially, and the code for handling
unknown tags is invoked. This reads the EBML element length in order to
skip data, which, if the EBML ID is broken, is entirely random. This
caused a seek beyond the end of the file, making the demuxer fail.

So don't skip any data if the EBML ID was invalid, and simply try to
read the next element. ebml_read_id() reads at least one byte, so the
parsing loop won't get stuck.

All in all this is rather questionable, but since this affects error
situations only, makes behavior a bit more robust (no random seeks), and
actually fixes at least one sample, it's ok.

libavformat's demuxer handled this.
2013-03-28 00:00:39 +01:00
wm4
546ae23a0c demux_mkv: set correct aspect ratio even if DisplayHeight is unset
Fixes the file test2.mkv from the official Matroska test file
collection.

libavformat does the same thing.
2013-03-28 00:00:04 +01:00
wm4
2182c3ffd5 m_option: pretty-print floats with 3 pre-decimal digits instead of 2
There were complaints that ${fps} was printed as e.g. "23.98" instead of
"23.976". Since there's no way to format floats exactly _and_ in a user-
friendly way, just change the default precision for printing floats.
2013-03-26 01:29:54 +01:00
wm4
d48c855669 mpv_identify: add --quiet to mpv command line
Prevents the status line from being printed. Otherwise, the status line
is always printed due to --frames=1, and it's visible on the terminal
because it's printed to stderr.
2013-03-26 01:29:53 +01:00
wm4
90118a3810 mpv_identify: allow specifying mpv binary via MPV
Useful for testing.
2013-03-26 01:29:53 +01:00
wm4
790df511c4 core: output --playing-msg message only after at least one frame is shown
This way it's possible to retrieve correct information about video, like
actual width/height, which in general are available only after at least
one frame has been sent to the video output, such as dwidth/dheight.

mpv_identify.sh becomes a bit slower, because we let it decode enough
audio and video to fill the audio buffers and to send one frame to the
video output. Also, --playing-msg isn't shown anymore with --frames=0
(could be fixed by special-casing it, should this break any use cases).

Note that in some corner cases, like when the demuxer for some reason
returns lots of audio packets but no video packets at the start, but
video actually starts later, the --playing-msg will still be output
before video starts.
2013-03-26 01:29:53 +01:00
wm4
54e8e0a502 mplayer: make --frames=1 work for audio
This has the same (useless) definition as frame stepping in audio-only
mode: one frame means one playloop iteration. (It's relatively useless,
because one playloop iteration has a random duration. But it makes
--frames=1 work, which is useful again.)
2013-03-26 01:29:53 +01:00
wm4
140636c407 mplayer: cosmetics: make some code more readable 2013-03-26 01:29:53 +01:00
wm4
d080d1d39a command: export VO video width/height as properties
Add new properties "dwidth" and "dheight", which contain the video
size as known by the VO (not necessarily what the VO makes out of them,
i.e. without window scaling and panscan).
2013-03-26 01:29:53 +01:00
wm4
05e918be02 input: make input command deprecation warnings visible
Some time ago, all old special-cased commands (like "volume 1" to change
volume by one) have been removed. These commands are still emulated
using simple text replacement. This emulation is done to not break
everyone's input.conf, especially because the input.conf provided by
standard mplayer* still uses the old commands.

Every use of a deprecated command prints a replacement warning, which
was visible only with -v. Make these warnings visible by default.

There's actually not much reason to do this, but since commands like
"volume 5 1" don't work anymore, it's better to be verbose about this.

Also simplify the replacement for "vo_fullscreen".
2013-03-26 01:29:38 +01:00
wm4
1d530f0e31 mp_msg: don't change text color for normal output
Normal text was set to gray foreground color. This didn't work for
terminals with white background.

Instead of setting a color for normal text, reset the color attributes.
This way, only errors and warnings are formatted differently.

Also change the default color for MSGL_HINT from bold white to yellow.
2013-03-26 01:17:38 +01:00
Stefano Pigozzi
840c98d190 configure: fix OpenGL autodetection on OS X
Was broken from 746b5e6 since the OpenGL headers are under OpenGL/ and not GL/
on OS X. Thanks to @Kovensky for the initial patch.
2013-03-24 20:00:22 +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
Kovensky
746b5e6027 configure: check for presence of glext.h
vo_opengl depends on glext.h to build. Also link to Khronos' copy, which
should work on all compilers and is kept up-to-date with newer
extensions.
2013-03-23 21:04:39 +01:00
Kovensky
16b15885ff ao_dsound: add missing include
libavutil/common.h is needed for FF_ARRAY_ELEMS.
2013-03-23 21:04:27 +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
d22a3fdb09 sub: print messages before and after font setup
Helps on Windows, where fontconfig may take some time to finish.

Print it with -v only, because that message would be annoying anywhere
else.
2013-03-20 19:55:11 +01:00
Rudolf Polzer
5d5c5e31e1 encoding-examples-profiles: fix N900 profile
In some cases (when using tune=animation as an additional option), the
N900 profile caused use of 6 reference frames, where Level 3.0 only
allows 5 reference frames. This prevented playback on the Nokia N900.
This has been fixed by always specifying refs=5.
2013-03-20 16:16:16 +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
ef7975e91b input: fix crash due to dangling pointer
Wrong API usage, has been in the code since 2011. Rarely triggered (if
at all in the current setup).
2013-03-19 13:10:19 +01:00
wm4
9a731a9b0d demux: fix regressions by restricting cover art hack further
The code modified by this commit is supposed to prevent demuxing the
whole file when cover art is present. (The problem with cover art is
that the ffmpeg libavformat API doesn't signal video EOF correctly - so
we try to read more packets to find the next video frame, which results
in demuxing and queuing the whole audio stream.)

This caused regressions for files with extremely high audio offset (see
github issue #46). MY conclusion is that this cover art crap doesn't
work, and this is just another case of completely insane ffmpeg/libav
API.

Disable the hack in all cases, unless a cover art video track is
selected. Maybe I'll handle cover art directly in the frontend later, so
that we don't have to rely on whatever libavformat does.

Unfortunately, this also makes behavior with equally insane mp4 files
with sparse video tracks worse, but this issue takes priority.
2013-03-19 02:27:47 +01:00
wm4
be7e04f719 demux_mf: fix crashes when '*' matches directories
Doing 'mpv mf://*' in a file with directories would crash, because even
though directories are skipped, the corresponding file entry is just
left at NULL, leading to a segfault on access. So explicitly skip NULL
entries.
2013-03-19 01:54:45 +01:00
wm4
b242aa366b stream: silence clang empty statement warnings
clang printed warnings like:

stream/stream.c:692:65: warning: if statement has empty body [-Wempty-body]
            GET_UTF16(c, src < end - 1 ? get_le16_inc(&src) : 0,;

This macro expands to "if(cond) ;". Replace it with an empty statement
that doesn't lead to a clang warning.
2013-03-19 01:27:48 +01:00
wm4
7ba6675847 input/ar: remove unused variable 2013-03-19 00:59:55 +01:00
Rudolf Polzer
3091394edc mp_msg: print MSGL_STATUS to stderr if stderr is redirected
Of course, status output is still hidden when stderr is a tty which is
not the foreground tty.
2013-03-18 20:42:01 +01:00
Rudolf Polzer
b1ae33a355 mp_msg: fix status output disappearing when redirecting INPUT.
Instead, we now check stderr's destination against the foreground tty
for deciding whether we want status output or not.
2013-03-18 20:33:29 +01:00
Rudolf Polzer
3ef58d85ba encoding-example-profiles: for Nokia N900, avoid upscaling
This yields generally smaller files, by avoiding upscaling at all times.
This method may or may not be useful for iOS, needs testing there.

Note: this uses three instances of vf_scale:

1. Scale to target dimensions, ONLY if both are <= original video
   dimensions.
2. Failing that, scale to width*<calculated height by display aspect>,
   ONLY if <calculated height by display aspect> <= original video
   height.
3. Failing that, scale to <calculated width by display aspect>*height.
   When the test before failed, we KNOW that <calculated width by
   display aspect> <= original video width.

So basically, only one of the three scalers should ever be active, as
the last two scalers only can ever have an effect if the aspect ratio
mismatches the video.

As for danger of roundoff errors:

If scaler 1 succeeded, we have won. Scalers 2 and 3 will never do
anything, because display resolution == video resolution. Here it is
crucial that no rounding of video size to display size takes place; in
other words, the target display size already MUST be even, which it is
because we pass 2 to the rounding parameter of the dsize filter.

Scaler 2 and 3 are obviously mutually exclusive, as they depend on
opposite aspect ratio conditions.

We later should put this functionality directly into vf_scale...
2013-03-18 13:27:52 +01:00
wm4
d17e0977ea options: fix --wid
A recent change accidentally set the flags options to -1 (probably
confusing it with the defasult value?), which mistakenly set all flags
and rejected all option values (except 0).
2013-03-18 03:13:28 +01:00