Compare commits

...
23 Commits
Author SHA1 Message Date
wm4 f1409ceacf Release 0.3.10 2014-05-24 16:54:54 +02:00
Yomi0 44f62ff6f3 tl_mpv_edl: correct misspelling on line 233
Closes #783

Signed-off-by: wm4 <wm4@nowhere>
2014-05-24 16:54:54 +02:00
wm4 55c3055784 vo_vdpau: always allocate the black pixel
black_pixel is an (apparently necessary) 1x1 black surface used for
clearing the screen. It was allocated in RGB mode only, but is sometimes
used in YUV mode too.
2014-05-24 16:54:54 +02:00
Jerome Leclanche 58fbe50d68 x11: fix a warning with --disable-xext
Signed-off-by: wm4 <wm4@nowhere>
2014-05-24 16:45:00 +02:00
wm4 6a0036ea03 build: "tv-v4l2" needs "tv"
Fixes #795.
2014-05-24 16:44:55 +02:00
wm4 2e4fdf01f5 vo_vaapi: don't redraw twice
After VOCTRL_REDRAW_FRAME, flip_page is called, which renders the frame.
The current code rendered the frame twice; drop the redundant call.
2014-05-24 16:44:44 +02:00
Juan Francisco Cantero Hurtado a2259b3fd3 Fix the build on OpenBSD and FreeBSD
Without this change, the compiler uses by default the "talloc.h" file
installed by the package libtalloc within /usr/local/include. Found and
tested on OpenBSD but FreeBSD has the same patch on its ports tree.
2014-05-24 16:44:40 +02:00
wm4 aeeb7a92f2 README: describe release cycle 2014-05-24 16:43:28 +02:00
Alexander Preisinger 1e2f3191a7 wayland: fix typo
So long in the code without me noticing. Embarassing!
2014-05-24 16:41:00 +02:00
wm4 51d030308e build: fix OpenBSD DVD/CDROM device names
Closes #781.
2014-05-24 16:40:42 +02:00
wm4 4cd8aab84f manpage: update --playlist entry 2014-05-24 16:40:19 +02:00
wm4 3795154155 player: don't assign "false" to pointer
This is legal in theory. "false" expand to 0, and 0 is a valid pointer
value. But I guess this was not really intended.

Found by cppcheck.
2014-05-24 16:39:52 +02:00
wm4 461198e149 build: removed undefined behavior from PVR check
This shouldn't matter, but it's probably better if the code to check is
valid - otherwise an extremely clever compiler might fail to compile it,
and the feature would be misdetected. (Probably.)

Found by cppcheck.
2014-05-24 16:39:46 +02:00
wm4 7b1f12adba player: don't complain on too long filenames
mpv supports per-file config files, basically filename+".conf". We use
a static buffer for the new filename, and if that buffer is too small,
we print a warning. This is confusing for e.g. long URLs, so just hide
the warning by default.

Why not dynamically allocate the buffer? Who cares.
2014-05-24 16:39:27 +02:00
wm4 cf1645aebb old-makefile: add a missing source directory
Fixes "make clean".
2014-05-24 16:39:21 +02:00
wm4 1b20ec4864 x11: fix potentially unaligned access in icon loader
Tried to load a 32 bit value by dereferencing a uint32_t pointer, but
the pointer is not guaranteed to be aligned, not even in practice.
2014-05-24 16:39:12 +02:00
wm4 ee529da760 sub: fix undefined behavior in ASS color calculation (2)
Same problem as previous commit, fix by using the MP_ASS_RGBA() macro.
2014-05-24 16:39:09 +02:00
wm4 c9e6e7cc04 sub: fix undefined behavior in ASS color calculation
This might shift bits into the sign, which is undefined behavior. Making
the right operand unsigned was supposed to help with this, but it seems
it did nothing, and C99 makes the result type dependent on the left
operand only.
2014-05-24 16:39:06 +02:00
wm4 cb1d1e7a62 Fix bogus copyright text
This file was copied from gl_hwdec_vaglx.c to have a basic skeleton, but
no actual code is left from it.
2014-05-24 16:32:23 +02:00
wm4 e6d4ec62ae mixer: don't restore volume with different --softvol-max settings
Changing --softvol-max and then resuming would change the volume level
on resume to something different than the original volume. This is
because the user volume setting is always between 0-100, and 100
corresponds to --softvol-max gain.

Avoid that changing -softvol-max and resuming an older file could lead
to a too loud volume level by refusing to restore if --softvol-max
changed.
2014-05-24 16:32:00 +02:00
wm4 e7e2a6c8f7 demux_lavf: one more hack for mp3 from network
mp3 has a hack lowering the probescore for format detection. This is
because detecting mp3s is hard due to their nature, and the fact that
ID3v2 tags are sometimes several megabytes big.

When playing mp3 from network, the mime-type is usually set, and that
matches the format hack entry meant for webradios, overriding the normal
mp3 entry. This can lead to network mp3s not being detected. Lower the
network case to the same probescore as on-disk mp3s. The difference is
that for network mp3s, we don't load the full probe-buffer, and we lower
the amount of audio the demuxer will read to collect data on opening
(0.5 seconds instead of typically 5 seconds).
2014-05-24 16:29:46 +02:00
wm4 6643ebaa28 manpage: fix vf_scale options 2014-05-24 16:29:11 +02:00
wm4 98d33db5da input: fix stack overflow when checking for abort cmd
This can happen when the input stream is somehow blocking on network,
and the user still send input in one way or another, and one of the
commands is a compound command ("cmd a ; cmd b").
2014-05-24 16:28:11 +02:00
22 changed files with 91 additions and 68 deletions

No files matched your search

+10 -5
View File
@@ -1648,20 +1648,25 @@ OPTIONS
file is dumped.
``--playlist=<filename>``
Play files according to a playlist file (ASX, Winamp, SMIL, or
one-file-per-line format).
Play files according to a playlist file (Supports some common formats.If
no format is detected, t will be treated as list of files, separated by
newline characters. Note that XML playlist formats are not supported.)
.. warning::
The way mpv parses and uses playlist files is not safe against
maliciously constructed files. Such files may trigger harmful actions.
The way mpv uses playlist files is not safe against maliciously
constructed files. Such files may trigger harmful actions.
This has been the case for all mpv and MPlayer versions, but
unfortunately this fact was not well documented earlier, and some people
have even misguidedly recommended use of ``--playlist`` with untrusted
sources. Do NOT use ``--playlist`` with random internet sources or files
you do not trust!
FIXME: This needs to be clarified and documented thoroughly.
The main problem is that playlists can point to arbitrary network
addresses (including local addresses inside of your LAN), and thus
can't be considered secure. Playlists also can contain entries using
other protocols, such as local files, or (most severely), special
protocols like ``avdevice://``, which are inherently unsafe.
``--priority=<prio>``
(Windows only.)
+11 -9
View File
@@ -98,10 +98,12 @@ Available filters are:
:2: Rotate by 90 degrees counterclockwise.
:3: Rotate by 90 degrees counterclockwise and flip.
``scale[=w:h[:interlaced[:chr-drop[:param[:param2[:noup[:arnd]]]]]]]``
``scale[=w:h:param:param2:chr-drop:noup:arnd``
Scales the image with the software scaler (slow) and performs a YUV<->RGB
colorspace conversion (see also ``--sws``).
All parameters are optional.
``<w>,<h>``
scaled width/height (default: original width/height)
@@ -114,14 +116,6 @@ Available filters are:
:-(n+8): Like -n above, but rounding the dimension to the closest
multiple of 16.
``<chr-drop>``
chroma skipping
:0: Use all available input lines for chroma.
:1: Use only every 2. input line for chroma.
:2: Use only every 4. input line for chroma.
:3: Use only every 8. input line for chroma.
``<param>[:<param2>]`` (see also ``--sws``)
Set some scaling parameters depending on the type of scaler selected
with ``--sws``::
@@ -137,6 +131,14 @@ Available filters are:
--sws=9 (lanczos): filter length (1-10)
``<chr-drop>``
chroma skipping
:0: Use all available input lines for chroma (default).
:1: Use only every 2. input line for chroma.
:2: Use only every 4. input line for chroma.
:3: Use only every 8. input line for chroma.
``<noup>``
Disallow upscaling past the original dimensions.
+18 -2
View File
@@ -82,6 +82,22 @@ Generally, mpv should work with the latest release as well as the git version
of both FFmpeg and Libav. But FFmpeg is preferred, and some mpv features work
with FFmpeg only. See the [wiki article][ffmpeg_vs_libav] about the issue.
Release cycle
-------------
Every few months, a new release is cut off of the master branch. Currently,
these releases are assigned a version number ``0.X.0``. Only the latest release
is maintained. As part of the maintenance process, minor releases are made,
which are assigned ``0.X.Y`` version numbers. Minor releases contain bug fixes
only. They never merge the master branch, and no features are added to it. The
goal of releases is to provide stability and an unchanged base for the sake of
Linux distributions. If you want the newest features, just use the master
branch. (The master branch is stable most of the time, except sometimes, when
it's not.)
Releases other than the latest release are unsupported and unmaintained.
Bug reports
-----------
@@ -95,8 +111,8 @@ For small changes you can just send us pull requests through GitHub. For bigger
changes come and talk to us on IRC before you start working on them. It will
make code review easier for both parties later on.
Contacts
--------
Contact
-------
These forms of contact are meant to ask questions about mpv usage, give
feedback on mpv and discuss it's development.
+1 -1
View File
@@ -1 +1 @@
0.3.9
0.3.10
+11 -8
View File
@@ -18,6 +18,7 @@
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <libavutil/common.h>
@@ -245,8 +246,9 @@ char *mixer_get_volume_restore_data(struct mixer *mixer)
{
if (!mixer->driver[0])
return NULL;
return talloc_asprintf(NULL, "%s:%f:%f:%d", mixer->driver, mixer->vol_l,
mixer->vol_r, mixer->muted_by_us);
return talloc_asprintf(NULL, "%s:%f:%f:%d:%f", mixer->driver, mixer->vol_l,
mixer->vol_r, mixer->muted_by_us,
mixer->opts->softvol_max);
}
static void probe_softvol(struct mixer *mixer)
@@ -307,19 +309,20 @@ static void restore_volume(struct mixer *mixer)
force_mute = opts->mixer_init_mute;
// Set parameters from playback resume.
char *restore_data = mixer->opts->mixer_restore_volume_data;
if (restore && restore_data && restore_data[0]) {
char *data = mixer->opts->mixer_restore_volume_data;
if (restore && data && data[0]) {
char drv[40];
float v_l, v_r;
float v_l, v_r, s;
int m;
if (sscanf(restore_data, "%39[^:]:%f:%f:%d", drv, &v_l, &v_r, &m) == 4) {
if (strcmp(mixer->driver, drv) == 0) {
if (sscanf(data, "%39[^:]:%f:%f:%d:%f", drv, &v_l, &v_r, &m, &s) == 5) {
float diff = fabs(mixer->opts->softvol_max - s);
if (strcmp(mixer->driver, drv) == 0 && diff < 0.01) {
force_vol_l = v_l;
force_vol_r = v_r;
force_mute = !!m;
}
}
talloc_free(restore_data);
talloc_free(mixer->opts->mixer_restore_volume_data);
mixer->opts->mixer_restore_volume_data = NULL;
}
+1 -1
View File
@@ -97,8 +97,8 @@ static const struct format_hack format_hacks[] = {
// for webradios
{"aac", "audio/aacp", 25, 0.5},
{"aac", "audio/aac", 25, 0.5},
{"mp3", "audio/mpeg", 25, 0.5},
// some mp3 files don't detect correctly
{"mp3", "audio/mpeg", 24, 0.5},
{"mp3", NULL, 24, .max_probe = true},
{0}
};
+1 -1
View File
@@ -271,7 +271,7 @@ bool mp_input_is_abort_cmd(struct mp_cmd *cmd)
if (cmd->id == MP_CMD_COMMAND_LIST) {
for (struct mp_cmd *sub = cmd->args[0].v.p; sub; sub = sub->queue_next)
{
if (mp_input_is_abort_cmd(cmd))
if (mp_input_is_abort_cmd(sub))
return true;
}
}
+1
View File
@@ -343,6 +343,7 @@ DIRS = . \
player/timeline \
demux \
misc \
options \
osdep \
osdep/ar \
player \
+2 -2
View File
@@ -110,8 +110,8 @@ static void mp_load_per_file_config(struct MPContext *mpctx)
const char *file = mpctx->filename;
if (snprintf(cfg, sizeof(cfg), "%s.conf", file) >= sizeof(cfg)) {
MP_WARN(mpctx, "Filename is too long, "
"can not load file or directory specific config files\n");
MP_VERBOSE(mpctx, "Filename is too long, "
"can not load file or directory specific config files\n");
return;
}
+1 -1
View File
@@ -138,7 +138,7 @@ void update_window_title(struct MPContext *mpctx, bool force)
{
if (!mpctx->video_out && !mpctx->ao) {
talloc_free(mpctx->last_window_title);
mpctx->last_window_title = false;
mpctx->last_window_title = NULL;
return;
}
char *title = mp_property_expand_string(mpctx, mpctx->opts->wintitle);
+1 -1
View File
@@ -201,7 +201,7 @@ static void build_timeline(struct MPContext *mpctx, struct tl_parts *parts)
part->filename);
}
// Unkown length => use rest of the file. If duration is unknown, make
// Unknown length => use rest of the file. If duration is unknown, make
// something up.
if (part->length < 0)
part->length = (len < 0 ? 1 : len) - part->offset;
+1 -1
View File
@@ -31,7 +31,7 @@
#define MP_ASS_FONT_PLAYRESY 288
#define MP_ASS_RGBA(r, g, b, a) \
(((r) << 24U) | ((g) << 16) | ((b) << 8) | (0xFF - (a)))
(((unsigned)(r) << 24) | ((g) << 16) | ((b) << 8) | (0xFF - (a)))
// m_color argument
#define MP_ASS_COLOR(c) MP_ASS_RGBA((c).r, (c).g, (c).b, (c).a)
+2 -2
View File
@@ -424,10 +424,10 @@ static void mangle_colors(struct sd *sd, struct sub_bitmaps *parts)
int r = (color >> 24u) & 0xff;
int g = (color >> 16u) & 0xff;
int b = (color >> 8u) & 0xff;
int a = color & 0xff;
int a = 0xff - (color & 0xff);
int c[3] = {r, g, b};
mp_map_int_color(vs_rgb2yuv, 8, c);
mp_map_int_color(vs2rgb, 8, c);
sb->libass.color = (c[0] << 24u) | (c[1] << 16) | (c[2] << 8) | a;
sb->libass.color = MP_ASS_RGBA(c[0], c[1], c[2], a);
}
}
-2
View File
@@ -1,8 +1,6 @@
/*
* This file is part of mpv.
*
* Parts based on the MPlayer VA-API patch (see vo_vaapi.c).
*
* mpv is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
+1 -7
View File
@@ -301,12 +301,6 @@ static struct mp_image *get_screenshot(struct priv *p)
return img;
}
static bool redraw_frame(struct priv *p)
{
p->output_surface = p->visible_surface;
return render_to_screen(p, p->output_surfaces[p->output_surface]);
}
static void free_subpicture(struct priv *p, struct vaapi_osd_image *img)
{
if (img->image.image_id != VA_INVALID_ID)
@@ -528,7 +522,7 @@ static int control(struct vo *vo, uint32_t request, void *data)
return get_equalizer(p, eq->name, eq->valueptr);
}
case VOCTRL_REDRAW_FRAME:
redraw_frame(p);
p->output_surface = p->visible_surface;
return true;
case VOCTRL_SCREENSHOT: {
struct voctrl_screenshot_args *args = data;
+6 -3
View File
@@ -655,6 +655,12 @@ static int initialize_vdpau_objects(struct vo *vo)
&vc->rgb_surfaces[n]);
CHECK_VDP_ERROR(vo, "Allocating RGB surface");
}
} else {
if (create_vdp_mixer(vo, vc->vdp_chroma_type) < 0)
return -1;
}
if (vc->black_pixel == VDP_INVALID_HANDLE) {
vdp_st = vdp->output_surface_create(vc->vdp_device, OUTPUT_RGBA_FORMAT,
1, 1, &vc->black_pixel);
CHECK_VDP_ERROR(vo, "Allocating clearing surface");
@@ -663,9 +669,6 @@ static int initialize_vdpau_objects(struct vo *vo)
(const void*[]){data},
(uint32_t[]){4}, NULL);
CHECK_VDP_ERROR(vo, "Initializing clearing surface");
} else {
if (create_vdp_mixer(vo, vc->vdp_chroma_type) < 0)
return -1;
}
forget_frames(vo, false);
+1 -1
View File
@@ -228,8 +228,8 @@ shmemerror:
static void freeMyXImage(struct priv *p, int foo)
{
struct vo *vo = p->vo;
#if HAVE_SHM && HAVE_XEXT
struct vo *vo = p->vo;
if (p->Shmem_Flag) {
XShmDetach(vo->x11->display, &p->Shminfo[foo]);
XDestroyImage(p->myximage[foo]);
+14 -14
View File
@@ -54,10 +54,10 @@ static int lookupkey(int key);
static void hide_cursor(struct vo_wayland_state * wl);
static void show_cursor(struct vo_wayland_state * wl);
static void shedule_resize(struct vo_wayland_state *wl,
uint32_t edges,
int32_t width,
int32_t height);
static void schedule_resize(struct vo_wayland_state *wl,
uint32_t edges,
int32_t width,
int32_t height);
static void vo_wayland_fullscreen (struct vo *vo);
@@ -126,7 +126,7 @@ static void ssurface_handle_configure(void *data,
int32_t height)
{
struct vo_wayland_state *wl = data;
shedule_resize(wl, edges, width, height);
schedule_resize(wl, edges, width, height);
}
static void ssurface_handle_popup_done(void *data,
@@ -529,16 +529,16 @@ static void show_cursor (struct vo_wayland_state *wl)
wl_surface_commit(wl->cursor.surface);
}
static void shedule_resize(struct vo_wayland_state *wl,
uint32_t edges,
int32_t width,
int32_t height)
static void schedule_resize(struct vo_wayland_state *wl,
uint32_t edges,
int32_t width,
int32_t height)
{
int32_t minimum_size = 150;
int32_t x, y;
float temp_aspect = width / (float) MPMAX(height, 1);
MP_DBG(wl, "shedule resize: %dx%d\n", width, height);
MP_DBG(wl, "schedule resize: %dx%d\n", width, height);
if (width < minimum_size)
width = minimum_size;
@@ -778,7 +778,7 @@ static void vo_wayland_ontop (struct vo *vo)
MP_DBG(wl, "going ontop\n");
vo->opts->ontop = 1;
wl_shell_surface_set_toplevel(wl->window.shell_surface);
shedule_resize(wl, 0, wl->window.width, wl->window.height);
schedule_resize(wl, 0, wl->window.width, wl->window.height);
}
static void vo_wayland_border (struct vo *vo)
@@ -814,7 +814,7 @@ static void vo_wayland_fullscreen (struct vo *vo)
MP_DBG(wl, "leaving fullscreen\n");
wl->window.is_fullscreen = false;
wl_shell_surface_set_toplevel(wl->window.shell_surface);
shedule_resize(wl, 0, wl->window.p_width, wl->window.p_height);
schedule_resize(wl, 0, wl->window.p_width, wl->window.p_height);
}
}
@@ -941,7 +941,7 @@ int vo_wayland_control (struct vo *vo, int *events, int request, void *arg)
case VOCTRL_SET_WINDOW_SIZE: {
int *s = arg;
if (!wl->window.is_fullscreen)
shedule_resize(wl, 0, s[0], s[1]);
schedule_resize(wl, 0, s[0], s[1]);
return VO_TRUE;
}
case VOCTRL_SET_CURSOR_VISIBILITY:
@@ -979,7 +979,7 @@ bool vo_wayland_config (struct vo *vo, uint32_t d_width,
if (vo->opts->fullscreen) {
if (wl->window.is_fullscreen)
shedule_resize(wl, 0, wl->window.fs_width, wl->window.fs_height);
schedule_resize(wl, 0, wl->window.fs_width, wl->window.fs_height);
else
vo_wayland_fullscreen(vo);
}
+3 -3
View File
@@ -1054,9 +1054,9 @@ static void vo_x11_set_wm_icon(struct vo_x11_state *x11)
for (int n = 0; n < num_icons; n++) {
*cur++ = icon_w[n];
*cur++ = icon_h[n];
uint32_t *src = icon_data[n];
for (int i = 0; i < icon_h[n] * icon_w[n]; i++)
*cur++ = src[i];
uint8_t *s = icon_data[n];
for (int i = 0; i < icon_h[n] * icon_w[n]; i++, s += 4)
*cur++ = s[0] | (s[1] << 8) | (s[2] << 16) | ((unsigned)s[3] << 24);
}
XChangeProperty(x11->display, x11->window, x11->XA_NET_WM_ICON,
+2 -2
View File
@@ -3,7 +3,7 @@ __cdrom_devices_map__ = {
'cygwin': 'D:',
'darwin': '/dev/disk1',
'freebsd': '/dev/cd0',
'openbsd': '/dev/rcd0r',
'openbsd': '/dev/rcd0c',
'default': '/dev/cdrom'
}
@@ -12,7 +12,7 @@ __dvd_devices_map__ = {
'cygwin': 'D:',
'darwin': '/dev/rdiskN',
'freebsd': '/dev/cd0',
'openbsd': '/dev/rcd0r',
'openbsd': '/dev/rcd0c',
'default': '/dev/dvd'
}
+1 -1
View File
@@ -3,5 +3,5 @@
int main(void)
{
struct v4l2_ext_controls ext;
return ext.controls->value;
return !!&ext.controls->value;
}
+2 -1
View File
@@ -716,6 +716,7 @@ radio_and_tv_features = [
}, {
'name': '--tv-v4l2',
'desc': 'Video4Linux2 TV interface',
'deps': [ 'tv' ],
'func': check_cc(header_name=['sys/time.h', 'linux/videodev2.h'])
}, {
'name': '--libv4l2',
@@ -818,7 +819,7 @@ def configure(ctx):
ctx.load('detections.devices')
if ctx.env.DEST_OS in ('freebsd', 'openbsd'):
ctx.env.CFLAGS += ['-I/usr/local/include']
ctx.env.CFLAGS += ['-I.', '-I..', '-I/usr/local/include']
ctx.env.LINKFLAGS += ['-L/usr/local/lib']
if ctx.env.DEST_OS == 'netbsd':