2010-01-30 23:24:23 +00:00
|
|
|
/*
|
2015-04-13 07:36:54 +00:00
|
|
|
* This file is part of mpv.
|
2010-01-30 23:24:23 +00:00
|
|
|
*
|
player: change license of most core files to LGPL
These files have all in common that they were fully or mostly taken from
mplayer.c. (mplayer.c was a huge file that contains almost all of the
playback core, until it was split into multiple parts.) This was
probably the hardest part to relicense, because so much code was moved
around all the time.
player/audio.c still does not compile. We'll have to redo audio
filtering. Once that is done, we can probably actually provide an
actual LGPL configure switch.
Here is a relatively detailed list of potential issues:
8d190244: author did not reply, parts were made GPL-only in a previous
commit.
7882ea9b: author could not be reached, but the code is gone. wscript
still has --datadir switch, but I don't think this is relevant to
copyright.
f197efd5: unclear origin, but I consider the code gone anyway (replaced
with generic OSD mechanisms).
8337d9c2: author did not reply, but only the option still exists (under
a different name), other code was removed.
d8fd7131: did not reply. Disabled in a previous commit.
05258251: same author as above. Both fields actually seem to have
vanished (even when tracking renames), so no action taken.
d459e644, 268b2c1a: author did not reply, but we reuse only the options
(with different names and slightly or fully different semantics, and
completely different implementations), so I don't think this is relevant
for copyright.
09e742fe, 17c39c4e: same as above.
e8a173de, bff4b3ee: author could not be reached. The commands were
reworked to properties, and the code outside of the TV code were moved
back to the TV code. So I don't think copyright applies to the current
command.c parts (mp_property_tv_color, mp_property_tv_freq,
mp_property_tv_scan). The TV parts remain GPL.
0810e427: could not be reached. Disabled in a previous commit.
43744a2d: unknown author, but this was replaced by dynamic alloc (if the
change is even copyrightable).
116ca0c7: unknown author; reasoning see input.c relicensing commit.
e7e4d1d8: these semantics still exist, but as generic code, and this
code was fully removed.
f1175cd9: the author of the cited patch is unknown, and upon inspection
it turns out that I was only using the idea to pause the player on EOF,
so I claim it's not copyright relevant.
25affdcc: author could not be reached (yet) - but it's only a function
rename, not copyrightable.
5728504c was committed by Arpi (who agreed), but hints that it might be
by a different author. In fact it seems to be mostly this patch:
http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2001-November/002041.html
The author did not respond, but it all seems to have been removed later.
It's a terrible mess though. Arpi reverted the A-V sync code at first,
but left the RTC code for a while. The following commits remove these
changes 100%: 14b35442, 7181a091, 31482783, 614f8475, df58e822.
cehoyos did explicitly not agree to LGPL, but was involved in the
following changes:
c99d8fc8: applied a patch and didn't modify it, the original author
agreed.
40ac0d31: author could not be reached, but all code is gone anyway. The
"af" command has a similar function, but works completely different and
actually reuses a mechanism older than this patch.
54350436: applied a patch, but didn't modify it, except for adding a
German translation, which was removed later.
a2dda036: same situation as above
240b743e: this was made GPL-only in a previous commit
7b25afd7: same as above (for now)
kirijua could not be reached, but was a regular patch contributor:
c2c997fd: video equalizer code move; probably not copyrightable. Is GPL
due to Nick anyway.
be54f481: technically, this became the audio track property later. But
all what is left is the fact that you pass a track ID to it, so consider
the original coypright non-relevant.
2f376d1b: this was rewritten in b7052b43, but for now we can afford to
be careful, so this was marked as GPL only in a previous commit.
43844d09: remaining parts in main.c were reverted in a previous commit.
anders has mostly disagreed with the LGPL relicensing. Does not want
libaf to become LGPL, but made some concessions. In particular, he
granted us permission to relicense 4943e9c52c and 242aa6ebd4. We also
consider some of his changes remaining in mpv not relevant for copyright
(such as 735de602 - we won't remove the this option completely). We will
completely remove his other contributions, including the entire audio
filter chain. For now, this stuff is marked as GPL only. The remaining
question is how much code in player/audio.c (based on the former
mplayer.c and dec_audio.c) is under his copyright. I made claims about
this in a previous commit.
Nick(ols) Kurshev, svn username "nick" and "nickols_k", could not be
reached. He had a lot of changes in early MPlayer. It seems all of that
was removed, at least in mpv. His main work, like VIDIX or libswscale
work, does not exist in mpv anymore, but the changes to mplayer.c and
other core parts still deserve attention:
a4119f6b, fb927549, ad3529b8, e11b23dc, 5f2178be, 93c371d5: removed in
b43d67e0, d1628d12, 24ed01fe, df58e822.
0a83c6ec, 104c125e, 4e067f62, aec5dcc8, b587a3d6, f3de6e6b: DR, VAA, and
"tune" stuff was fully removed later on or replaced with other
mechanisms.
340183b0: screenshots were redone later (the VOCTRL was even removed,
with an independent implementation using the same VOCTRL a few years
later), so not relevant anymore. Basically only the 's' shortcut remains
(but not its implementation).
92c5c274, bffd4007, 555c6766: for now marked as GPL only in a previous
commit.
Might contain some trace amounts of "michael"'s copyright, who agreed to
LGPL only once the core is relicensed. This will still be respected, but
I don't think it matters at this in this case. (Some code touched by him
was merged into mplayer.c, and then disappeared after heavy
refactoring.)
I tried to be as careful and as complete as possible. It can't be
excluded that amends to this will be made later.
This does not make the player LGPL yet.
2017-06-23 13:53:41 +00:00
|
|
|
* mpv is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
2010-01-30 23:24:23 +00:00
|
|
|
*
|
2015-04-13 07:36:54 +00:00
|
|
|
* mpv is distributed in the hope that it will be useful,
|
2010-01-30 23:24:23 +00:00
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
player: change license of most core files to LGPL
These files have all in common that they were fully or mostly taken from
mplayer.c. (mplayer.c was a huge file that contains almost all of the
playback core, until it was split into multiple parts.) This was
probably the hardest part to relicense, because so much code was moved
around all the time.
player/audio.c still does not compile. We'll have to redo audio
filtering. Once that is done, we can probably actually provide an
actual LGPL configure switch.
Here is a relatively detailed list of potential issues:
8d190244: author did not reply, parts were made GPL-only in a previous
commit.
7882ea9b: author could not be reached, but the code is gone. wscript
still has --datadir switch, but I don't think this is relevant to
copyright.
f197efd5: unclear origin, but I consider the code gone anyway (replaced
with generic OSD mechanisms).
8337d9c2: author did not reply, but only the option still exists (under
a different name), other code was removed.
d8fd7131: did not reply. Disabled in a previous commit.
05258251: same author as above. Both fields actually seem to have
vanished (even when tracking renames), so no action taken.
d459e644, 268b2c1a: author did not reply, but we reuse only the options
(with different names and slightly or fully different semantics, and
completely different implementations), so I don't think this is relevant
for copyright.
09e742fe, 17c39c4e: same as above.
e8a173de, bff4b3ee: author could not be reached. The commands were
reworked to properties, and the code outside of the TV code were moved
back to the TV code. So I don't think copyright applies to the current
command.c parts (mp_property_tv_color, mp_property_tv_freq,
mp_property_tv_scan). The TV parts remain GPL.
0810e427: could not be reached. Disabled in a previous commit.
43744a2d: unknown author, but this was replaced by dynamic alloc (if the
change is even copyrightable).
116ca0c7: unknown author; reasoning see input.c relicensing commit.
e7e4d1d8: these semantics still exist, but as generic code, and this
code was fully removed.
f1175cd9: the author of the cited patch is unknown, and upon inspection
it turns out that I was only using the idea to pause the player on EOF,
so I claim it's not copyright relevant.
25affdcc: author could not be reached (yet) - but it's only a function
rename, not copyrightable.
5728504c was committed by Arpi (who agreed), but hints that it might be
by a different author. In fact it seems to be mostly this patch:
http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2001-November/002041.html
The author did not respond, but it all seems to have been removed later.
It's a terrible mess though. Arpi reverted the A-V sync code at first,
but left the RTC code for a while. The following commits remove these
changes 100%: 14b35442, 7181a091, 31482783, 614f8475, df58e822.
cehoyos did explicitly not agree to LGPL, but was involved in the
following changes:
c99d8fc8: applied a patch and didn't modify it, the original author
agreed.
40ac0d31: author could not be reached, but all code is gone anyway. The
"af" command has a similar function, but works completely different and
actually reuses a mechanism older than this patch.
54350436: applied a patch, but didn't modify it, except for adding a
German translation, which was removed later.
a2dda036: same situation as above
240b743e: this was made GPL-only in a previous commit
7b25afd7: same as above (for now)
kirijua could not be reached, but was a regular patch contributor:
c2c997fd: video equalizer code move; probably not copyrightable. Is GPL
due to Nick anyway.
be54f481: technically, this became the audio track property later. But
all what is left is the fact that you pass a track ID to it, so consider
the original coypright non-relevant.
2f376d1b: this was rewritten in b7052b43, but for now we can afford to
be careful, so this was marked as GPL only in a previous commit.
43844d09: remaining parts in main.c were reverted in a previous commit.
anders has mostly disagreed with the LGPL relicensing. Does not want
libaf to become LGPL, but made some concessions. In particular, he
granted us permission to relicense 4943e9c52c and 242aa6ebd4. We also
consider some of his changes remaining in mpv not relevant for copyright
(such as 735de602 - we won't remove the this option completely). We will
completely remove his other contributions, including the entire audio
filter chain. For now, this stuff is marked as GPL only. The remaining
question is how much code in player/audio.c (based on the former
mplayer.c and dec_audio.c) is under his copyright. I made claims about
this in a previous commit.
Nick(ols) Kurshev, svn username "nick" and "nickols_k", could not be
reached. He had a lot of changes in early MPlayer. It seems all of that
was removed, at least in mpv. His main work, like VIDIX or libswscale
work, does not exist in mpv anymore, but the changes to mplayer.c and
other core parts still deserve attention:
a4119f6b, fb927549, ad3529b8, e11b23dc, 5f2178be, 93c371d5: removed in
b43d67e0, d1628d12, 24ed01fe, df58e822.
0a83c6ec, 104c125e, 4e067f62, aec5dcc8, b587a3d6, f3de6e6b: DR, VAA, and
"tune" stuff was fully removed later on or replaced with other
mechanisms.
340183b0: screenshots were redone later (the VOCTRL was even removed,
with an independent implementation using the same VOCTRL a few years
later), so not relevant anymore. Basically only the 's' shortcut remains
(but not its implementation).
92c5c274, bffd4007, 555c6766: for now marked as GPL only in a previous
commit.
Might contain some trace amounts of "michael"'s copyright, who agreed to
LGPL only once the core is relicensed. This will still be respected, but
I don't think it matters at this in this case. (Some code touched by him
was merged into mplayer.c, and then disappeared after heavy
refactoring.)
I tried to be as careful and as complete as possible. It can't be
excluded that amends to this will be made later.
This does not make the player LGPL yet.
2017-06-23 13:53:41 +00:00
|
|
|
* GNU Lesser General Public License for more details.
|
2010-01-30 23:24:23 +00:00
|
|
|
*
|
player: change license of most core files to LGPL
These files have all in common that they were fully or mostly taken from
mplayer.c. (mplayer.c was a huge file that contains almost all of the
playback core, until it was split into multiple parts.) This was
probably the hardest part to relicense, because so much code was moved
around all the time.
player/audio.c still does not compile. We'll have to redo audio
filtering. Once that is done, we can probably actually provide an
actual LGPL configure switch.
Here is a relatively detailed list of potential issues:
8d190244: author did not reply, parts were made GPL-only in a previous
commit.
7882ea9b: author could not be reached, but the code is gone. wscript
still has --datadir switch, but I don't think this is relevant to
copyright.
f197efd5: unclear origin, but I consider the code gone anyway (replaced
with generic OSD mechanisms).
8337d9c2: author did not reply, but only the option still exists (under
a different name), other code was removed.
d8fd7131: did not reply. Disabled in a previous commit.
05258251: same author as above. Both fields actually seem to have
vanished (even when tracking renames), so no action taken.
d459e644, 268b2c1a: author did not reply, but we reuse only the options
(with different names and slightly or fully different semantics, and
completely different implementations), so I don't think this is relevant
for copyright.
09e742fe, 17c39c4e: same as above.
e8a173de, bff4b3ee: author could not be reached. The commands were
reworked to properties, and the code outside of the TV code were moved
back to the TV code. So I don't think copyright applies to the current
command.c parts (mp_property_tv_color, mp_property_tv_freq,
mp_property_tv_scan). The TV parts remain GPL.
0810e427: could not be reached. Disabled in a previous commit.
43744a2d: unknown author, but this was replaced by dynamic alloc (if the
change is even copyrightable).
116ca0c7: unknown author; reasoning see input.c relicensing commit.
e7e4d1d8: these semantics still exist, but as generic code, and this
code was fully removed.
f1175cd9: the author of the cited patch is unknown, and upon inspection
it turns out that I was only using the idea to pause the player on EOF,
so I claim it's not copyright relevant.
25affdcc: author could not be reached (yet) - but it's only a function
rename, not copyrightable.
5728504c was committed by Arpi (who agreed), but hints that it might be
by a different author. In fact it seems to be mostly this patch:
http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2001-November/002041.html
The author did not respond, but it all seems to have been removed later.
It's a terrible mess though. Arpi reverted the A-V sync code at first,
but left the RTC code for a while. The following commits remove these
changes 100%: 14b35442, 7181a091, 31482783, 614f8475, df58e822.
cehoyos did explicitly not agree to LGPL, but was involved in the
following changes:
c99d8fc8: applied a patch and didn't modify it, the original author
agreed.
40ac0d31: author could not be reached, but all code is gone anyway. The
"af" command has a similar function, but works completely different and
actually reuses a mechanism older than this patch.
54350436: applied a patch, but didn't modify it, except for adding a
German translation, which was removed later.
a2dda036: same situation as above
240b743e: this was made GPL-only in a previous commit
7b25afd7: same as above (for now)
kirijua could not be reached, but was a regular patch contributor:
c2c997fd: video equalizer code move; probably not copyrightable. Is GPL
due to Nick anyway.
be54f481: technically, this became the audio track property later. But
all what is left is the fact that you pass a track ID to it, so consider
the original coypright non-relevant.
2f376d1b: this was rewritten in b7052b43, but for now we can afford to
be careful, so this was marked as GPL only in a previous commit.
43844d09: remaining parts in main.c were reverted in a previous commit.
anders has mostly disagreed with the LGPL relicensing. Does not want
libaf to become LGPL, but made some concessions. In particular, he
granted us permission to relicense 4943e9c52c and 242aa6ebd4. We also
consider some of his changes remaining in mpv not relevant for copyright
(such as 735de602 - we won't remove the this option completely). We will
completely remove his other contributions, including the entire audio
filter chain. For now, this stuff is marked as GPL only. The remaining
question is how much code in player/audio.c (based on the former
mplayer.c and dec_audio.c) is under his copyright. I made claims about
this in a previous commit.
Nick(ols) Kurshev, svn username "nick" and "nickols_k", could not be
reached. He had a lot of changes in early MPlayer. It seems all of that
was removed, at least in mpv. His main work, like VIDIX or libswscale
work, does not exist in mpv anymore, but the changes to mplayer.c and
other core parts still deserve attention:
a4119f6b, fb927549, ad3529b8, e11b23dc, 5f2178be, 93c371d5: removed in
b43d67e0, d1628d12, 24ed01fe, df58e822.
0a83c6ec, 104c125e, 4e067f62, aec5dcc8, b587a3d6, f3de6e6b: DR, VAA, and
"tune" stuff was fully removed later on or replaced with other
mechanisms.
340183b0: screenshots were redone later (the VOCTRL was even removed,
with an independent implementation using the same VOCTRL a few years
later), so not relevant anymore. Basically only the 's' shortcut remains
(but not its implementation).
92c5c274, bffd4007, 555c6766: for now marked as GPL only in a previous
commit.
Might contain some trace amounts of "michael"'s copyright, who agreed to
LGPL only once the core is relicensed. This will still be respected, but
I don't think it matters at this in this case. (Some code touched by him
was merged into mplayer.c, and then disappeared after heavy
refactoring.)
I tried to be as careful and as complete as possible. It can't be
excluded that amends to this will be made later.
This does not make the player LGPL yet.
2017-06-23 13:53:41 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with mpv. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
* Parts under HAVE_GPL are licensed under GNU General Public License.
|
2010-01-30 23:24:23 +00:00
|
|
|
*/
|
|
|
|
|
2008-02-22 09:09:46 +00:00
|
|
|
#ifndef MPLAYER_CFG_MPLAYER_H
|
|
|
|
#define MPLAYER_CFG_MPLAYER_H
|
2008-01-01 21:35:58 +00:00
|
|
|
|
2001-03-18 23:32:31 +00:00
|
|
|
/*
|
|
|
|
* config for cfgparser
|
|
|
|
*/
|
|
|
|
|
2008-03-31 03:19:29 +00:00
|
|
|
#include <stddef.h>
|
2011-03-10 21:08:21 +00:00
|
|
|
#include <sys/types.h>
|
2013-07-07 21:54:11 +00:00
|
|
|
#include <limits.h>
|
2016-08-17 20:45:44 +00:00
|
|
|
#include <math.h>
|
2008-03-31 03:19:29 +00:00
|
|
|
|
2011-03-10 21:08:21 +00:00
|
|
|
#include "config.h"
|
2014-06-11 22:34:20 +00:00
|
|
|
|
2015-01-20 14:18:51 +00:00
|
|
|
#ifdef _WIN32
|
2014-06-11 22:34:20 +00:00
|
|
|
#include <windows.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "options.h"
|
2013-12-17 01:02:25 +00:00
|
|
|
#include "m_config.h"
|
|
|
|
#include "m_option.h"
|
2013-12-22 13:33:15 +00:00
|
|
|
#include "common/common.h"
|
2014-04-13 16:51:43 +00:00
|
|
|
#include "stream/stream.h"
|
2012-11-09 00:06:43 +00:00
|
|
|
#include "video/csputils.h"
|
2015-07-07 12:25:37 +00:00
|
|
|
#include "video/hwdec.h"
|
2016-09-05 19:04:55 +00:00
|
|
|
#include "video/image_writer.h"
|
2013-11-24 11:58:06 +00:00
|
|
|
#include "sub/osd.h"
|
2013-06-07 20:57:00 +00:00
|
|
|
#include "audio/decode/dec_audio.h"
|
2013-12-17 00:08:53 +00:00
|
|
|
#include "player/core.h"
|
2013-12-26 18:22:40 +00:00
|
|
|
#include "player/command.h"
|
2014-06-30 10:49:01 +00:00
|
|
|
#include "stream/stream.h"
|
2001-11-09 23:46:06 +00:00
|
|
|
|
2017-09-21 10:48:30 +00:00
|
|
|
#if HAVE_LIBAF
|
|
|
|
#include "audio/filter/af.h"
|
|
|
|
#endif
|
|
|
|
|
2016-10-04 20:07:19 +00:00
|
|
|
#if HAVE_DRM
|
|
|
|
#include "video/out/drm_common.h"
|
|
|
|
#endif
|
|
|
|
|
vo_opengl: refactor into vo_gpu
This is done in several steps:
1. refactor MPGLContext -> struct ra_ctx
2. move GL-specific stuff in vo_opengl into opengl/context.c
3. generalize context creation to support other APIs, and add --gpu-api
4. rename all of the --opengl- options that are no longer opengl-specific
5. move all of the stuff from opengl/* that isn't GL-specific into gpu/
(note: opengl/gl_utils.h became opengl/utils.h)
6. rename vo_opengl to vo_gpu
7. to handle window screenshots, the short-term approach was to just add
it to ra_swchain_fns. Long term (and for vulkan) this has to be moved to
ra itself (and vo_gpu altered to compensate), but this was a stop-gap
measure to prevent this commit from getting too big
8. move ra->fns->flush to ra_gl_ctx instead
9. some other minor changes that I've probably already forgotten
Note: This is one half of a major refactor, the other half of which is
provided by rossy's following commit. This commit enables support for
all linux platforms, while his version enables support for all non-linux
platforms.
Note 2: vo_opengl_cb.c also re-uses ra_gl_ctx so it benefits from the
--opengl- options like --opengl-early-flush, --opengl-finish etc. Should
be a strict superset of the old functionality.
Disclaimer: Since I have no way of compiling mpv on all platforms, some
of these ports were done blindly. Specifically, the blind ports included
context_mali_fbdev.c and context_rpi.c. Since they're both based on
egl_helpers, the port should have gone smoothly without any major
changes required. But if somebody complains about a compile error on
those platforms (assuming anybody actually uses them), you know where to
complain.
2017-09-14 06:04:55 +00:00
|
|
|
#include "video/out/gpu/hwdec.h"
|
2017-02-13 07:01:21 +00:00
|
|
|
|
2013-12-26 18:22:40 +00:00
|
|
|
static void print_version(struct mp_log *log)
|
2013-06-07 20:57:00 +00:00
|
|
|
{
|
2013-12-21 18:45:42 +00:00
|
|
|
mp_print_version(log, true);
|
2013-12-26 18:22:40 +00:00
|
|
|
}
|
|
|
|
|
2014-06-09 21:54:45 +00:00
|
|
|
extern const struct m_sub_options tv_params_conf;
|
2014-06-10 18:46:15 +00:00
|
|
|
extern const struct m_sub_options stream_cdda_conf;
|
2014-06-10 19:44:50 +00:00
|
|
|
extern const struct m_sub_options stream_dvb_conf;
|
2014-07-29 23:15:42 +00:00
|
|
|
extern const struct m_sub_options stream_lavf_conf;
|
2017-06-23 11:03:50 +00:00
|
|
|
extern const struct m_sub_options stream_cache_conf;
|
2014-06-10 20:41:14 +00:00
|
|
|
extern const struct m_sub_options sws_conf;
|
2014-06-10 21:06:42 +00:00
|
|
|
extern const struct m_sub_options demux_rawaudio_conf;
|
|
|
|
extern const struct m_sub_options demux_rawvideo_conf;
|
2014-06-10 23:46:20 +00:00
|
|
|
extern const struct m_sub_options demux_lavf_conf;
|
2015-04-23 17:21:17 +00:00
|
|
|
extern const struct m_sub_options demux_mkv_conf;
|
2014-06-10 23:35:39 +00:00
|
|
|
extern const struct m_sub_options vd_lavc_conf;
|
2014-06-10 23:39:51 +00:00
|
|
|
extern const struct m_sub_options ad_lavc_conf;
|
2014-06-10 23:54:03 +00:00
|
|
|
extern const struct m_sub_options input_config;
|
2014-06-11 00:04:02 +00:00
|
|
|
extern const struct m_sub_options encode_config;
|
2016-09-02 13:59:40 +00:00
|
|
|
extern const struct m_sub_options gl_video_conf;
|
2016-09-02 18:07:25 +00:00
|
|
|
extern const struct m_sub_options ao_alsa_conf;
|
2011-03-10 21:08:21 +00:00
|
|
|
|
2016-09-06 18:09:56 +00:00
|
|
|
extern const struct m_sub_options demux_conf;
|
|
|
|
|
options: use m_config for options instead of m_struct
For some reason, both m_config and m_struct are somewhat similar, except
that m_config is much more powerful. m_config is used for VOs and some
other things, so to unify them. We plan to kick out m_struct and use
m_config for everything. (Unfortunately, m_config is also a bit more
bloated, so this commit isn't all that great, but it will allow to
reduce the option parser mess somewhat.)
This commit also switches all video filters to use the option macros.
One reason is that m_struct and m_config, even though they both use
m_option, store the offsets of the option fields differently (sigh...),
meaning the options defined for either are incompatible. It's easier to
switch everything in one go.
This commit will allow using the -vf option parser for other things,
like VOs and AOs.
2013-07-21 17:33:08 +00:00
|
|
|
extern const struct m_obj_list vf_obj_list;
|
2013-07-22 12:43:58 +00:00
|
|
|
extern const struct m_obj_list af_obj_list;
|
2013-07-21 19:17:48 +00:00
|
|
|
extern const struct m_obj_list vo_obj_list;
|
2013-07-21 19:33:17 +00:00
|
|
|
extern const struct m_obj_list ao_obj_list;
|
2011-03-10 21:08:21 +00:00
|
|
|
|
vo_opengl: refactor into vo_gpu
This is done in several steps:
1. refactor MPGLContext -> struct ra_ctx
2. move GL-specific stuff in vo_opengl into opengl/context.c
3. generalize context creation to support other APIs, and add --gpu-api
4. rename all of the --opengl- options that are no longer opengl-specific
5. move all of the stuff from opengl/* that isn't GL-specific into gpu/
(note: opengl/gl_utils.h became opengl/utils.h)
6. rename vo_opengl to vo_gpu
7. to handle window screenshots, the short-term approach was to just add
it to ra_swchain_fns. Long term (and for vulkan) this has to be moved to
ra itself (and vo_gpu altered to compensate), but this was a stop-gap
measure to prevent this commit from getting too big
8. move ra->fns->flush to ra_gl_ctx instead
9. some other minor changes that I've probably already forgotten
Note: This is one half of a major refactor, the other half of which is
provided by rossy's following commit. This commit enables support for
all linux platforms, while his version enables support for all non-linux
platforms.
Note 2: vo_opengl_cb.c also re-uses ra_gl_ctx so it benefits from the
--opengl- options like --opengl-early-flush, --opengl-finish etc. Should
be a strict superset of the old functionality.
Disclaimer: Since I have no way of compiling mpv on all platforms, some
of these ports were done blindly. Specifically, the blind ports included
context_mali_fbdev.c and context_rpi.c. Since they're both based on
egl_helpers, the port should have gone smoothly without any major
changes required. But if somebody complains about a compile error on
those platforms (assuming anybody actually uses them), you know where to
complain.
2017-09-14 06:04:55 +00:00
|
|
|
extern const struct m_sub_options opengl_conf;
|
2017-01-20 12:38:28 +00:00
|
|
|
extern const struct m_sub_options angle_conf;
|
2017-02-20 19:34:57 +00:00
|
|
|
extern const struct m_sub_options cocoa_conf;
|
2017-01-20 12:38:28 +00:00
|
|
|
|
2015-07-07 12:25:37 +00:00
|
|
|
const struct m_opt_choice_alternatives mp_hwdec_names[] = {
|
|
|
|
{"no", HWDEC_NONE},
|
|
|
|
{"auto", HWDEC_AUTO},
|
2016-09-15 11:50:50 +00:00
|
|
|
{"yes" , HWDEC_AUTO},
|
2016-05-11 14:18:58 +00:00
|
|
|
{"auto-copy", HWDEC_AUTO_COPY},
|
2015-07-07 12:25:37 +00:00
|
|
|
{"vdpau", HWDEC_VDPAU},
|
2016-10-20 14:43:02 +00:00
|
|
|
{"vdpau-copy", HWDEC_VDPAU_COPY},
|
2015-07-11 15:21:39 +00:00
|
|
|
{"videotoolbox",HWDEC_VIDEOTOOLBOX},
|
2016-07-14 18:14:22 +00:00
|
|
|
{"videotoolbox-copy",HWDEC_VIDEOTOOLBOX_COPY},
|
2015-07-07 12:25:37 +00:00
|
|
|
{"vaapi", HWDEC_VAAPI},
|
|
|
|
{"vaapi-copy", HWDEC_VAAPI_COPY},
|
2016-01-30 09:04:34 +00:00
|
|
|
{"dxva2", HWDEC_DXVA2},
|
2015-07-07 12:25:37 +00:00
|
|
|
{"dxva2-copy", HWDEC_DXVA2_COPY},
|
2016-04-27 11:49:47 +00:00
|
|
|
{"d3d11va", HWDEC_D3D11VA},
|
2016-03-18 06:28:29 +00:00
|
|
|
{"d3d11va-copy",HWDEC_D3D11VA_COPY},
|
2015-07-07 12:25:37 +00:00
|
|
|
{"rpi", HWDEC_RPI},
|
2016-09-30 09:35:25 +00:00
|
|
|
{"rpi-copy", HWDEC_RPI_COPY},
|
2016-02-25 22:46:15 +00:00
|
|
|
{"mediacodec", HWDEC_MEDIACODEC},
|
hwdec/opengl: Add support for CUDA and cuvid/NvDecode
Nvidia's "NvDecode" API (up until recently called "cuvid" is a cross
platform, but nvidia proprietary API that exposes their hardware
video decoding capabilities. It is analogous to their DXVA or VDPAU
support on Windows or Linux but without using platform specific API
calls.
As a rule, you'd rather use DXVA or VDPAU as these are more mature
and well supported APIs, but on Linux, VDPAU is falling behind the
hardware capabilities, and there's no sign that nvidia are making
the investments to update it.
Most concretely, this means that there is no VP8/9 or HEVC Main10
support in VDPAU. On the other hand, NvDecode does export vp8/9 and
partial support for HEVC Main10 (more on that below).
ffmpeg already has support in the form of the "cuvid" family of
decoders. Due to the design of the API, it is best exposed as a full
decoder rather than an hwaccel. As such, there are decoders like
h264_cuvid, hevc_cuvid, etc.
These decoders support two output paths today - in both cases, NV12
frames are returned, either in CUDA device memory or regular system
memory.
In the case of the system memory path, the decoders can be used
as-is in mpv today with a command line like:
mpv --vd=lavc:h264_cuvid foobar.mp4
Doing this will take advantage of hardware decoding, but the cost
of the memcpy to system memory adds up, especially for high
resolution video (4K etc).
To avoid that, we need an hwdec that takes advantage of CUDA's
OpenGL interop to copy from device memory into OpenGL textures.
That is what this change implements.
The process is relatively simple as only basic device context
aquisition needs to be done by us - the CUDA buffer pool is managed
by the decoder - thankfully.
The hwdec looks a bit like the vdpau interop one - the hwdec
maintains a single set of plane textures and each output frame
is repeatedly mapped into these textures to pass on.
The frames are always in NV12 format, at least until 10bit output
supports emerges.
The only slightly interesting part of the copying process is that
CUDA works by associating PBOs, so we need to define these for
each of the textures.
TODO Items:
* I need to add a download_image function for screenshots. This
would do the same copy to system memory that the decoder's
system memory output does.
* There are items to investigate on the ffmpeg side. There appears
to be a problem with timestamps for some content.
Final note: I mentioned HEVC Main10. While there is no 10bit output
support, NvDecode can return dithered 8bit NV12 so you can take
advantage of the hardware acceleration.
This particular mode requires compiling ffmpeg with a modified
header (or possibly the CUDA 8 RC) and is not upstream in ffmpeg
yet.
Usage:
You will need to specify vo=opengl and hwdec=cuda.
Note that hwdec=auto will probably not work as it will try to use
vdpau first.
mpv --hwdec=cuda --vo=opengl foobar.mp4
If you want to use filters that require frames in system memory,
just use the decoder directly without the hwdec, as documented
above.
2016-09-04 22:23:55 +00:00
|
|
|
{"cuda", HWDEC_CUDA},
|
2016-09-11 03:12:27 +00:00
|
|
|
{"cuda-copy", HWDEC_CUDA_COPY},
|
2016-10-09 16:18:14 +00:00
|
|
|
{"crystalhd", HWDEC_CRYSTALHD},
|
2015-07-07 12:25:37 +00:00
|
|
|
{0}
|
|
|
|
};
|
|
|
|
|
2016-09-05 19:04:55 +00:00
|
|
|
static const struct m_sub_options screenshot_conf = {
|
|
|
|
.opts = image_writer_opts,
|
|
|
|
.size = sizeof(struct image_writer_opts),
|
|
|
|
.defaults = &image_writer_opts_defaults,
|
|
|
|
};
|
|
|
|
|
2016-09-06 18:09:56 +00:00
|
|
|
#undef OPT_BASE_STRUCT
|
2016-08-30 21:50:57 +00:00
|
|
|
#define OPT_BASE_STRUCT struct mp_vo_opts
|
|
|
|
|
|
|
|
static const m_option_t mp_vo_opt_list[] = {
|
2016-09-02 14:10:55 +00:00
|
|
|
OPT_SETTINGSLIST("vo", video_driver_list, 0, &vo_obj_list, ),
|
2016-08-30 21:50:57 +00:00
|
|
|
OPT_SUBSTRUCT("sws", sws_opts, sws_conf, 0),
|
|
|
|
OPT_FLAG("taskbar-progress", taskbar_progress, 0),
|
2016-12-09 18:22:33 +00:00
|
|
|
OPT_FLAG("snap-window", snap_window, 0),
|
2016-09-19 17:50:41 +00:00
|
|
|
OPT_FLAG("ontop", ontop, 0),
|
2017-02-13 19:08:43 +00:00
|
|
|
OPT_CHOICE_OR_INT("ontop-level", ontop_level, 0, 0, INT_MAX,
|
|
|
|
({"window", -1}, {"system", -2})),
|
2016-09-19 17:50:41 +00:00
|
|
|
OPT_FLAG("border", border, 0),
|
|
|
|
OPT_FLAG("fit-border", fit_border, 0),
|
|
|
|
OPT_FLAG("on-all-workspaces", all_workspaces, 0),
|
2016-08-30 21:50:57 +00:00
|
|
|
OPT_GEOMETRY("geometry", geometry, 0),
|
|
|
|
OPT_SIZE_BOX("autofit", autofit, 0),
|
|
|
|
OPT_SIZE_BOX("autofit-larger", autofit_larger, 0),
|
|
|
|
OPT_SIZE_BOX("autofit-smaller", autofit_smaller, 0),
|
2016-09-19 23:20:22 +00:00
|
|
|
OPT_DOUBLE("window-scale", window_scale, CONF_RANGE, .min = 0.001, .max = 100),
|
2016-08-30 21:50:57 +00:00
|
|
|
OPT_FLAG("force-window-position", force_window_position, 0),
|
|
|
|
OPT_STRING("x11-name", winname, 0),
|
|
|
|
OPT_FLOATRANGE("monitoraspect", force_monitor_aspect, 0, 0.0, 9.0),
|
2017-08-25 14:14:32 +00:00
|
|
|
OPT_FLOATRANGE("monitorpixelaspect", monitor_pixel_aspect, 0, 1.0/32.0, 32.0),
|
2016-09-19 17:50:41 +00:00
|
|
|
OPT_FLAG("fullscreen", fullscreen, 0),
|
2016-08-31 15:09:10 +00:00
|
|
|
OPT_ALIAS("fs", "fullscreen"),
|
2016-09-19 17:50:41 +00:00
|
|
|
OPT_FLAG("native-keyrepeat", native_keyrepeat, 0),
|
options: add a thread-safe way to notify option updates
So far, we had a thread-safe way to read options, but no option update
notification mechanism. Everything was funneled though the main thread's
central mp_option_change_callback() function. For example, if the
panscan options were changed, the function called vo_control() with
VOCTRL_SET_PANSCAN to manually notify the VO thread of updates. This
worked, but's pretty inconvenient. Most of these problems come from the
fact that MPlayer was written as a single-threaded program.
This commit works towards a more flexible mechanism. It adds an update
callback to m_config_cache (the thing that is already used for
thread-safe access of global options).
This alone would still be rather inconvenient, at least in context of
VOs. Add another mechanism on top of it that uses mp_dispatch_queue, and
takes care of some annoying synchronization issues. We extend
mp_dispatch_queue itself to make this easier and slightly more
efficient.
As a first application, use this to reimplement certain VO scaling and
renderer options. The update_opts() function translates these to the
"old" VOCTRLs, though.
An annoyingly subtle issue is that m_config_cache's destructor now
releases pending notifications, and must be released before the
associated dispatch queue. Otherwise, it could happen that option
updates during e.g. VO destruction queue or run stale entries, which is
not expected.
Rather untested. The singly-linked list code in dispatch.c is probably
buggy, and I bet some aspects about synchronization are not entirely
sane.
2017-08-22 13:50:33 +00:00
|
|
|
OPT_FLOATRANGE("panscan", panscan, 0, 0.0, 1.0),
|
|
|
|
OPT_FLOATRANGE("video-zoom", zoom, 0, -20.0, 20.0),
|
|
|
|
OPT_FLOATRANGE("video-pan-x", pan_x, 0, -3.0, 3.0),
|
|
|
|
OPT_FLOATRANGE("video-pan-y", pan_y, 0, -3.0, 3.0),
|
|
|
|
OPT_FLOATRANGE("video-align-x", align_x, 0, -1.0, 1.0),
|
|
|
|
OPT_FLOATRANGE("video-align-y", align_y, 0, -1.0, 1.0),
|
|
|
|
OPT_CHOICE("video-unscaled", unscaled, 0,
|
2016-08-30 21:50:57 +00:00
|
|
|
({"no", 0}, {"yes", 1}, {"downscale-big", 2})),
|
|
|
|
OPT_INT64("wid", WinID, 0),
|
|
|
|
OPT_CHOICE_OR_INT("screen", screen_id, 0, 0, 32,
|
|
|
|
({"default", -1})),
|
|
|
|
OPT_CHOICE_OR_INT("fs-screen", fsscreen_id, 0, 0, 32,
|
|
|
|
({"all", -2}, {"current", -1})),
|
options: add a thread-safe way to notify option updates
So far, we had a thread-safe way to read options, but no option update
notification mechanism. Everything was funneled though the main thread's
central mp_option_change_callback() function. For example, if the
panscan options were changed, the function called vo_control() with
VOCTRL_SET_PANSCAN to manually notify the VO thread of updates. This
worked, but's pretty inconvenient. Most of these problems come from the
fact that MPlayer was written as a single-threaded program.
This commit works towards a more flexible mechanism. It adds an update
callback to m_config_cache (the thing that is already used for
thread-safe access of global options).
This alone would still be rather inconvenient, at least in context of
VOs. Add another mechanism on top of it that uses mp_dispatch_queue, and
takes care of some annoying synchronization issues. We extend
mp_dispatch_queue itself to make this easier and slightly more
efficient.
As a first application, use this to reimplement certain VO scaling and
renderer options. The update_opts() function translates these to the
"old" VOCTRLs, though.
An annoyingly subtle issue is that m_config_cache's destructor now
releases pending notifications, and must be released before the
associated dispatch queue. Otherwise, it could happen that option
updates during e.g. VO destruction queue or run stale entries, which is
not expected.
Rather untested. The singly-linked list code in dispatch.c is probably
buggy, and I bet some aspects about synchronization are not entirely
sane.
2017-08-22 13:50:33 +00:00
|
|
|
OPT_FLAG("keepaspect", keepaspect, 0),
|
2016-08-30 21:50:57 +00:00
|
|
|
OPT_FLAG("keepaspect-window", keepaspect_window, 0),
|
2016-10-25 13:59:13 +00:00
|
|
|
OPT_FLAG("hidpi-window-scale", hidpi_window_scale, 0),
|
2017-07-27 19:28:33 +00:00
|
|
|
OPT_FLAG("native-fs", native_fs, 0),
|
2016-08-30 21:50:57 +00:00
|
|
|
#if HAVE_X11
|
|
|
|
OPT_CHOICE("x11-netwm", x11_netwm, 0,
|
|
|
|
({"auto", 0}, {"no", -1}, {"yes", 1})),
|
|
|
|
OPT_CHOICE("x11-bypass-compositor", x11_bypass_compositor, 0,
|
|
|
|
({"no", 0}, {"yes", 1}, {"fs-only", 2}, {"never", 3})),
|
|
|
|
#endif
|
2017-06-27 11:47:46 +00:00
|
|
|
#if HAVE_WIN32_DESKTOP
|
2016-09-21 14:19:56 +00:00
|
|
|
OPT_STRING("vo-mmcss-profile", mmcss_profile, 0),
|
2016-08-30 21:50:57 +00:00
|
|
|
#endif
|
2016-10-04 20:07:19 +00:00
|
|
|
#if HAVE_DRM
|
|
|
|
OPT_STRING_VALIDATE("drm-connector", drm_connector_spec,
|
|
|
|
0, drm_validate_connector_opt),
|
|
|
|
OPT_INT("drm-mode", drm_mode_id, 0),
|
|
|
|
#endif
|
2017-01-17 13:51:08 +00:00
|
|
|
OPT_STRING_VALIDATE("opengl-hwdec-interop", gl_hwdec_interop, 0,
|
vo_opengl: separate hwdec context and mapping, port it to use ra
This does two separate rather intrusive things:
1. Make the hwdec context (which does initialization, provides the
device to the decoder, and other basic state) and frame mapping
(getting textures from a mp_image) separate. This is more
flexible, and you could map multiple images at once. It will
help removing some hwdec special-casing from video.c.
2. Switch all hwdec API use to ra. Of course all code is still
GL specific, but in theory it would be possible to support other
backends. The most important change is that the hwdec interop
returns ra objects, instead of anything GL specific. This removes
the last dependency on GL-specific header files from video.c.
I'm mixing these separate changes because both requires essentially
rewriting all the glue code, so better do them at once. For the same
reason, this change isn't done incrementally.
hwdec_ios.m is untested, since I can't test it. Apart from superficial
mistakes, this also requires dealing with Apple's texture format
fuckups: they force you to use GL_LUMINANCE[_ALPHA] instead of GL_RED
and GL_RG. We also need to report the correct format via ra_tex to
the renderer, which is done by find_la_variant(). It's unknown whether
this works correctly.
hwdec_rpi.c as well as vo_rpi.c are still broken. (I need to pull my
RPI out of a dusty pile of devices and cables, so, later.)
2017-08-10 15:48:33 +00:00
|
|
|
ra_hwdec_validate_opt),
|
2017-01-17 13:51:08 +00:00
|
|
|
OPT_REPLACED("hwdec-preload", "opengl-hwdec-interop"),
|
2016-08-30 21:50:57 +00:00
|
|
|
{0}
|
|
|
|
};
|
|
|
|
|
2016-09-02 13:50:54 +00:00
|
|
|
const struct m_sub_options vo_sub_opts = {
|
2016-08-30 21:50:57 +00:00
|
|
|
.opts = mp_vo_opt_list,
|
|
|
|
.size = sizeof(struct mp_vo_opts),
|
|
|
|
.defaults = &(const struct mp_vo_opts){
|
|
|
|
.video_driver_list = NULL,
|
|
|
|
.monitor_pixel_aspect = 1.0,
|
|
|
|
.screen_id = -1,
|
|
|
|
.fsscreen_id = -1,
|
|
|
|
.panscan = 0.0f,
|
|
|
|
.keepaspect = 1,
|
|
|
|
.keepaspect_window = 1,
|
2016-10-25 13:59:13 +00:00
|
|
|
.hidpi_window_scale = 1,
|
2017-07-27 19:28:33 +00:00
|
|
|
.native_fs = 1,
|
2016-08-30 21:50:57 +00:00
|
|
|
.taskbar_progress = 1,
|
2016-12-09 18:22:33 +00:00
|
|
|
.snap_window = 0,
|
2016-08-30 21:50:57 +00:00
|
|
|
.border = 1,
|
|
|
|
.fit_border = 1,
|
|
|
|
.WinID = -1,
|
|
|
|
.window_scale = 1.0,
|
|
|
|
.x11_bypass_compositor = 2,
|
|
|
|
.mmcss_profile = "Playback",
|
2017-02-13 19:08:43 +00:00
|
|
|
.ontop_level = -1,
|
2016-08-30 21:50:57 +00:00
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2016-09-08 19:46:48 +00:00
|
|
|
#undef OPT_BASE_STRUCT
|
|
|
|
#define OPT_BASE_STRUCT struct dvd_opts
|
|
|
|
|
|
|
|
const struct m_sub_options dvd_conf = {
|
|
|
|
.opts = (const struct m_option[]){
|
|
|
|
OPT_STRING("dvd-device", device, M_OPT_FILE),
|
|
|
|
OPT_INT("dvd-speed", speed, 0),
|
|
|
|
OPT_INTRANGE("dvd-angle", angle, 0, 1, 99),
|
|
|
|
{0}
|
|
|
|
},
|
|
|
|
.size = sizeof(struct dvd_opts),
|
|
|
|
.defaults = &(const struct dvd_opts){
|
|
|
|
.angle = 1,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2016-08-30 21:50:57 +00:00
|
|
|
#undef OPT_BASE_STRUCT
|
2013-03-01 10:27:59 +00:00
|
|
|
#define OPT_BASE_STRUCT struct MPOpts
|
|
|
|
|
2013-06-07 20:57:00 +00:00
|
|
|
const m_option_t mp_opts[] = {
|
2013-12-21 22:11:12 +00:00
|
|
|
// handled in command line pre-parser (parse_commandline.c)
|
2017-06-23 18:51:12 +00:00
|
|
|
{"v", &m_option_type_dummy_flag, M_OPT_FIXED | CONF_NOCFG | M_OPT_NOPROP,
|
|
|
|
.offset = -1},
|
2014-08-13 21:24:46 +00:00
|
|
|
{"playlist", CONF_TYPE_STRING, CONF_NOCFG | M_OPT_MIN | M_OPT_FIXED | M_OPT_FILE,
|
2014-06-13 00:16:47 +00:00
|
|
|
.min = 1, .offset = -1},
|
2017-06-23 18:51:12 +00:00
|
|
|
{"{", &m_option_type_dummy_flag, CONF_NOCFG | M_OPT_FIXED | M_OPT_NOPROP,
|
|
|
|
.offset = -1},
|
|
|
|
{"}", &m_option_type_dummy_flag, CONF_NOCFG | M_OPT_FIXED | M_OPT_NOPROP,
|
|
|
|
.offset = -1},
|
2013-07-27 19:26:00 +00:00
|
|
|
|
|
|
|
// handled in m_config.c
|
2016-09-24 18:41:07 +00:00
|
|
|
{ "include", CONF_TYPE_STRING, M_OPT_FILE, .offset = -1},
|
|
|
|
{ "profile", CONF_TYPE_STRING_LIST, 0, .offset = -1},
|
2017-06-15 13:22:06 +00:00
|
|
|
{ "show-profile", CONF_TYPE_STRING, CONF_NOCFG | M_OPT_FIXED | M_OPT_NOPROP,
|
|
|
|
.offset = -1},
|
2017-06-23 18:51:12 +00:00
|
|
|
{ "list-options", &m_option_type_dummy_flag, CONF_NOCFG | M_OPT_FIXED |
|
|
|
|
M_OPT_NOPROP, .offset = -1},
|
2016-09-01 18:00:43 +00:00
|
|
|
OPT_FLAG("list-properties", property_print_help,
|
|
|
|
CONF_NOCFG | M_OPT_FIXED | M_OPT_NOPROP),
|
2017-06-23 18:23:51 +00:00
|
|
|
{ "help", CONF_TYPE_STRING, CONF_NOCFG | M_OPT_FIXED | M_OPT_NOPROP |
|
|
|
|
M_OPT_OPTIONAL_PARAM, .offset = -1},
|
|
|
|
{ "h", CONF_TYPE_STRING, CONF_NOCFG | M_OPT_FIXED | M_OPT_NOPROP |
|
|
|
|
M_OPT_OPTIONAL_PARAM, .offset = -1},
|
options: make mess to allow setting profile option with libmpv
Certain options, such as --profile, --help, and many others require
special-handling, because they don't fit conceptually into the option
and property model. They don't store data, but perform actions.
This caused the situation that profiles could not be set when using
libmpv in encoding mode (although you should probably not used libmpv in
encoding mode). Using libmpv always ends up in calling
m_config_set_option_raw_direct(), while --profile was handled in
m_config_parse_option().
Solve this by moving the handling of this from m_config_parse_option()
to m_config_set_option_raw_direct(). Actually we just stuff most of this
into m_config_handle_special_options(), which is only called by the
aforementioned function.
Strangely this also means that the --h/--help option declarations need
to be changed, because they used OPT_PRINT, and now the option "parser"
is always invoked before the special code. Thus, make them a string.
Them being OPT_PRINT was apparently always redundant. (The other option
declarations are moved for cosmetic purposes only.)
The most weird change is how co->data==NULL is handled. We now allow
passing down involved options to m_config_set_option_raw_direct(). The
thing is that we don't want them to error if the command line parser is
using them (with special handling done there), while all other code
paths should raise an error. We try using M_SETOPT_FROM_CMDLINE to
distinguish these cases.
Note that normal libmpv users are supposed to use the "apply-profile"
command instead.
This probably contains a bunch of bugs, which you should report.
2017-06-15 13:15:05 +00:00
|
|
|
|
|
|
|
OPT_PRINT("list-protocols", stream_print_proto_list),
|
|
|
|
OPT_PRINT("version", print_version),
|
|
|
|
OPT_PRINT("V", print_version),
|
2013-07-27 19:26:00 +00:00
|
|
|
|
2016-09-23 19:24:50 +00:00
|
|
|
OPT_CHOICE("player-operation-mode", operation_mode,
|
|
|
|
M_OPT_FIXED | M_OPT_PRE_PARSE | M_OPT_NOPROP,
|
|
|
|
({"cplayer", 0}, {"pseudo-gui", 1})),
|
|
|
|
|
2015-02-16 19:04:05 +00:00
|
|
|
OPT_FLAG("shuffle", shuffle, 0),
|
2013-08-18 22:50:39 +00:00
|
|
|
|
2011-03-10 21:08:21 +00:00
|
|
|
// ------------------------- common options --------------------
|
2016-09-19 17:50:41 +00:00
|
|
|
OPT_FLAG("quiet", quiet, 0),
|
2017-06-23 18:42:20 +00:00
|
|
|
OPT_FLAG("really-quiet", msg_really_quiet, CONF_PRE_PARSE | UPDATE_TERM),
|
2016-09-19 17:54:54 +00:00
|
|
|
OPT_FLAG("terminal", use_terminal, CONF_PRE_PARSE | UPDATE_TERM),
|
2016-09-19 17:51:26 +00:00
|
|
|
OPT_GENERAL(char**, "msg-level", msg_levels, CONF_PRE_PARSE | UPDATE_TERM,
|
2016-09-01 18:00:43 +00:00
|
|
|
.type = &m_option_type_msglevels),
|
2016-09-19 17:51:26 +00:00
|
|
|
OPT_STRING("dump-stats", dump_stats, UPDATE_TERM | CONF_PRE_PARSE),
|
|
|
|
OPT_FLAG("msg-color", msg_color, CONF_PRE_PARSE | UPDATE_TERM),
|
|
|
|
OPT_STRING("log-file", log_file, CONF_PRE_PARSE | M_OPT_FILE | UPDATE_TERM),
|
|
|
|
OPT_FLAG("msg-module", msg_module, UPDATE_TERM),
|
|
|
|
OPT_FLAG("msg-time", msg_time, UPDATE_TERM),
|
2017-08-03 07:44:36 +00:00
|
|
|
#if HAVE_WIN32_DESKTOP
|
2016-09-28 11:47:30 +00:00
|
|
|
OPT_CHOICE("priority", w32_priority, UPDATE_PRIORITY,
|
2014-06-11 22:34:20 +00:00
|
|
|
({"no", 0},
|
2014-06-22 05:57:27 +00:00
|
|
|
{"realtime", REALTIME_PRIORITY_CLASS},
|
|
|
|
{"high", HIGH_PRIORITY_CLASS},
|
2014-06-11 22:34:20 +00:00
|
|
|
{"abovenormal", ABOVE_NORMAL_PRIORITY_CLASS},
|
|
|
|
{"normal", NORMAL_PRIORITY_CLASS},
|
|
|
|
{"belownormal", BELOW_NORMAL_PRIORITY_CLASS},
|
|
|
|
{"idle", IDLE_PRIORITY_CLASS})),
|
2011-03-10 21:08:21 +00:00
|
|
|
#endif
|
2016-09-21 14:19:56 +00:00
|
|
|
OPT_FLAG("config", load_config, M_OPT_FIXED | CONF_PRE_PARSE),
|
2014-02-25 20:04:04 +00:00
|
|
|
OPT_STRING("config-dir", force_configdir,
|
2017-03-05 21:47:36 +00:00
|
|
|
M_OPT_FIXED | CONF_NOCFG | CONF_PRE_PARSE | M_OPT_FILE),
|
2016-09-17 15:04:13 +00:00
|
|
|
OPT_STRINGLIST("reset-on-next-file", reset_options, 0),
|
2011-03-10 21:08:21 +00:00
|
|
|
|
2014-12-13 16:27:47 +00:00
|
|
|
#if HAVE_LUA || HAVE_JAVASCRIPT
|
2017-07-02 14:26:41 +00:00
|
|
|
OPT_PATHLIST("scripts", script_files, M_OPT_FIXED),
|
|
|
|
OPT_CLI_ALIAS("script", "scripts-append"),
|
2016-09-17 15:04:13 +00:00
|
|
|
OPT_KEYVALUELIST("script-opts", script_opts, 0),
|
2014-12-13 16:27:47 +00:00
|
|
|
OPT_FLAG("load-scripts", auto_load_scripts, 0),
|
|
|
|
#endif
|
|
|
|
#if HAVE_LUA
|
2016-09-19 22:59:54 +00:00
|
|
|
OPT_FLAG("osc", lua_load_osc, UPDATE_BUILTIN_SCRIPTS),
|
|
|
|
OPT_FLAG("ytdl", lua_load_ytdl, UPDATE_BUILTIN_SCRIPTS),
|
2016-09-19 17:50:41 +00:00
|
|
|
OPT_STRING("ytdl-format", lua_ytdl_format, 0),
|
|
|
|
OPT_KEYVALUELIST("ytdl-raw-options", lua_ytdl_raw_options, 0),
|
Add initial Lua scripting support
This is preliminary. There are still tons of issues, and any aspect
of scripting may change in the future. I decided to merge this
(preliminary) work now because it makes it easier to develop it, not
because it's done. lua.rst is clear enough about it (plus some
sarcasm).
This requires linking to Lua. Lua has no official pkg-config file, but
there are distribution specific .pc files, all with different names.
Adding a non-pkg-config based configure test was considered, but we'd
rather not.
One major complication is that libquvi links against Lua too, and if
the Lua version is different from mpv's, you will get a crash as soon
as libquvi uses Lua. (libquvi by design always runs when a file is
opened.) I would consider this the problem of distros and whoever
builds mpv, but to make things easier for users, we add a terrible
runtime test to the configure script, which probes whether libquvi
will crash. This is disabled when cross-compiling, but in that case
we hope the user knows what he is doing.
2013-09-25 22:41:14 +00:00
|
|
|
#endif
|
|
|
|
|
2011-03-10 21:08:21 +00:00
|
|
|
// ------------------------- stream options --------------------
|
|
|
|
|
2016-09-06 18:09:56 +00:00
|
|
|
OPT_SUBSTRUCT("", stream_cache, stream_cache_conf, 0),
|
2013-11-28 18:28:38 +00:00
|
|
|
|
2014-07-14 23:49:02 +00:00
|
|
|
#if HAVE_DVDREAD || HAVE_DVDNAV
|
2016-09-08 19:46:48 +00:00
|
|
|
OPT_SUBSTRUCT("", dvd_opts, dvd_conf, 0),
|
2014-07-14 23:49:02 +00:00
|
|
|
#endif /* HAVE_DVDREAD */
|
player: more option/property consistency fixes
Some properties had a different type from their equivalent options (such
as mute, volume, deinterlace, edition). This wasn't really sane, as raw
option values should be always within their bounds. On the other hand,
these properties use a different type to reflect runtime limits (such as
range of available editions), or simply to improve the "UI" (you don't
want to cycle throuhg the completely useless "auto" value when cycling
the "mute" property).
Handle this by making them always return the option type, but also
allowing them to provide a "constricted" type, which is used for UI
purposes. All M_PROPERTY_GET_CONSTRICTED_TYPE changes are related to
this.
One consequence is that you can set the volume property to arbitrary
high values just like with the --volume option, but using the "add"
command it still restricts it to the --volume-max range.
Also deprecate --chapter, as it is grossly incompatible to the chapter
property. We pondered renaming it to --chapters, or introducing a more
powerful --range option, but concluded that --start --end is actually
enough.
These changes appear to take care of the last gross property/option
incompatibilities, although there might still be a few lurking.
2016-09-18 14:06:12 +00:00
|
|
|
OPT_INTPAIR("chapter", chapterrange, 0, .deprecation_message = "instead of "
|
|
|
|
"--chapter=A-B use --start=#A --end=#B+1"),
|
2013-08-21 16:41:59 +00:00
|
|
|
OPT_CHOICE_OR_INT("edition", edition_id, 0, 0, 8190,
|
|
|
|
({"auto", -1})),
|
2014-07-14 23:49:02 +00:00
|
|
|
#if HAVE_LIBBLURAY
|
2014-08-13 21:24:46 +00:00
|
|
|
OPT_STRING("bluray-device", bluray_device, M_OPT_FILE),
|
2014-07-14 23:49:02 +00:00
|
|
|
#endif /* HAVE_LIBBLURAY */
|
2011-03-10 21:08:21 +00:00
|
|
|
|
|
|
|
// ------------------------- demuxer options --------------------
|
|
|
|
|
2017-06-23 13:17:01 +00:00
|
|
|
#if HAVE_GPL
|
|
|
|
// Possibly GPL due to d8fd7131bbcde029ab41799fd3162050b43f6848.
|
2016-09-21 14:19:56 +00:00
|
|
|
OPT_CHOICE_OR_INT("frames", play_frames, 0, 0, INT_MAX, ({"all", -1})),
|
2017-06-23 13:17:01 +00:00
|
|
|
#endif
|
2011-03-10 21:08:21 +00:00
|
|
|
|
2012-11-15 17:49:17 +00:00
|
|
|
OPT_REL_TIME("start", play_start, 0),
|
|
|
|
OPT_REL_TIME("end", play_end, 0),
|
|
|
|
OPT_REL_TIME("length", play_length, 0),
|
2011-03-10 21:08:21 +00:00
|
|
|
|
2015-11-16 21:47:17 +00:00
|
|
|
OPT_FLAG("rebase-start-time", rebase_start_time, 0),
|
|
|
|
|
2014-11-17 23:09:42 +00:00
|
|
|
OPT_TIME("ab-loop-a", ab_loop[0], 0, .min = MP_NOPTS_VALUE),
|
|
|
|
OPT_TIME("ab-loop-b", ab_loop[1], 0, .min = MP_NOPTS_VALUE),
|
|
|
|
|
2016-09-18 11:38:45 +00:00
|
|
|
OPT_CHOICE_OR_INT("playlist-start", playlist_pos, 0, 0, INT_MAX,
|
|
|
|
({"auto", -1}, {"no", -1})),
|
2015-08-22 20:08:17 +00:00
|
|
|
|
2016-09-21 14:19:56 +00:00
|
|
|
OPT_FLAG("pause", pause, 0),
|
2015-02-27 17:31:24 +00:00
|
|
|
OPT_CHOICE("keep-open", keep_open, 0,
|
2014-12-12 22:45:16 +00:00
|
|
|
({"no", 0},
|
2015-02-27 17:31:24 +00:00
|
|
|
{"yes", 1},
|
2014-12-12 22:45:16 +00:00
|
|
|
{"always", 2})),
|
2017-03-27 09:34:02 +00:00
|
|
|
OPT_FLAG("keep-open-pause", keep_open_pause, 0),
|
2016-08-17 20:45:44 +00:00
|
|
|
OPT_DOUBLE("image-display-duration", image_display_duration,
|
|
|
|
M_OPT_RANGE, 0, INFINITY),
|
2012-02-08 23:36:53 +00:00
|
|
|
|
2014-06-13 00:05:37 +00:00
|
|
|
OPT_CHOICE("index", index_mode, 0, ({"default", 1}, {"recreate", 0})),
|
2011-03-10 21:08:21 +00:00
|
|
|
|
|
|
|
// select audio/video/subtitle stream
|
2015-05-22 19:00:24 +00:00
|
|
|
OPT_TRACKCHOICE("aid", stream_id[0][STREAM_AUDIO]),
|
|
|
|
OPT_TRACKCHOICE("vid", stream_id[0][STREAM_VIDEO]),
|
|
|
|
OPT_TRACKCHOICE("sid", stream_id[0][STREAM_SUB]),
|
|
|
|
OPT_TRACKCHOICE("secondary-sid", stream_id[1][STREAM_SUB]),
|
|
|
|
OPT_TRACKCHOICE("ff-aid", stream_id_ff[STREAM_AUDIO]),
|
|
|
|
OPT_TRACKCHOICE("ff-vid", stream_id_ff[STREAM_VIDEO]),
|
|
|
|
OPT_TRACKCHOICE("ff-sid", stream_id_ff[STREAM_SUB]),
|
2016-08-31 15:09:10 +00:00
|
|
|
OPT_ALIAS("sub", "sid"),
|
|
|
|
OPT_ALIAS("video", "vid"),
|
|
|
|
OPT_ALIAS("audio", "aid"),
|
2015-05-22 19:00:24 +00:00
|
|
|
OPT_STRINGLIST("alang", stream_lang[STREAM_AUDIO], 0),
|
|
|
|
OPT_STRINGLIST("slang", stream_lang[STREAM_SUB], 0),
|
2017-08-12 21:43:05 +00:00
|
|
|
OPT_FLAG("track-auto-selection", stream_auto_sel, 0),
|
2011-03-10 21:08:21 +00:00
|
|
|
|
2017-08-12 21:08:48 +00:00
|
|
|
OPT_STRING("lavfi-complex", lavfi_complex, UPDATE_LAVFI_COMPLEX),
|
2016-02-05 22:19:56 +00:00
|
|
|
|
2012-12-10 17:52:06 +00:00
|
|
|
OPT_CHOICE("audio-display", audio_display, 0,
|
|
|
|
({"no", 0}, {"attachment", 1})),
|
|
|
|
|
2015-07-13 11:34:58 +00:00
|
|
|
OPT_CHOICE_OR_INT("hls-bitrate", hls_bitrate, 0, 0, INT_MAX,
|
|
|
|
({"no", -1}, {"min", 0}, {"max", INT_MAX})),
|
2014-09-01 21:47:27 +00:00
|
|
|
|
2017-06-26 19:07:00 +00:00
|
|
|
OPT_STRINGLIST("display-tags", display_tags, 0),
|
2014-12-29 21:51:18 +00:00
|
|
|
|
2013-07-16 11:28:28 +00:00
|
|
|
#if HAVE_CDDA
|
2014-06-10 18:46:15 +00:00
|
|
|
OPT_SUBSTRUCT("cdda", stream_cdda_opts, stream_cdda_conf, 0),
|
2014-08-13 21:24:46 +00:00
|
|
|
OPT_STRING("cdrom-device", cdrom_device, M_OPT_FILE),
|
2011-03-10 21:08:21 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
// demuxer.c - select audio/sub file/demuxer
|
2017-07-02 14:26:41 +00:00
|
|
|
OPT_PATHLIST("audio-files", audio_files, 0),
|
|
|
|
OPT_CLI_ALIAS("audio-file", "audio-files-append"),
|
2011-03-10 21:08:21 +00:00
|
|
|
OPT_STRING("demuxer", demuxer_name, 0),
|
|
|
|
OPT_STRING("audio-demuxer", audio_demuxer_name, 0),
|
|
|
|
OPT_STRING("sub-demuxer", sub_demuxer_name, 0),
|
2014-07-16 20:40:21 +00:00
|
|
|
OPT_FLAG("demuxer-thread", demuxer_thread, 0),
|
2017-01-18 18:02:50 +00:00
|
|
|
OPT_FLAG("prefetch-playlist", prefetch_open, 0),
|
player: redo how stream caching and pausing on low cache works
Add the --cache-secs option, which literally overrides the value of
--demuxer-readahead-secs if the stream cache is active. The default
value is very high (10 seconds), which means it can act as network
cache.
Remove the old behavior of trying to pause once the byte cache runs
low. Instead, do something similar wit the demuxer cache. The nice
thing is that we can guess how many seconds of video it has cached,
and we can make better decisions. But for now, apply a relatively
naive heuristic: if the cache is below 0.5 secs, pause, and wait
until at least 2 secs are available.
Note that due to timestamp reordering, the estimated cached duration
of video might be inaccurate, depending on the file format. If the
file format has DTS, it's easy, otherwise the duration will seemingly
jump back and forth.
2014-08-26 23:13:20 +00:00
|
|
|
OPT_FLAG("cache-pause", cache_pausing, 0),
|
|
|
|
|
2014-06-10 20:48:11 +00:00
|
|
|
OPT_DOUBLE("mf-fps", mf_fps, 0),
|
|
|
|
OPT_STRING("mf-type", mf_type, 0),
|
2013-07-16 11:28:28 +00:00
|
|
|
#if HAVE_TV
|
2014-06-09 21:54:45 +00:00
|
|
|
OPT_SUBSTRUCT("tv", tv_params, tv_params_conf, 0),
|
2013-07-16 11:28:28 +00:00
|
|
|
#endif /* HAVE_TV */
|
|
|
|
#if HAVE_DVBIN
|
2014-06-10 19:44:50 +00:00
|
|
|
OPT_SUBSTRUCT("dvbin", stream_dvb_opts, stream_dvb_conf, 0),
|
2011-03-10 21:08:21 +00:00
|
|
|
#endif
|
2014-07-29 23:15:42 +00:00
|
|
|
OPT_SUBSTRUCT("", stream_lavf_opts, stream_lavf_conf, 0),
|
2011-03-10 21:08:21 +00:00
|
|
|
|
|
|
|
// ------------------------- a-v sync options --------------------
|
|
|
|
|
|
|
|
// set A-V sync correction speed (0=disables it):
|
2013-03-08 01:08:02 +00:00
|
|
|
OPT_FLOATRANGE("mc", default_max_pts_correction, 0, 0, 100),
|
2011-03-10 21:08:21 +00:00
|
|
|
|
|
|
|
// force video/audio rate:
|
2015-02-03 22:04:19 +00:00
|
|
|
OPT_DOUBLE("fps", force_fps, CONF_MIN, .min = 0),
|
2016-09-22 18:56:34 +00:00
|
|
|
OPT_INTRANGE("audio-samplerate", force_srate, UPDATE_AUDIO, 1000, 16*48000),
|
|
|
|
OPT_CHANNELS("audio-channels", audio_output_channels, UPDATE_AUDIO),
|
|
|
|
OPT_AUDIOFORMAT("audio-format", audio_output_format, UPDATE_AUDIO),
|
|
|
|
OPT_FLAG("audio-normalize-downmix", audio_normalize, UPDATE_AUDIO),
|
2016-09-21 14:19:56 +00:00
|
|
|
OPT_DOUBLE("speed", playback_speed, M_OPT_RANGE, .min = 0.01, .max = 100.0),
|
2011-03-10 21:08:21 +00:00
|
|
|
|
2014-10-02 00:58:52 +00:00
|
|
|
OPT_FLAG("audio-pitch-correction", pitch_correction, 0),
|
|
|
|
|
2011-03-10 21:08:21 +00:00
|
|
|
// set a-v distance
|
2016-08-04 09:27:15 +00:00
|
|
|
OPT_FLOAT("audio-delay", audio_delay, 0),
|
2011-03-10 21:08:21 +00:00
|
|
|
|
|
|
|
// ------------------------- codec/vfilter options --------------------
|
|
|
|
|
2017-09-21 10:48:30 +00:00
|
|
|
#if HAVE_LIBAF
|
2016-09-02 14:10:55 +00:00
|
|
|
OPT_SETTINGSLIST("af-defaults", af_defs, 0, &af_obj_list, ),
|
2017-06-26 19:07:00 +00:00
|
|
|
OPT_SETTINGSLIST("af", af_settings, 0, &af_obj_list, ),
|
2017-09-21 10:48:30 +00:00
|
|
|
#endif
|
2016-09-02 14:10:55 +00:00
|
|
|
OPT_SETTINGSLIST("vf-defaults", vf_defs, 0, &vf_obj_list, ),
|
2017-06-26 19:07:00 +00:00
|
|
|
OPT_SETTINGSLIST("vf", vf_settings, 0, &vf_obj_list, ),
|
core: redo how codecs are mapped, remove codecs.conf
Use codec names instead of FourCCs to identify codecs. Rewrite how
codecs are selected and initialized. Now each decoder exports a list
of decoders (and the codec it supports) via add_decoders(). The order
matters, and the first decoder for a given decoder is preferred over
the other decoders. E.g. all ad_mpg123 decoders are preferred over
ad_lavc, because it comes first in the mpcodecs_ad_drivers array.
Likewise, decoders within ad_lavc that are enumerated first by
libavcodec (using av_codec_next()) are preferred. (This is actually
critical to select h264 software decoding by default instead of vdpau.
libavcodec and ffmpeg/avconv use the same method to select decoders by
default, so we hope this is sane.)
The codec names follow libavcodec's codec names as defined by
AVCodecDescriptor.name (see libavcodec/codec_desc.c). Some decoders
have names different from the canonical codec name. The AVCodecDescriptor
API is relatively new, so we need a compatibility layer for older
libavcodec versions for codec names that are referenced internally,
and which are different from the decoder name. (Add a configure check
for that, because checking versions is getting way too messy.)
demux/codec_tags.c is generated from the former codecs.conf (minus
"special" decoders like vdpau, and excluding the mappings that are the
same as the mappings libavformat's exported RIFF tables). It contains
all the mappings from FourCCs to codec name. This is needed for
demux_mkv, demux_mpg, demux_avi and demux_asf. demux_lavf will set the
codec as determined by libavformat, while the other demuxers have to do
this on their own, using the mp_set_audio/video_codec_from_tag()
functions. Note that the sh_audio/video->format members don't uniquely
identify the codec anymore, and sh->codec takes over this role.
Replace the --ac/--vc/--afm/--vfm with new --vd/--ad options, which
provide cover the functionality of the removed switched.
Note: there's no CODECS_FLAG_FLIP flag anymore. This means some obscure
container/video combinations (e.g. the sample Film_200_zygo_pro.mov)
are played flipped. ffplay/avplay doesn't handle this properly either,
so we don't care and blame ffmeg/libav instead.
2013-02-09 14:15:19 +00:00
|
|
|
|
2017-08-22 17:08:07 +00:00
|
|
|
OPT_FLAG("deinterlace", deinterlace, UPDATE_DEINT),
|
core: add --deinterlace option, restore it with resume functionality
The --deinterlace option does on playback start what the "deinterlace"
property normally does at runtime. You could do this before by using the
--vf option or by messing with the vo_vdpau default options, but this
new option is supposed to be a "foolproof" way.
The main motivation for adding this is so that the deinterlace property
can be restored when using the video resume functionality
(quit_watch_later command).
Implementation-wise, this is a bit messy. The video chain is rebuilt in
mpcodecs_reconfig_vo(), where we don't have access to MPContext, so the
usual mechanism for enabling deinterlacing can't be used. Further,
mpcodecs_reconfig_vo() is called by the video decoder, which doesn't
have access to MPContext either. Moving this call to mplayer.c isn't
currently possible either (see below). So we just do this before frames
are filtered, which potentially means setting the deinterlacing every
frame. Fortunately, setting deinterlacing is stable and idempotent, so
this is hopefully not a problem. We also add a counter that is
incremented on each reconfig to reduce the amount of additional work per
frame to nearly zero.
The reason we can't move mpcodecs_reconfig_vo() to mplayer.c is because
of hardware decoding: we need to check whether the video chain works
before we decide that we can use hardware decoding. Changing it so that
this can be decided in advance without building a filter chain sounds
like a good idea and should be done, but we aren't there yet.
2013-09-13 16:06:08 +00:00
|
|
|
|
core: redo how codecs are mapped, remove codecs.conf
Use codec names instead of FourCCs to identify codecs. Rewrite how
codecs are selected and initialized. Now each decoder exports a list
of decoders (and the codec it supports) via add_decoders(). The order
matters, and the first decoder for a given decoder is preferred over
the other decoders. E.g. all ad_mpg123 decoders are preferred over
ad_lavc, because it comes first in the mpcodecs_ad_drivers array.
Likewise, decoders within ad_lavc that are enumerated first by
libavcodec (using av_codec_next()) are preferred. (This is actually
critical to select h264 software decoding by default instead of vdpau.
libavcodec and ffmpeg/avconv use the same method to select decoders by
default, so we hope this is sane.)
The codec names follow libavcodec's codec names as defined by
AVCodecDescriptor.name (see libavcodec/codec_desc.c). Some decoders
have names different from the canonical codec name. The AVCodecDescriptor
API is relatively new, so we need a compatibility layer for older
libavcodec versions for codec names that are referenced internally,
and which are different from the decoder name. (Add a configure check
for that, because checking versions is getting way too messy.)
demux/codec_tags.c is generated from the former codecs.conf (minus
"special" decoders like vdpau, and excluding the mappings that are the
same as the mappings libavformat's exported RIFF tables). It contains
all the mappings from FourCCs to codec name. This is needed for
demux_mkv, demux_mpg, demux_avi and demux_asf. demux_lavf will set the
codec as determined by libavformat, while the other demuxers have to do
this on their own, using the mp_set_audio/video_codec_from_tag()
functions. Note that the sh_audio/video->format members don't uniquely
identify the codec anymore, and sh->codec takes over this role.
Replace the --ac/--vc/--afm/--vfm with new --vd/--ad options, which
provide cover the functionality of the removed switched.
Note: there's no CODECS_FLAG_FLIP flag anymore. This means some obscure
container/video combinations (e.g. the sample Film_200_zygo_pro.mov)
are played flipped. ffplay/avplay doesn't handle this properly either,
so we don't care and blame ffmeg/libav instead.
2013-02-09 14:15:19 +00:00
|
|
|
OPT_STRING("ad", audio_decoders, 0),
|
|
|
|
OPT_STRING("vd", video_decoders, 0),
|
2013-06-28 13:26:30 +00:00
|
|
|
|
2015-06-05 20:35:43 +00:00
|
|
|
OPT_STRING("audio-spdif", audio_spdif, 0),
|
|
|
|
|
2016-12-23 17:12:54 +00:00
|
|
|
OPT_FLAG("ad-spdif-dtshd", dtshd, 0,
|
|
|
|
.deprecation_message = "use --audio-spdif instead"),
|
2011-03-10 21:08:21 +00:00
|
|
|
|
2015-07-07 12:25:37 +00:00
|
|
|
OPT_CHOICE_C("hwdec", hwdec_api, 0, mp_hwdec_names),
|
2013-05-03 19:00:05 +00:00
|
|
|
OPT_STRING("hwdec-codecs", hwdec_codecs, 0),
|
2015-11-17 20:07:41 +00:00
|
|
|
#if HAVE_VIDEOTOOLBOX_HWACCEL
|
2017-03-02 10:33:05 +00:00
|
|
|
OPT_IMAGEFORMAT("videotoolbox-format", videotoolbox_format, 0, .min = -1),
|
2015-11-17 20:07:41 +00:00
|
|
|
#endif
|
2012-12-11 17:16:42 +00:00
|
|
|
|
2013-09-26 14:53:17 +00:00
|
|
|
// -1 means auto aspect (prefer container size until aspect change)
|
|
|
|
// 0 means square pixels
|
2016-09-20 13:34:31 +00:00
|
|
|
OPT_ASPECT("video-aspect", movie_aspect, UPDATE_IMGPAR, -1.0, 10.0),
|
|
|
|
OPT_CHOICE("video-aspect-method", aspect_method, UPDATE_IMGPAR,
|
2017-07-21 18:19:39 +00:00
|
|
|
({"bitstream", 1}, {"container", 2})),
|
2011-03-10 21:08:21 +00:00
|
|
|
|
2014-06-10 23:35:39 +00:00
|
|
|
OPT_SUBSTRUCT("vd-lavc", vd_lavc_params, vd_lavc_conf, 0),
|
2014-06-10 23:39:51 +00:00
|
|
|
OPT_SUBSTRUCT("ad-lavc", ad_lavc_params, ad_lavc_conf, 0),
|
2013-06-28 12:56:52 +00:00
|
|
|
|
2016-09-06 18:09:56 +00:00
|
|
|
OPT_SUBSTRUCT("", demux_lavf, demux_lavf_conf, 0),
|
2014-06-10 21:06:42 +00:00
|
|
|
OPT_SUBSTRUCT("demuxer-rawaudio", demux_rawaudio, demux_rawaudio_conf, 0),
|
|
|
|
OPT_SUBSTRUCT("demuxer-rawvideo", demux_rawvideo, demux_rawvideo_conf, 0),
|
2015-04-23 17:21:17 +00:00
|
|
|
OPT_SUBSTRUCT("demuxer-mkv", demux_mkv, demux_mkv_conf, 0),
|
2013-06-28 13:26:30 +00:00
|
|
|
|
2011-03-10 21:08:21 +00:00
|
|
|
// ------------------------- subtitles options --------------------
|
|
|
|
|
2017-07-02 14:26:41 +00:00
|
|
|
OPT_PATHLIST("sub-files", sub_name, 0),
|
|
|
|
OPT_CLI_ALIAS("sub-file", "sub-files-append"),
|
|
|
|
OPT_PATHLIST("sub-file-paths", sub_paths, 0),
|
|
|
|
OPT_PATHLIST("audio-file-paths", audiofile_paths, 0),
|
|
|
|
OPT_PATHLIST("external-files", external_files, 0),
|
2017-07-29 14:40:08 +00:00
|
|
|
OPT_CLI_ALIAS("external-file", "external-files-append"),
|
2016-08-10 20:22:50 +00:00
|
|
|
OPT_FLAG("autoload-files", autoload_files, 0),
|
2016-09-19 18:16:44 +00:00
|
|
|
OPT_FLOAT("sub-delay", sub_delay, UPDATE_OSD),
|
|
|
|
OPT_FLOAT("sub-fps", sub_fps, UPDATE_OSD),
|
|
|
|
OPT_FLOAT("sub-speed", sub_speed, UPDATE_OSD),
|
|
|
|
OPT_FLAG("sub-visibility", sub_visibility, UPDATE_OSD),
|
|
|
|
OPT_FLAG("sub-forced-only", forced_subs_only, UPDATE_OSD),
|
|
|
|
OPT_FLAG("stretch-dvd-subs", stretch_dvd_subs, UPDATE_OSD),
|
|
|
|
OPT_FLAG("stretch-image-subs-to-screen", stretch_image_subs, UPDATE_OSD),
|
2017-01-23 14:55:09 +00:00
|
|
|
OPT_FLAG("image-subs-video-resolution", image_subs_video_res, UPDATE_OSD),
|
2014-06-13 00:06:03 +00:00
|
|
|
OPT_FLAG("sub-fix-timing", sub_fix_timing, 0),
|
2014-05-04 08:31:24 +00:00
|
|
|
OPT_CHOICE("sub-auto", sub_auto, 0,
|
|
|
|
({"no", -1}, {"exact", 0}, {"fuzzy", 1}, {"all", 2})),
|
2015-02-02 20:23:12 +00:00
|
|
|
OPT_CHOICE("audio-file-auto", audiofile_auto, 0,
|
|
|
|
({"no", -1}, {"exact", 0}, {"fuzzy", 1}, {"all", 2})),
|
2016-09-19 18:16:44 +00:00
|
|
|
OPT_INTRANGE("sub-pos", sub_pos, UPDATE_OSD, 0, 100),
|
|
|
|
OPT_FLOATRANGE("sub-gauss", sub_gauss, UPDATE_OSD, 0.0, 3.0),
|
|
|
|
OPT_FLAG("sub-gray", sub_gray, UPDATE_OSD),
|
2014-04-24 15:42:54 +00:00
|
|
|
OPT_FLAG("sub-ass", ass_enabled, 0),
|
2017-02-02 09:53:19 +00:00
|
|
|
OPT_FLAG("sub-filter-sdh", sub_filter_SDH, 0),
|
|
|
|
OPT_FLAG("sub-filter-sdh-harder", sub_filter_SDH_harder, 0),
|
2016-09-19 18:16:44 +00:00
|
|
|
OPT_FLOATRANGE("sub-scale", sub_scale, UPDATE_OSD, 0, 100),
|
2016-10-02 15:08:14 +00:00
|
|
|
OPT_FLOATRANGE("sub-ass-line-spacing", ass_line_spacing, UPDATE_OSD, -1000, 1000),
|
2016-09-19 18:16:44 +00:00
|
|
|
OPT_FLAG("sub-use-margins", sub_use_margins, UPDATE_OSD),
|
2016-10-02 15:08:14 +00:00
|
|
|
OPT_FLAG("sub-ass-force-margins", ass_use_margins, UPDATE_OSD),
|
|
|
|
OPT_FLAG("sub-ass-vsfilter-aspect-compat", ass_vsfilter_aspect_compat, UPDATE_OSD),
|
|
|
|
OPT_CHOICE("sub-ass-vsfilter-color-compat", ass_vsfilter_color_compat, UPDATE_OSD,
|
2013-07-14 23:48:25 +00:00
|
|
|
({"no", 0}, {"basic", 1}, {"full", 2}, {"force-601", 3})),
|
2016-10-02 15:08:14 +00:00
|
|
|
OPT_FLAG("sub-ass-vsfilter-blur-compat", ass_vsfilter_blur_compat, UPDATE_OSD),
|
2013-02-08 20:09:18 +00:00
|
|
|
OPT_FLAG("embeddedfonts", use_embedded_fonts, 0),
|
2016-10-02 15:08:14 +00:00
|
|
|
OPT_STRINGLIST("sub-ass-force-style", ass_force_style_list, UPDATE_OSD),
|
|
|
|
OPT_STRING("sub-ass-styles", ass_styles_file, M_OPT_FILE),
|
|
|
|
OPT_CHOICE("sub-ass-hinting", ass_hinting, UPDATE_OSD,
|
2013-09-25 19:40:35 +00:00
|
|
|
({"none", 0}, {"light", 1}, {"normal", 2}, {"native", 3})),
|
2016-10-02 15:08:14 +00:00
|
|
|
OPT_CHOICE("sub-ass-shaper", ass_shaper, UPDATE_OSD,
|
2013-09-25 19:42:29 +00:00
|
|
|
({"simple", 0}, {"complex", 1})),
|
2017-02-01 12:19:09 +00:00
|
|
|
OPT_FLAG("sub-ass-justify", ass_justify, 0),
|
2017-06-06 20:16:29 +00:00
|
|
|
OPT_CHOICE("sub-ass-override", ass_style_override, UPDATE_OSD,
|
|
|
|
({"no", 0}, {"yes", 1}, {"force", 3}, {"scale", 4}, {"strip", 5})),
|
2016-09-19 18:16:44 +00:00
|
|
|
OPT_FLAG("sub-scale-by-window", sub_scale_by_window, UPDATE_OSD),
|
|
|
|
OPT_FLAG("sub-scale-with-window", sub_scale_with_window, UPDATE_OSD),
|
2016-10-02 15:08:14 +00:00
|
|
|
OPT_FLAG("sub-ass-scale-with-window", ass_scale_with_window, UPDATE_OSD),
|
2016-09-19 18:16:44 +00:00
|
|
|
OPT_FLAG("osd-bar", osd_bar_visible, UPDATE_OSD),
|
|
|
|
OPT_FLOATRANGE("osd-bar-align-x", osd_bar_align_x, UPDATE_OSD, -1.0, +1.0),
|
|
|
|
OPT_FLOATRANGE("osd-bar-align-y", osd_bar_align_y, UPDATE_OSD, -1.0, +1.0),
|
|
|
|
OPT_FLOATRANGE("osd-bar-w", osd_bar_w, UPDATE_OSD, 1, 100),
|
|
|
|
OPT_FLOATRANGE("osd-bar-h", osd_bar_h, UPDATE_OSD, 0.1, 50),
|
options: drop --opt:subopt option names
For all suboptions, "flat" options were available by separating the
parent option and the sub option with ":", e.g. "--rawvideo:w=123". Drop
this syntax and use "-" as separator. This means even suboptions are
available as normal options now, e.g. "--rawvideo-w=123". The old syntax
doesn't work anymore.
Note that this is completely separate from actual suboptions. For
example, "-rawvideo w=123:h=123" still works. (Not that this syntax is
worth supporting, but it's needed anyway, for for other things like vf
and vo suboptions.)
As a consequence of this change, we also have to add new "no-" prefixed
options for flag suboptions, so that "--no-input-default-bindings"
works. ("--input-no-default-bindings" also works as a consequence of
allowing "-input no-default-bindings" - they are handled by the same
underlying option.)
For --input, always use the full syntax in the manpage. There exist
suboptions other than --input (like --tv, --rawvideo, etc.), but since
they might be handled differently in the future, don't touch these yet.
M_OPT_PREFIXED becomes the default, so remove it. As a minor unrelated
cleanup, get rid of M_OPT_MERGE too and use the OPT_SUBSTRUCT() macro in
some places.
Unrelated: remove the duplicated --tv:buffersize option, fix a typo in
changes.rst.
2013-02-21 21:10:21 +00:00
|
|
|
OPT_SUBSTRUCT("osd", osd_style, osd_style_conf, 0),
|
2016-10-02 15:08:14 +00:00
|
|
|
OPT_SUBSTRUCT("sub", sub_style, sub_style_conf, 0),
|
2014-08-14 21:59:35 +00:00
|
|
|
OPT_FLAG("sub-clear-on-seek", sub_clear_on_seek, 0),
|
2016-09-03 15:05:11 +00:00
|
|
|
OPT_INTRANGE("teletext-page", teletext_page, 0, 1, 999),
|
2001-11-02 00:32:35 +00:00
|
|
|
|
2002-05-04 21:26:45 +00:00
|
|
|
//---------------------- libao/libvo options ------------------------
|
2016-09-02 14:10:55 +00:00
|
|
|
OPT_SETTINGSLIST("ao", audio_driver_list, 0, &ao_obj_list, ),
|
2016-10-05 14:45:04 +00:00
|
|
|
OPT_STRING("audio-device", audio_device, UPDATE_AUDIO),
|
2016-10-04 05:20:46 +00:00
|
|
|
OPT_FLAG("audio-exclusive", audio_exclusive, UPDATE_AUDIO),
|
2016-10-05 14:45:04 +00:00
|
|
|
OPT_STRING("audio-client-name", audio_client_name, UPDATE_AUDIO),
|
2015-10-05 16:53:02 +00:00
|
|
|
OPT_FLAG("audio-fallback-to-null", ao_null_fallback, 0),
|
2016-08-09 14:22:06 +00:00
|
|
|
OPT_FLAG("audio-stream-silence", audio_stream_silence, 0),
|
2016-08-09 14:26:44 +00:00
|
|
|
OPT_FLOATRANGE("audio-wait-open", audio_wait_open, 0, 0, 60),
|
2015-05-08 19:47:39 +00:00
|
|
|
OPT_CHOICE("force-window", force_vo, 0,
|
|
|
|
({"no", 0}, {"yes", 1}, {"immediate", 2})),
|
2010-05-03 23:34:38 +00:00
|
|
|
|
softvol, ao_pulse: prefer ao_pulse volume control by default
--softvol is enabled by default. For most audio outputs, this is a good
thing, as they have either their own (bad) soft volume implementation,
or control the system mixer. With ao_pulse, the situation is a bit
different: it supports per-application volume (i.e. volume control is
not really global). More importantly, ao_pulse uses a rather large audio
buffer, and changing the volume with mplayer's volume filter has a large
delay. With the native ao_pulse volume control, it's instant, because
PulseAudio's audio filtering happens at a later stage in its processing
pipeline (inaccessible for mplayer).
This means native volume control should really be allowed for ao_pulse,
while it's the reverse for other audio outputs. Make --softvol a choice
option, and add a new "auto" choice. This is default and will use PA's
volume control with ao_pulse, and mplayer's volume filter otherwise
(i.e. the old softvol behavior).
2012-09-18 19:41:22 +00:00
|
|
|
OPT_CHOICE("softvol", softvol, 0,
|
|
|
|
({"no", SOFTVOL_NO},
|
|
|
|
{"yes", SOFTVOL_YES},
|
2016-09-01 18:00:43 +00:00
|
|
|
{"auto", SOFTVOL_AUTO}),
|
2016-11-19 00:17:12 +00:00
|
|
|
.deprecation_message = "softvol is always active, and behaves "
|
|
|
|
"as if --softvol=yes is always set"),
|
2016-07-09 16:31:18 +00:00
|
|
|
OPT_FLOATRANGE("volume-max", softvol_max, 0, 100, 1000),
|
|
|
|
// values <0 for volume and mute are legacy and ignored
|
2017-04-26 19:45:50 +00:00
|
|
|
OPT_FLOATRANGE("volume", softvol_volume, UPDATE_VOL, -1, 1000),
|
|
|
|
OPT_CHOICE("mute", softvol_mute, UPDATE_VOL,
|
2016-09-18 09:58:24 +00:00
|
|
|
({"no", 0},
|
|
|
|
{"auto", 0},
|
2015-02-27 17:31:24 +00:00
|
|
|
{"yes", 1})),
|
2017-04-26 22:21:17 +00:00
|
|
|
OPT_CHOICE("replaygain", rgain_mode, UPDATE_VOL,
|
|
|
|
({"no", 0},
|
|
|
|
{"track", 1},
|
|
|
|
{"album", 2})),
|
2017-04-26 19:45:50 +00:00
|
|
|
OPT_FLOATRANGE("replaygain-preamp", rgain_preamp, UPDATE_VOL, -15, 15),
|
|
|
|
OPT_FLAG("replaygain-clip", rgain_clip, UPDATE_VOL),
|
|
|
|
OPT_FLOATRANGE("replaygain-fallback", rgain_fallback, UPDATE_VOL, -200, 60),
|
2015-02-27 17:31:24 +00:00
|
|
|
OPT_CHOICE("gapless-audio", gapless_audio, 0,
|
2014-06-08 21:54:05 +00:00
|
|
|
({"no", 0},
|
2015-02-27 17:31:24 +00:00
|
|
|
{"yes", 1},
|
2014-06-08 21:54:05 +00:00
|
|
|
{"weak", -1})),
|
2014-09-04 21:48:27 +00:00
|
|
|
OPT_DOUBLE("audio-buffer", audio_buffer, M_OPT_MIN | M_OPT_MAX,
|
|
|
|
.min = 0, .max = 10),
|
2016-07-17 17:21:28 +00:00
|
|
|
OPT_FLOATRANGE("balance", balance, 0, -1, 1),
|
2010-05-03 23:34:38 +00:00
|
|
|
|
2013-03-04 16:40:21 +00:00
|
|
|
OPT_STRING("title", wintitle, 0),
|
2015-05-22 18:03:14 +00:00
|
|
|
OPT_STRING("force-media-title", media_title, 0),
|
2010-05-03 23:34:38 +00:00
|
|
|
// set aspect ratio of monitor - useful for 16:9 TV-out
|
2013-03-04 16:40:21 +00:00
|
|
|
OPT_FLAG("force-rgba-osd-rendering", force_rgba_osd, 0),
|
2016-09-20 13:34:31 +00:00
|
|
|
OPT_CHOICE_OR_INT("video-rotate", video_rotate, UPDATE_IMGPAR, 0, 359,
|
2014-05-24 12:08:39 +00:00
|
|
|
({"no", -1})),
|
2016-09-20 13:34:31 +00:00
|
|
|
OPT_CHOICE_C("video-stereo-mode", video_stereo_mode, UPDATE_IMGPAR,
|
|
|
|
mp_stereo3d_names),
|
2010-05-03 23:34:38 +00:00
|
|
|
|
2013-09-08 00:07:20 +00:00
|
|
|
OPT_CHOICE_OR_INT("cursor-autohide", cursor_autohide_delay, 0,
|
2012-11-15 17:59:41 +00:00
|
|
|
0, 30000, ({"no", -1}, {"always", -2})),
|
2013-09-08 00:46:19 +00:00
|
|
|
OPT_FLAG("cursor-autohide-fs-only", cursor_autohide_fs, 0),
|
2016-10-02 10:33:34 +00:00
|
|
|
OPT_FLAG("stop-screensaver", stop_screensaver, UPDATE_SCREENSAVER),
|
2009-07-06 23:26:13 +00:00
|
|
|
|
video: redo video equalizer option handling
I really wouldn't care much about this, but some parts of the core code
are under HAVE_GPL, so there's some need to get rid of it. Simply turn
the video equalizer from its current fine-grained handling with vf/vo
fallbacks into global options. This makes updating them much simpler.
This removes any possibility of applying video equalizers in filters,
which affects vf_scale, and the previously removed vf_eq. Not a big
loss, since the preferred VOs have this builtin.
Remove video equalizer handling from vo_direct3d, vo_sdl, vo_vaapi, and
vo_xv. I'm not going to waste my time on these legacy VOs.
vo.eq_opts_cache exists _only_ to send a VOCTRL_SET_EQUALIZER, which
exists _only_ to trigger a redraw. This seems silly, but for now I feel
like this is less of a pain. The rest of the equalizer using code is
self-updating.
See commit 96b906a51d5 for how some video equalizer code was GPL only.
Some command line option names and ranges can probably be traced back to
a GPL only committer, but we don't consider these copyrightable.
2017-08-22 15:01:35 +00:00
|
|
|
OPT_SUBSTRUCT("", video_equalizer, mp_csp_equalizer_conf, 0),
|
2002-05-04 21:26:45 +00:00
|
|
|
|
2015-02-16 19:04:05 +00:00
|
|
|
OPT_FLAG("use-filedir-conf", use_filedir_conf, 0),
|
2012-09-17 06:45:35 +00:00
|
|
|
OPT_CHOICE("osd-level", osd_level, 0,
|
|
|
|
({"0", 0}, {"1", 1}, {"2", 2}, {"3", 3})),
|
2010-05-07 19:02:47 +00:00
|
|
|
OPT_INTRANGE("osd-duration", osd_duration, 0, 0, 3600000),
|
2013-02-08 20:09:18 +00:00
|
|
|
OPT_FLAG("osd-fractions", osd_fractions, 0),
|
2016-09-19 18:16:44 +00:00
|
|
|
OPT_FLOATRANGE("osd-scale", osd_scale, UPDATE_OSD, 0, 100),
|
2013-12-10 18:58:57 +00:00
|
|
|
OPT_FLAG("osd-scale-by-window", osd_scale_by_window, 0),
|
2002-05-04 21:26:45 +00:00
|
|
|
|
2013-03-08 01:08:02 +00:00
|
|
|
OPT_DOUBLE("sstep", step_sec, CONF_MIN, 0),
|
2002-05-04 21:26:45 +00:00
|
|
|
|
2012-09-17 06:38:19 +00:00
|
|
|
OPT_CHOICE("framedrop", frame_dropping, 0,
|
|
|
|
({"no", 0},
|
video: add VO framedropping mode
This mostly uses the same idea as with vo_vdpau.c, but much simplified.
On X11, it tries to get the display framerate with XF86VM, and limits
the frequency of new video frames against it. Note that this is an old
extension, and is confirmed not to work correctly with multi-monitor
setups. But we're using it because it was already around (it is also
used by vo_vdpau).
This attempts to predict the next vsync event by using the time of the
last frame and the display FPS. Even if that goes completely wrong,
the results are still relatively good.
On other systems, or if the X11 code doesn't return a display FPS, a
framerate of 1000 is assumed. This is infinite for all practical
purposes, and means that only frames which are definitely too late are
dropped. This probably has worse results, but is still useful.
"--framedrop=yes" is basically replaced with "--framedrop=decoder". The
old framedropping mode is kept around, and should perhaps be improved.
Dropping on the decoder level is still useful if decoding itself is too
slow.
2014-08-15 21:33:33 +00:00
|
|
|
{"vo", 1},
|
|
|
|
{"decoder", 2},
|
|
|
|
{"decoder+vo", 3})),
|
2002-05-04 21:26:45 +00:00
|
|
|
|
2014-08-15 22:05:02 +00:00
|
|
|
OPT_DOUBLE("display-fps", frame_drop_fps, M_OPT_MIN, .min = 0),
|
|
|
|
|
2015-02-03 22:04:19 +00:00
|
|
|
OPT_FLAG("untimed", untimed, 0),
|
2002-05-04 21:26:45 +00:00
|
|
|
|
2015-02-03 22:04:19 +00:00
|
|
|
OPT_STRING("stream-dump", stream_dump, M_OPT_FILE),
|
2013-05-11 20:19:33 +00:00
|
|
|
|
2014-10-28 18:51:44 +00:00
|
|
|
OPT_FLAG("stop-playback-on-init-failure", stop_playback_on_init_failure, 0),
|
|
|
|
|
2017-04-10 19:19:13 +00:00
|
|
|
OPT_CHOICE_OR_INT("loop-playlist", loop_times, 0, 1, 10000,
|
2015-02-12 21:41:45 +00:00
|
|
|
({"no", 1},
|
2015-05-22 12:56:26 +00:00
|
|
|
{"inf", -1}, {"yes", -1},
|
2015-02-12 21:41:45 +00:00
|
|
|
{"force", -2})),
|
2015-02-27 17:31:24 +00:00
|
|
|
OPT_CHOICE_OR_INT("loop-file", loop_file, 0, 0, 10000,
|
|
|
|
({"no", 0},
|
|
|
|
{"yes", -1},
|
2014-09-22 20:56:00 +00:00
|
|
|
{"inf", -1})),
|
2017-08-14 18:01:08 +00:00
|
|
|
OPT_ALIAS("loop", "loop-file"),
|
2012-08-05 21:34:28 +00:00
|
|
|
|
core: add playback resume feature (manual/opt-in)
A "watch later" command is now mapped to Shift+Q. This quits the player
and stores the playback state in a config file in ~/.mpv/watch_later/.
When calling the player with the same file again, playback is resumed
at that time position.
It's also possible to make mpv save playback state always on quit with
the --save-position-on-quit option. Likewise, resuming can be disabled
with the --no-resume-playback option.
This also attempts to save some playback parameters, like fullscreen
state or track selection. This will unconditionally override config
settings and command line options (which is probably not what you would
expect, but in general nobody will really care about this). Some things
are not backed up, because that would cause various problems. Additional
subtitle files, video filters, etc. are not stored because that would be
too hard and fragile. Volume/mute state are not stored because it would
mess up if the system mixer is used, or if the system mixer was
readjusted in the meantime.
Basically, the tradeoff between perfect state restoration and
complexity/fragility makes it not worth to attempt to implement
it perfectly, even if the result is a little bit inconsistent.
2013-05-05 17:37:29 +00:00
|
|
|
OPT_FLAG("resume-playback", position_resume, 0),
|
|
|
|
OPT_FLAG("save-position-on-quit", position_save_on_quit, 0),
|
2014-06-01 16:25:21 +00:00
|
|
|
OPT_FLAG("write-filename-in-watch-later-config", write_filename_in_watch_later_config, 0),
|
2014-12-12 22:57:49 +00:00
|
|
|
OPT_FLAG("ignore-path-in-watch-later-config", ignore_path_in_watch_later_config, 0),
|
2017-03-05 21:47:36 +00:00
|
|
|
OPT_STRING("watch-later-directory", watch_later_directory, M_OPT_FILE),
|
core: add playback resume feature (manual/opt-in)
A "watch later" command is now mapped to Shift+Q. This quits the player
and stores the playback state in a config file in ~/.mpv/watch_later/.
When calling the player with the same file again, playback is resumed
at that time position.
It's also possible to make mpv save playback state always on quit with
the --save-position-on-quit option. Likewise, resuming can be disabled
with the --no-resume-playback option.
This also attempts to save some playback parameters, like fullscreen
state or track selection. This will unconditionally override config
settings and command line options (which is probably not what you would
expect, but in general nobody will really care about this). Some things
are not backed up, because that would cause various problems. Additional
subtitle files, video filters, etc. are not stored because that would be
too hard and fragile. Volume/mute state are not stored because it would
mess up if the system mixer is used, or if the system mixer was
readjusted in the meantime.
Basically, the tradeoff between perfect state restoration and
complexity/fragility makes it not worth to attempt to implement
it perfectly, even if the result is a little bit inconsistent.
2013-05-05 17:37:29 +00:00
|
|
|
|
2013-02-08 20:09:18 +00:00
|
|
|
OPT_FLAG("ordered-chapters", ordered_chapters, 0),
|
2014-08-13 21:24:46 +00:00
|
|
|
OPT_STRING("ordered-chapters-files", ordered_chapters_files, M_OPT_FILE),
|
2010-11-26 14:56:05 +00:00
|
|
|
OPT_INTRANGE("chapter-merge-threshold", chapter_merge_threshold, 0, 0, 10000),
|
2009-04-07 23:37:27 +00:00
|
|
|
|
2013-08-14 01:25:50 +00:00
|
|
|
OPT_DOUBLE("chapter-seek-threshold", chapter_seek_threshold, 0),
|
|
|
|
|
2014-11-02 15:47:23 +00:00
|
|
|
OPT_STRING("chapters-file", chapter_file, M_OPT_FILE),
|
|
|
|
|
2013-08-25 18:40:21 +00:00
|
|
|
OPT_FLAG("load-unsafe-playlists", load_unsafe_playlists, 0),
|
2013-11-19 21:36:33 +00:00
|
|
|
OPT_FLAG("merge-files", merge_files, 0),
|
2013-08-25 18:40:21 +00:00
|
|
|
|
2010-05-03 23:34:38 +00:00
|
|
|
// a-v sync stuff:
|
2013-07-26 00:06:58 +00:00
|
|
|
OPT_FLAG("correct-pts", correct_pts, 0),
|
2013-02-08 20:09:18 +00:00
|
|
|
OPT_FLAG("initial-audio-sync", initial_audio_sync, 0),
|
2015-08-10 16:43:25 +00:00
|
|
|
OPT_CHOICE("video-sync", video_sync, 0,
|
|
|
|
({"audio", VS_DEFAULT},
|
|
|
|
{"display-resample", VS_DISP_RESAMPLE},
|
|
|
|
{"display-resample-vdrop", VS_DISP_RESAMPLE_VDROP},
|
|
|
|
{"display-resample-desync", VS_DISP_RESAMPLE_NONE},
|
2015-10-27 19:56:46 +00:00
|
|
|
{"display-adrop", VS_DISP_ADROP},
|
2015-08-10 16:43:25 +00:00
|
|
|
{"display-vdrop", VS_DISP_VDROP},
|
|
|
|
{"display-desync", VS_DISP_NONE},
|
|
|
|
{"desync", VS_NONE})),
|
|
|
|
OPT_DOUBLE("video-sync-max-video-change", sync_max_video_change,
|
|
|
|
M_OPT_MIN, .min = 0),
|
|
|
|
OPT_DOUBLE("video-sync-max-audio-change", sync_max_audio_change,
|
|
|
|
M_OPT_MIN | M_OPT_MAX, .min = 0, .max = 1),
|
2015-10-27 19:56:46 +00:00
|
|
|
OPT_DOUBLE("video-sync-adrop-size", sync_audio_drop_size,
|
|
|
|
M_OPT_MIN | M_OPT_MAX, .min = 0, .max = 1),
|
2010-12-14 23:09:47 +00:00
|
|
|
OPT_CHOICE("hr-seek", hr_seek, 0,
|
2015-04-15 12:26:54 +00:00
|
|
|
({"no", -1}, {"absolute", 0}, {"yes", 1}, {"always", 1})),
|
2015-04-20 18:03:05 +00:00
|
|
|
OPT_FLOAT("hr-seek-demuxer-offset", hr_seek_demuxer_offset, 0),
|
2014-05-07 20:01:17 +00:00
|
|
|
OPT_FLAG("hr-seek-framedrop", hr_seek_framedrop, 0),
|
2012-09-20 01:32:01 +00:00
|
|
|
OPT_CHOICE_OR_INT("autosync", autosync, 0, 0, 10000,
|
|
|
|
({"no", -1})),
|
2002-09-23 22:12:29 +00:00
|
|
|
|
2012-09-03 20:44:44 +00:00
|
|
|
OPT_CHOICE("term-osd", term_osd, 0,
|
2012-01-06 18:48:50 +00:00
|
|
|
({"force", 1},
|
2012-09-21 07:22:25 +00:00
|
|
|
{"auto", 2},
|
2012-09-18 13:50:24 +00:00
|
|
|
{"no", 0})),
|
2012-01-06 18:48:50 +00:00
|
|
|
|
2014-01-15 15:14:37 +00:00
|
|
|
OPT_FLAG("term-osd-bar", term_osd_bar, 0),
|
|
|
|
OPT_STRING("term-osd-bar-chars", term_osd_bar_chars, 0),
|
|
|
|
|
2014-04-24 16:16:47 +00:00
|
|
|
OPT_STRING("term-playing-msg", playing_msg, 0),
|
2014-09-01 22:09:03 +00:00
|
|
|
OPT_STRING("osd-playing-msg", osd_playing_msg, 0),
|
2014-04-24 16:16:47 +00:00
|
|
|
OPT_STRING("term-status-msg", status_msg, 0),
|
2014-02-20 13:46:23 +00:00
|
|
|
OPT_STRING("osd-status-msg", osd_status_msg, 0),
|
2014-09-17 23:19:27 +00:00
|
|
|
OPT_STRING("osd-msg1", osd_msg[0], 0),
|
|
|
|
OPT_STRING("osd-msg2", osd_msg[1], 0),
|
|
|
|
OPT_STRING("osd-msg3", osd_msg[2], 0),
|
2010-05-03 23:34:38 +00:00
|
|
|
|
2016-08-28 16:15:37 +00:00
|
|
|
OPT_FLAG("video-osd", video_osd, 0),
|
|
|
|
|
2015-02-27 17:31:24 +00:00
|
|
|
OPT_CHOICE("idle", player_idle_mode, 0,
|
2014-12-07 11:49:07 +00:00
|
|
|
({"no", 0},
|
|
|
|
{"once", 1},
|
2015-02-27 17:31:24 +00:00
|
|
|
{"yes", 2})),
|
2014-12-07 11:49:07 +00:00
|
|
|
|
2016-09-19 17:54:54 +00:00
|
|
|
OPT_FLAG("input-terminal", consolecontrols, UPDATE_TERM),
|
2002-05-04 21:26:45 +00:00
|
|
|
|
2016-09-21 13:56:54 +00:00
|
|
|
OPT_STRING("input-file", input_file, M_OPT_FILE | UPDATE_INPUT),
|
|
|
|
OPT_STRING("input-ipc-server", ipc_path, M_OPT_FILE | UPDATE_INPUT),
|
2014-10-16 09:48:18 +00:00
|
|
|
|
2016-09-05 19:04:55 +00:00
|
|
|
OPT_SUBSTRUCT("screenshot", screenshot_image_opts, screenshot_conf, 0),
|
2014-06-13 00:17:31 +00:00
|
|
|
OPT_STRING("screenshot-template", screenshot_template, 0),
|
2017-03-05 21:47:36 +00:00
|
|
|
OPT_STRING("screenshot-directory", screenshot_directory, M_OPT_FILE),
|
2011-10-06 18:46:02 +00:00
|
|
|
|
2017-02-07 16:05:17 +00:00
|
|
|
OPT_STRING("record-file", record_file, M_OPT_FILE),
|
|
|
|
|
2016-09-21 13:56:54 +00:00
|
|
|
OPT_SUBSTRUCT("", input_opts, input_config, 0),
|
2013-07-27 19:26:00 +00:00
|
|
|
|
2016-08-30 21:50:57 +00:00
|
|
|
OPT_SUBSTRUCT("", vo, vo_sub_opts, 0),
|
2016-09-06 18:09:56 +00:00
|
|
|
OPT_SUBSTRUCT("", demux_opts, demux_conf, 0),
|
2016-08-30 21:50:57 +00:00
|
|
|
|
2016-09-02 13:59:40 +00:00
|
|
|
OPT_SUBSTRUCT("", gl_video_opts, gl_video_conf, 0),
|
|
|
|
|
vo_opengl: refactor into vo_gpu
This is done in several steps:
1. refactor MPGLContext -> struct ra_ctx
2. move GL-specific stuff in vo_opengl into opengl/context.c
3. generalize context creation to support other APIs, and add --gpu-api
4. rename all of the --opengl- options that are no longer opengl-specific
5. move all of the stuff from opengl/* that isn't GL-specific into gpu/
(note: opengl/gl_utils.h became opengl/utils.h)
6. rename vo_opengl to vo_gpu
7. to handle window screenshots, the short-term approach was to just add
it to ra_swchain_fns. Long term (and for vulkan) this has to be moved to
ra itself (and vo_gpu altered to compensate), but this was a stop-gap
measure to prevent this commit from getting too big
8. move ra->fns->flush to ra_gl_ctx instead
9. some other minor changes that I've probably already forgotten
Note: This is one half of a major refactor, the other half of which is
provided by rossy's following commit. This commit enables support for
all linux platforms, while his version enables support for all non-linux
platforms.
Note 2: vo_opengl_cb.c also re-uses ra_gl_ctx so it benefits from the
--opengl- options like --opengl-early-flush, --opengl-finish etc. Should
be a strict superset of the old functionality.
Disclaimer: Since I have no way of compiling mpv on all platforms, some
of these ports were done blindly. Specifically, the blind ports included
context_mali_fbdev.c and context_rpi.c. Since they're both based on
egl_helpers, the port should have gone smoothly without any major
changes required. But if somebody complains about a compile error on
those platforms (assuming anybody actually uses them), you know where to
complain.
2017-09-14 06:04:55 +00:00
|
|
|
#if HAVE_GL
|
|
|
|
OPT_SUBSTRUCT("", opengl_opts, opengl_conf, 0),
|
|
|
|
#endif
|
|
|
|
|
2017-06-30 10:27:15 +00:00
|
|
|
#if HAVE_EGL_ANGLE_WIN32
|
2017-01-20 12:38:28 +00:00
|
|
|
OPT_SUBSTRUCT("", angle_opts, angle_conf, 0),
|
|
|
|
#endif
|
|
|
|
|
2017-02-20 19:34:57 +00:00
|
|
|
#if HAVE_GL_COCOA
|
|
|
|
OPT_SUBSTRUCT("", cocoa_opts, cocoa_conf, 0),
|
|
|
|
#endif
|
|
|
|
|
2017-01-20 13:02:17 +00:00
|
|
|
#if HAVE_GL_WIN32
|
|
|
|
OPT_CHOICE("opengl-dwmflush", wingl_dwm_flush, 0,
|
|
|
|
({"no", -1}, {"auto", 0}, {"windowed", 1}, {"yes", 2})),
|
|
|
|
#endif
|
|
|
|
|
2017-05-29 16:48:10 +00:00
|
|
|
#if HAVE_CUDA_HWACCEL
|
|
|
|
OPT_CHOICE_OR_INT("cuda-decode-device", cuda_device, 0,
|
|
|
|
0, INT_MAX, ({"auto", -1})),
|
|
|
|
#endif
|
|
|
|
|
2014-06-11 13:55:39 +00:00
|
|
|
#if HAVE_ENCODING
|
2014-06-11 00:04:02 +00:00
|
|
|
OPT_SUBSTRUCT("", encode_opts, encode_config, 0),
|
2012-11-14 01:34:42 +00:00
|
|
|
#endif
|
2012-09-14 15:51:26 +00:00
|
|
|
|
2014-12-11 00:04:15 +00:00
|
|
|
OPT_REMOVED("a52drc", "use --ad-lavc-ac3drc=level"),
|
|
|
|
OPT_REMOVED("afm", "use --ad=..."),
|
|
|
|
OPT_REPLACED("aspect", "video-aspect"),
|
|
|
|
OPT_REMOVED("ass-bottom-margin", "use --vf=sub=bottom:top"),
|
|
|
|
OPT_REPLACED("ass", "sub-ass"),
|
|
|
|
OPT_REPLACED("audiofile", "audio-file"),
|
|
|
|
OPT_REMOVED("benchmark", "use --untimed (no stats)"),
|
2017-01-21 16:19:01 +00:00
|
|
|
OPT_REMOVED("capture", NULL),
|
|
|
|
OPT_REMOVED("stream-capture", NULL),
|
2014-12-11 00:04:15 +00:00
|
|
|
OPT_REMOVED("channels", "use --audio-channels (changed semantics)"),
|
|
|
|
OPT_REPLACED("cursor-autohide-delay", "cursor-autohide"),
|
|
|
|
OPT_REPLACED("delay", "audio-delay"),
|
|
|
|
OPT_REMOVED("dumpstream", "use --stream-dump=<filename>"),
|
|
|
|
OPT_REPLACED("dvdangle", "dvd-angle"),
|
|
|
|
OPT_REPLACED("endpos", "length"),
|
|
|
|
OPT_REPLACED("font", "osd-font"),
|
|
|
|
OPT_REPLACED("forcedsubsonly", "sub-forced-only"),
|
|
|
|
OPT_REPLACED("format", "audio-format"),
|
|
|
|
OPT_REMOVED("hardframedrop", NULL),
|
|
|
|
OPT_REMOVED("identify", "use TOOLS/mpv_identify.sh"),
|
|
|
|
OPT_REMOVED("lavdopts", "use --vd-lavc-..."),
|
|
|
|
OPT_REMOVED("lavfdopts", "use --demuxer-lavf-..."),
|
2014-12-14 23:31:30 +00:00
|
|
|
OPT_REPLACED("lua", "script"),
|
|
|
|
OPT_REPLACED("lua-opts", "script-opts"),
|
2014-12-11 00:04:15 +00:00
|
|
|
OPT_REMOVED("mixer-channel", "use AO suboptions (alsa, oss)"),
|
|
|
|
OPT_REMOVED("mixer", "use AO suboptions (alsa, oss)"),
|
|
|
|
OPT_REPLACED("mouse-movements", "input-cursor"),
|
|
|
|
OPT_REPLACED("msgcolor", "msg-color"),
|
|
|
|
OPT_REMOVED("msglevel", "use --msg-level (changed semantics)"),
|
|
|
|
OPT_REPLACED("msgmodule", "msg-module"),
|
|
|
|
OPT_REPLACED("name", "x11-name"),
|
|
|
|
OPT_REPLACED("noar", "no-input-appleremote"),
|
|
|
|
OPT_REPLACED("noautosub", "no-sub-auto"),
|
|
|
|
OPT_REPLACED("noconsolecontrols", "no-input-terminal"),
|
|
|
|
OPT_REPLACED("nosound", "no-audio"),
|
|
|
|
OPT_REPLACED("osdlevel", "osd-level"),
|
|
|
|
OPT_REMOVED("panscanrange", "use --video-zoom, --video-pan-x/y"),
|
|
|
|
OPT_REPLACED("playing-msg", "term-playing-msg"),
|
|
|
|
OPT_REMOVED("pp", NULL),
|
|
|
|
OPT_REMOVED("pphelp", NULL),
|
|
|
|
OPT_REMOVED("rawaudio", "use --demuxer-rawaudio-..."),
|
|
|
|
OPT_REMOVED("rawvideo", "use --demuxer-rawvideo-..."),
|
|
|
|
OPT_REPLACED("spugauss", "sub-gauss"),
|
|
|
|
OPT_REPLACED("srate", "audio-samplerate"),
|
|
|
|
OPT_REPLACED("ss", "start"),
|
|
|
|
OPT_REPLACED("stop-xscreensaver", "stop-screensaver"),
|
|
|
|
OPT_REPLACED("sub-fuzziness", "sub-auto"),
|
|
|
|
OPT_REPLACED("subcp", "sub-codepage"),
|
|
|
|
OPT_REPLACED("subdelay", "sub-delay"),
|
2015-08-20 22:05:07 +00:00
|
|
|
OPT_REPLACED("subfile", "sub-file"),
|
2014-12-11 00:04:15 +00:00
|
|
|
OPT_REPLACED("subfont-text-scale", "sub-scale"),
|
|
|
|
OPT_REPLACED("subfont", "sub-text-font"),
|
|
|
|
OPT_REPLACED("subfps", "sub-fps"),
|
|
|
|
OPT_REPLACED("subpos", "sub-pos"),
|
|
|
|
OPT_REPLACED("tvscan", "tv-scan"),
|
|
|
|
OPT_REMOVED("use-filename-title", "use --title='${filename}'"),
|
|
|
|
OPT_REMOVED("vc", "use --vd=..., --hwdec=..."),
|
|
|
|
OPT_REMOVED("vobsub", "use --sub-file (pass the .idx file)"),
|
|
|
|
OPT_REMOVED("xineramascreen", "use --screen (different values)"),
|
|
|
|
OPT_REMOVED("xy", "use --autofit"),
|
|
|
|
OPT_REMOVED("zoom", "Inverse available as ``--video-unscaled"),
|
|
|
|
OPT_REPLACED("media-keys", "input-media-keys"),
|
|
|
|
OPT_REPLACED("right-alt-gr", "input-right-alt-gr"),
|
|
|
|
OPT_REPLACED("autosub", "sub-auto"),
|
|
|
|
OPT_REPLACED("autosub-match", "sub-auto"),
|
|
|
|
OPT_REPLACED("status-msg", "term-status-msg"),
|
|
|
|
OPT_REPLACED("idx", "index"),
|
|
|
|
OPT_REPLACED("forceidx", "index"),
|
|
|
|
OPT_REMOVED("cache-pause-below", "for 'no', use --no-cache-pause"),
|
|
|
|
OPT_REMOVED("no-cache-pause-below", "use --no-cache-pause"),
|
|
|
|
OPT_REMOVED("volstep", "edit input.conf directly instead"),
|
2015-02-03 22:09:02 +00:00
|
|
|
OPT_REMOVED("fixed-vo", "--fixed-vo=yes is now the default"),
|
2014-12-11 22:23:50 +00:00
|
|
|
OPT_REPLACED("mkv-subtitle-preroll", "demuxer-mkv-subtitle-preroll"),
|
|
|
|
OPT_REPLACED("dtshd", "ad-spdif-dtshd"),
|
2015-02-16 19:04:15 +00:00
|
|
|
OPT_REPLACED("ass-use-margins", "sub-use-margins"),
|
2015-05-22 18:03:14 +00:00
|
|
|
OPT_REPLACED("media-title", "force-media-title"),
|
2016-03-18 07:46:13 +00:00
|
|
|
OPT_REPLACED("input-unix-socket", "input-ipc-server"),
|
2016-07-09 16:31:18 +00:00
|
|
|
OPT_REPLACED("softvol-max", "volume-max"),
|
2016-09-08 19:02:31 +00:00
|
|
|
OPT_REMOVED("bluray-angle", "this didn't do anything for a few releases"),
|
2016-09-18 11:38:45 +00:00
|
|
|
OPT_REPLACED("playlist-pos", "playlist-start"),
|
2016-10-02 15:08:14 +00:00
|
|
|
OPT_REPLACED("sub-text-font", "sub-font"),
|
|
|
|
OPT_REPLACED("sub-text-font-size", "sub-font-size"),
|
|
|
|
OPT_REPLACED("sub-text-color", "sub-color"),
|
|
|
|
OPT_REPLACED("sub-text-border-color", "sub-border-color"),
|
|
|
|
OPT_REPLACED("sub-text-shadow-color", "sub-shadow-color"),
|
|
|
|
OPT_REPLACED("sub-text-back-color", "sub-back-color"),
|
|
|
|
OPT_REPLACED("sub-text-border-size", "sub-border-size"),
|
|
|
|
OPT_REPLACED("sub-text-shadow-offset", "sub-shadow-offset"),
|
|
|
|
OPT_REPLACED("sub-text-spacing", "sub-spacing"),
|
|
|
|
OPT_REPLACED("sub-text-margin-x", "sub-margin-x"),
|
|
|
|
OPT_REPLACED("sub-text-margin-y", "sub-margin-y"),
|
|
|
|
OPT_REPLACED("sub-text-align-x", "sub-align-x"),
|
|
|
|
OPT_REPLACED("sub-text-align-y", "sub-align-y"),
|
|
|
|
OPT_REPLACED("sub-text-blur", "sub-blur"),
|
|
|
|
OPT_REPLACED("sub-text-bold", "sub-bold"),
|
|
|
|
OPT_REPLACED("sub-text-italic", "sub-italic"),
|
|
|
|
OPT_REPLACED("ass-line-spacing", "sub-ass-line-spacing"),
|
|
|
|
OPT_REPLACED("ass-force-margins", "sub-ass-force-margins"),
|
|
|
|
OPT_REPLACED("ass-vsfilter-aspect-compat", "sub-ass-vsfilter-aspect-compat"),
|
|
|
|
OPT_REPLACED("ass-vsfilter-color-compat", "sub-ass-vsfilter-color-compat"),
|
|
|
|
OPT_REPLACED("ass-vsfilter-blur-compat", "sub-ass-vsfilter-blur-compat"),
|
|
|
|
OPT_REPLACED("ass-force-style", "sub-ass-force-style"),
|
|
|
|
OPT_REPLACED("ass-styles", "sub-ass-styles"),
|
|
|
|
OPT_REPLACED("ass-hinting", "sub-ass-hinting"),
|
|
|
|
OPT_REPLACED("ass-shaper", "sub-ass-shaper"),
|
|
|
|
OPT_REPLACED("ass-style-override", "sub-ass-style-override"),
|
|
|
|
OPT_REPLACED("ass-scale-with-window", "sub-ass-scale-with-window"),
|
2017-06-06 20:16:29 +00:00
|
|
|
OPT_REPLACED("sub-ass-style-override", "sub-ass-override"),
|
2016-12-04 21:52:14 +00:00
|
|
|
OPT_REMOVED("fs-black-out-screens", NULL),
|
2017-07-02 14:26:41 +00:00
|
|
|
OPT_REPLACED("sub-paths", "sub-file-paths"),
|
2017-09-18 20:54:03 +00:00
|
|
|
OPT_REMOVED("heartbeat-cmd", "use Lua scripting instead"),
|
2014-12-11 22:23:50 +00:00
|
|
|
|
2014-06-11 00:04:02 +00:00
|
|
|
{0}
|
2001-03-18 23:32:31 +00:00
|
|
|
};
|
2008-01-01 21:35:58 +00:00
|
|
|
|
2013-06-07 20:57:00 +00:00
|
|
|
const struct MPOpts mp_default_opts = {
|
2014-02-06 15:49:50 +00:00
|
|
|
.use_terminal = 1,
|
2013-12-21 22:11:12 +00:00
|
|
|
.msg_color = 1,
|
2013-06-07 20:31:26 +00:00
|
|
|
.audio_driver_list = NULL,
|
2016-12-23 17:03:16 +00:00
|
|
|
.audio_decoders = NULL,
|
2013-06-07 20:31:26 +00:00
|
|
|
.video_decoders = NULL,
|
|
|
|
.softvol = SOFTVOL_AUTO,
|
2015-05-22 16:44:59 +00:00
|
|
|
.softvol_max = 130,
|
2016-07-09 16:31:18 +00:00
|
|
|
.softvol_volume = 100,
|
|
|
|
.softvol_mute = 0,
|
2014-06-30 16:24:20 +00:00
|
|
|
.gapless_audio = -1,
|
2014-09-04 21:48:27 +00:00
|
|
|
.audio_buffer = 0.2,
|
2014-10-09 19:21:31 +00:00
|
|
|
.audio_device = "auto",
|
2014-11-07 14:54:35 +00:00
|
|
|
.audio_client_name = "mpv",
|
2015-08-09 19:45:37 +00:00
|
|
|
.wintitle = "${?media-title:${media-title}}${!media-title:No file} - mpv",
|
2013-06-13 22:24:41 +00:00
|
|
|
.stop_screensaver = 1,
|
2013-09-08 00:07:20 +00:00
|
|
|
.cursor_autohide_delay = 1000,
|
2016-08-28 16:15:37 +00:00
|
|
|
.video_osd = 1,
|
2013-06-07 20:31:26 +00:00
|
|
|
.osd_level = 1,
|
|
|
|
.osd_duration = 1000,
|
|
|
|
.osd_bar_align_y = 0.5,
|
|
|
|
.osd_bar_w = 75.0,
|
|
|
|
.osd_bar_h = 3.125,
|
|
|
|
.osd_scale = 1,
|
2013-12-10 18:58:57 +00:00
|
|
|
.osd_scale_by_window = 1,
|
2015-01-05 18:18:08 +00:00
|
|
|
.sub_scale_by_window = 1,
|
2015-02-16 19:04:15 +00:00
|
|
|
.ass_use_margins = 0,
|
|
|
|
.sub_use_margins = 1,
|
|
|
|
.ass_scale_with_window = 0,
|
|
|
|
.sub_scale_with_window = 1,
|
2016-09-03 15:05:11 +00:00
|
|
|
.teletext_page = 100,
|
2014-05-12 23:14:07 +00:00
|
|
|
#if HAVE_LUA
|
2013-10-14 19:09:54 +00:00
|
|
|
.lua_load_osc = 1,
|
2014-12-09 20:53:38 +00:00
|
|
|
.lua_load_ytdl = 1,
|
2015-10-10 22:35:35 +00:00
|
|
|
.lua_ytdl_format = NULL,
|
2015-02-22 20:32:42 +00:00
|
|
|
.lua_ytdl_raw_options = NULL,
|
2014-05-12 23:14:07 +00:00
|
|
|
#endif
|
2014-02-28 21:25:48 +00:00
|
|
|
.auto_load_scripts = 1,
|
2015-02-12 21:41:45 +00:00
|
|
|
.loop_times = 1,
|
2013-06-07 20:31:26 +00:00
|
|
|
.ordered_chapters = 1,
|
|
|
|
.chapter_merge_threshold = 100,
|
2013-08-14 01:25:50 +00:00
|
|
|
.chapter_seek_threshold = 5.0,
|
2014-05-07 20:01:17 +00:00
|
|
|
.hr_seek_framedrop = 1,
|
2015-08-10 16:43:25 +00:00
|
|
|
.sync_max_video_change = 1,
|
|
|
|
.sync_max_audio_change = 0.125,
|
2015-10-27 19:56:46 +00:00
|
|
|
.sync_audio_drop_size = 0.020,
|
2013-06-07 20:31:26 +00:00
|
|
|
.load_config = 1,
|
|
|
|
.position_resume = 1,
|
2016-08-10 20:22:50 +00:00
|
|
|
.autoload_files = 1,
|
2014-08-16 15:09:08 +00:00
|
|
|
.demuxer_thread = 1,
|
2015-07-13 11:34:58 +00:00
|
|
|
.hls_bitrate = INT_MAX,
|
player: redo how stream caching and pausing on low cache works
Add the --cache-secs option, which literally overrides the value of
--demuxer-readahead-secs if the stream cache is active. The default
value is very high (10 seconds), which means it can act as network
cache.
Remove the old behavior of trying to pause once the byte cache runs
low. Instead, do something similar wit the demuxer cache. The nice
thing is that we can guess how many seconds of video it has cached,
and we can make better decisions. But for now, apply a relatively
naive heuristic: if the cache is below 0.5 secs, pause, and wait
until at least 2 secs are available.
Note that due to timestamp reordering, the estimated cached duration
of video might be inaccurate, depending on the file format. If the
file format has DTS, it's easy, otherwise the duration will seemingly
jump back and forth.
2014-08-26 23:13:20 +00:00
|
|
|
.cache_pausing = 1,
|
2013-06-07 20:31:26 +00:00
|
|
|
.chapterrange = {-1, -1},
|
2014-11-18 11:50:54 +00:00
|
|
|
.ab_loop = {MP_NOPTS_VALUE, MP_NOPTS_VALUE},
|
2013-06-07 20:31:26 +00:00
|
|
|
.edition_id = -1,
|
|
|
|
.default_max_pts_correction = -1,
|
2013-07-26 00:06:58 +00:00
|
|
|
.correct_pts = 1,
|
2013-06-07 20:31:26 +00:00
|
|
|
.initial_audio_sync = 1,
|
2014-08-17 00:51:13 +00:00
|
|
|
.frame_dropping = 1,
|
2013-06-07 20:31:26 +00:00
|
|
|
.term_osd = 2,
|
2014-01-15 15:14:37 +00:00
|
|
|
.term_osd_bar_chars = "[-+-]",
|
2013-06-07 20:31:26 +00:00
|
|
|
.consolecontrols = 1,
|
2015-08-22 20:08:17 +00:00
|
|
|
.playlist_pos = -1,
|
2013-06-07 20:31:26 +00:00
|
|
|
.play_frames = -1,
|
2015-11-16 21:47:17 +00:00
|
|
|
.rebase_start_time = 1,
|
2013-06-07 20:31:26 +00:00
|
|
|
.keep_open = 0,
|
2017-03-27 09:34:02 +00:00
|
|
|
.keep_open_pause = 1,
|
2016-08-17 20:45:44 +00:00
|
|
|
.image_display_duration = 1.0,
|
2015-05-22 19:00:24 +00:00
|
|
|
.stream_id = { { [STREAM_AUDIO] = -1,
|
|
|
|
[STREAM_VIDEO] = -1,
|
|
|
|
[STREAM_SUB] = -1, },
|
|
|
|
{ [STREAM_AUDIO] = -2,
|
|
|
|
[STREAM_VIDEO] = -2,
|
|
|
|
[STREAM_SUB] = -2, }, },
|
|
|
|
.stream_id_ff = { [STREAM_AUDIO] = -1,
|
|
|
|
[STREAM_VIDEO] = -1,
|
|
|
|
[STREAM_SUB] = -1, },
|
2017-08-12 21:43:05 +00:00
|
|
|
.stream_auto_sel = 1,
|
2013-06-07 20:31:26 +00:00
|
|
|
.audio_display = 1,
|
|
|
|
.sub_visibility = 1,
|
|
|
|
.sub_pos = 100,
|
2013-06-24 22:03:37 +00:00
|
|
|
.sub_speed = 1.0,
|
2013-08-25 16:23:40 +00:00
|
|
|
.audio_output_format = 0, // AF_FORMAT_UNKNOWN
|
2013-06-07 20:31:26 +00:00
|
|
|
.playback_speed = 1.,
|
2014-10-02 00:58:52 +00:00
|
|
|
.pitch_correction = 1,
|
2013-06-07 20:31:26 +00:00
|
|
|
.movie_aspect = -1.,
|
2017-06-29 20:34:57 +00:00
|
|
|
.aspect_method = 2,
|
2014-05-04 08:31:24 +00:00
|
|
|
.sub_auto = 0,
|
2017-04-20 03:29:04 +00:00
|
|
|
.audiofile_auto = -1,
|
2013-06-07 20:31:26 +00:00
|
|
|
.osd_bar_visible = 1,
|
2013-07-16 11:28:28 +00:00
|
|
|
#if HAVE_LIBASS
|
2013-06-07 20:31:26 +00:00
|
|
|
.ass_enabled = 1,
|
|
|
|
#endif
|
|
|
|
.sub_scale = 1,
|
|
|
|
.ass_vsfilter_aspect_compat = 1,
|
2013-07-14 23:48:25 +00:00
|
|
|
.ass_vsfilter_color_compat = 1,
|
2013-06-30 16:46:29 +00:00
|
|
|
.ass_vsfilter_blur_compat = 1,
|
2013-06-07 20:31:26 +00:00
|
|
|
.ass_style_override = 1,
|
2013-09-25 19:42:29 +00:00
|
|
|
.ass_shaper = 1,
|
2013-06-07 20:31:26 +00:00
|
|
|
.use_embedded_fonts = 1,
|
2015-05-01 19:44:37 +00:00
|
|
|
.screenshot_template = "mpv-shot%n",
|
2013-06-07 20:31:26 +00:00
|
|
|
|
2016-09-15 11:45:23 +00:00
|
|
|
.hwdec_api = HAVE_RPI ? HWDEC_RPI : 0,
|
2016-07-30 13:47:51 +00:00
|
|
|
.hwdec_codecs = "h264,vc1,wmv3,hevc,mpeg2video,vp9",
|
2015-11-17 20:07:41 +00:00
|
|
|
.videotoolbox_format = IMGFMT_NV12,
|
2013-06-07 20:31:26 +00:00
|
|
|
|
2017-04-05 09:07:08 +00:00
|
|
|
.audio_output_channels = {
|
|
|
|
.set = 1,
|
|
|
|
.auto_safe = 1,
|
|
|
|
},
|
|
|
|
|
2014-06-13 00:05:37 +00:00
|
|
|
.index_mode = 1,
|
2013-07-07 21:54:11 +00:00
|
|
|
|
2014-06-10 20:48:11 +00:00
|
|
|
.mf_fps = 1.0,
|
2014-12-29 21:51:18 +00:00
|
|
|
|
|
|
|
.display_tags = (char **)(const char*[]){
|
2014-12-31 20:07:50 +00:00
|
|
|
"Artist", "Album", "Album_Artist", "Comment", "Composer", "Genre",
|
2016-01-13 00:48:01 +00:00
|
|
|
"Performer", "Title", "Track", "icy-title", "service_name",
|
2014-12-29 21:51:18 +00:00
|
|
|
NULL
|
|
|
|
},
|
2017-05-29 16:48:10 +00:00
|
|
|
|
|
|
|
.cuda_device = -1,
|
2013-06-07 20:31:26 +00:00
|
|
|
};
|
|
|
|
|
2008-02-22 09:09:46 +00:00
|
|
|
#endif /* MPLAYER_CFG_MPLAYER_H */
|