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/filter/af.h"
|
|
|
|
#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
|
|
|
|
2016-10-04 20:07:19 +00:00
|
|
|
#if HAVE_DRM
|
|
|
|
#include "video/out/drm_common.h"
|
|
|
|
#endif
|
|
|
|
|
2017-02-13 07:01:21 +00:00
|
|
|
#if HAVE_GL
|
|
|
|
#include "video/out/opengl/hwdec.h"
|
|
|
|
#endif
|
|
|
|
|
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
|
|
|
|
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),
|
|
|
|
OPT_FLOATRANGE("monitorpixelaspect", monitor_pixel_aspect, 0, 0.2, 9.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),
|
2016-09-19 18:16:44 +00:00
|
|
|
OPT_FLOATRANGE("panscan", panscan, UPDATE_VIDEOPOS, 0.0, 1.0),
|
|
|
|
OPT_FLOATRANGE("video-zoom", zoom, UPDATE_VIDEOPOS, -20.0, 20.0),
|
|
|
|
OPT_FLOATRANGE("video-pan-x", pan_x, UPDATE_VIDEOPOS, -3.0, 3.0),
|
|
|
|
OPT_FLOATRANGE("video-pan-y", pan_y, UPDATE_VIDEOPOS, -3.0, 3.0),
|
|
|
|
OPT_FLOATRANGE("video-align-x", align_x, UPDATE_VIDEOPOS, -1.0, 1.0),
|
|
|
|
OPT_FLOATRANGE("video-align-y", align_y, UPDATE_VIDEOPOS, -1.0, 1.0),
|
|
|
|
OPT_CHOICE("video-unscaled", unscaled, UPDATE_VIDEOPOS,
|
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})),
|
2016-09-19 18:16:44 +00:00
|
|
|
OPT_FLAG("keepaspect", keepaspect, UPDATE_VIDEOPOS),
|
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
|
|
|
#if HAVE_GL
|
|
|
|
OPT_STRING_VALIDATE("opengl-hwdec-interop", gl_hwdec_interop, 0,
|
|
|
|
gl_hwdec_validate_opt),
|
|
|
|
OPT_REPLACED("hwdec-preload", "opengl-hwdec-interop"),
|
|
|
|
#endif
|
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),
|
2011-03-10 21:08:21 +00:00
|
|
|
|
2016-02-05 22:19:56 +00:00
|
|
|
OPT_STRING("lavfi-complex", lavfi_complex, 0),
|
|
|
|
|
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 --------------------
|
|
|
|
|
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, ),
|
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
|
|
|
|
2015-02-27 17:31:24 +00:00
|
|
|
OPT_CHOICE("deinterlace", deinterlace, 0,
|
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
|
|
|
({"auto", -1},
|
|
|
|
{"no", 0},
|
2015-02-27 17:31:24 +00:00
|
|
|
{"yes", 1})),
|
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
|
|
|
|
2016-06-29 16:10:15 +00:00
|
|
|
OPT_STRING("heartbeat-cmd", heartbeat_cmd, 0,
|
|
|
|
.deprecation_message = "use Lua scripting instead"),
|
2013-04-04 12:24:42 +00:00
|
|
|
OPT_FLOAT("heartbeat-interval", heartbeat_interval, CONF_MIN, 0),
|
2004-07-23 13:00:16 +00:00
|
|
|
|
2017-06-23 13:13:47 +00:00
|
|
|
#if HAVE_GPL
|
2013-03-04 16:40:21 +00:00
|
|
|
OPT_INTRANGE("brightness", gamma_brightness, 0, -100, 100),
|
|
|
|
OPT_INTRANGE("saturation", gamma_saturation, 0, -100, 100),
|
|
|
|
OPT_INTRANGE("contrast", gamma_contrast, 0, -100, 100),
|
|
|
|
OPT_INTRANGE("hue", gamma_hue, 0, -100, 100),
|
|
|
|
OPT_INTRANGE("gamma", gamma_gamma, 0, -100, 100),
|
2015-09-29 19:12:26 +00:00
|
|
|
OPT_CHOICE_C("video-output-levels", video_output_levels, 0,
|
|
|
|
mp_csp_levels_names),
|
2017-06-23 13:13:47 +00:00
|
|
|
#endif
|
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})),
|
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
|
|
|
#if HAVE_GL
|
|
|
|
OPT_SUBSTRUCT("", gl_video_opts, gl_video_conf, 0),
|
2016-09-02 18:07:25 +00:00
|
|
|
#endif
|
2016-09-02 13:59:40 +00:00
|
|
|
|
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-04-10 19:19:13 +00:00
|
|
|
OPT_REPLACED_MSG("loop", "loop-playlist", "--loop will be changed to map to"
|
|
|
|
" --loop-file in future releases."),
|
2017-07-02 14:26:41 +00:00
|
|
|
OPT_REPLACED("sub-paths", "sub-file-paths"),
|
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,
|
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
|
|
|
.deinterlace = -1,
|
2013-06-07 20:31:26 +00:00
|
|
|
.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-07 20:31:26 +00:00
|
|
|
.heartbeat_interval = 30.0,
|
2013-06-13 22:24:41 +00:00
|
|
|
.stop_screensaver = 1,
|
2013-09-08 00:07:20 +00:00
|
|
|
.cursor_autohide_delay = 1000,
|
2016-09-01 18:57:33 +00:00
|
|
|
.gamma_gamma = 0,
|
|
|
|
.gamma_brightness = 0,
|
|
|
|
.gamma_contrast = 0,
|
|
|
|
.gamma_saturation = 0,
|
|
|
|
.gamma_hue = 0,
|
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, },
|
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 */
|