diff options
author | wm4 <wm4@mplayer2.org> | 2012-04-01 22:52:33 +0200 |
---|---|---|
committer | wm4 <wm4@mplayer2.org> | 2012-04-01 22:52:33 +0200 |
commit | 1aa2e36122e6e664e42170f47d6db82873bef5aa (patch) | |
tree | 39e13f93bcb606da9e365c7cd379132bdf53c20b | |
parent | fea8c85c8595b797fc839b113c1db252fc55c798 (diff) | |
parent | 8cd71527ade21ea27ea24cdcc66dc71dca460f85 (diff) | |
download | mpv-1aa2e36122e6e664e42170f47d6db82873bef5aa.tar.bz2 mpv-1aa2e36122e6e664e42170f47d6db82873bef5aa.tar.xz |
Merge remote-tracking branch 'origin/master'
Conflicts:
bstr.c
bstr.h
etc/input.conf
input/input.c
input/input.h
libao2/ao_pulse.c
libmpcodecs/vf_ass.c
libmpcodecs/vf_vo.c
libvo/gl_common.c
libvo/x11_common.c
mixer.c
mixer.h
mplayer.c
38 files changed, 1270 insertions, 2554 deletions
@@ -99,7 +99,7 @@ SRCS_COMMON-$(LIBTHEORA) += libmpcodecs/vd_theora.c SRCS_COMMON-$(LIVE555) += libmpdemux/demux_rtp.cpp \ libmpdemux/demux_rtp_codec.cpp \ stream/stream_live555.c -SRCS_COMMON-$(MACOSX_FINDER) += osdep/macosx_finder_args.c +SRCS_COMMON-$(MACOSX_FINDER) += osdep/macosx_finder_args.m SRCS_COMMON-$(MNG) += libmpdemux/demux_mng.c SRCS_COMMON-$(MPG123) += libmpcodecs/ad_mpg123.c @@ -416,12 +416,12 @@ SRCS_COMMON = asxparser.c \ stream/stream_null.c \ stream/url.c \ sub/av_sub.c \ - sub/sub.c \ - sub/sub_cc.c \ sub/dec_sub.c \ sub/find_sub.c \ sub/find_subfiles.c \ sub/spudec.c \ + sub/sub.c \ + sub/sub_cc.c \ sub/subassconvert.c \ sub/subreader.c \ sub/vobsub.c \ @@ -472,7 +472,6 @@ SRCS_MPLAYER-$(OPENAL) += libao2/ao_openal.c SRCS_MPLAYER-$(OSS) += libao2/ao_oss.c SRCS_MPLAYER-$(PNM) += libvo/vo_pnm.c SRCS_MPLAYER-$(PULSE) += libao2/ao_pulse.c -SRCS_MPLAYER-$(QUARTZ) += libvo/vo_quartz.c libvo/osx_common.c SRCS_MPLAYER-$(RSOUND) += libao2/ao_rsound.c SRCS_MPLAYER-$(S3FB) += libvo/vo_s3fb.c SRCS_MPLAYER-$(SDL) += libao2/ao_sdl.c libvo/vo_sdl.c libvo/sdl_common.c @@ -528,7 +527,7 @@ OBJS_MPLAYER-$(PE_EXECUTABLE) += osdep/mplayer-rc.o OBJS_MPLAYER += $(OBJS_MPLAYER-yes) MPLAYER_DEPS = $(OBJS_MPLAYER) $(OBJS_COMMON) $(COMMON_LIBS) -DEP_FILES = $(patsubst %.S,%.d,$(patsubst %.cpp,%.d,$(patsubst %.c,%.d,$(SRCS_COMMON) $(SRCS_MPLAYER:.m=.d)))) +DEP_FILES = $(patsubst %.S,%.d,$(patsubst %.cpp,%.d,$(patsubst %.c,%.d,$(SRCS_COMMON:.m=.d) $(SRCS_MPLAYER:.m=.d)))) ALL_PRG-$(MPLAYER) += mplayer$(EXESUF) diff --git a/cfg-mplayer.h b/cfg-mplayer.h index 75aa5553fe..1d18949ce0 100644 --- a/cfg-mplayer.h +++ b/cfg-mplayer.h @@ -731,11 +731,10 @@ const m_option_t mplayer_opts[]={ {"border", &vo_border, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"noborder", &vo_border, CONF_TYPE_FLAG, 0, 1, 0, NULL}, - {"mixer", &mixer_device, CONF_TYPE_STRING, 0, 0, 0, NULL}, - {"mixer-channel", &mixer_channel, CONF_TYPE_STRING, 0, 0, 0, NULL}, - {"softvol", &soft_vol, CONF_TYPE_FLAG, 0, 0, 1, NULL}, - {"nosoftvol", &soft_vol, CONF_TYPE_FLAG, 0, 1, 0, NULL}, - {"softvol-max", &soft_vol_max, CONF_TYPE_FLOAT, CONF_RANGE, 10, 10000, NULL}, + OPT_STRING("mixer", mixer_device, 0), + OPT_STRING("mixer-channel", mixer_channel, 0), + OPT_MAKE_FLAGS("softvol", softvol, 0), + OPT_FLOATRANGE("softvol-max", softvol_max, 0, 10, 10000), {"volstep", &volstep, CONF_TYPE_INT, CONF_RANGE, 0, 100, NULL}, {"volume", &start_volume, CONF_TYPE_FLOAT, CONF_RANGE, -1, 10000, NULL}, OPT_MAKE_FLAGS("gapless-audio", gapless_audio, 0), @@ -807,6 +806,7 @@ const m_option_t mplayer_opts[]={ {"grabpointer", &vo_grabpointer, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"nograbpointer", &vo_grabpointer, CONF_TYPE_FLAG, 0, 1, 0, NULL}, + OPT_INTRANGE("cursor-autohide-delay", cursor_autohide_delay, 0, -2, 30000), {"adapter", &vo_adapter_num, CONF_TYPE_INT, CONF_RANGE, 0, 5, NULL}, {"refreshrate",&vo_refresh_rate,CONF_TYPE_INT,CONF_RANGE, 0,100, NULL}, @@ -1764,7 +1764,7 @@ static int mp_property_sub(m_option_t *prop, int action, void *arg, } #endif - update_subtitles(mpctx, 0, 0, true); + update_subtitles(mpctx, 0, true); return M_PROPERTY_OK; } @@ -438,7 +438,6 @@ Video output: --disable-yuv4mpeg disable yuv4mpeg video output [enable] --disable-corevideo disable CoreVideo video output [autodetect] --disable-cocoa disable Cocoa OpenGL backend [autodetect] - --disable-quartz disable Quartz video output [autodetect] Audio output: --disable-alsa disable ALSA audio output [autodetect] @@ -701,7 +700,6 @@ _qtx=auto _coreaudio=auto _corevideo=auto _cocoa=auto -_quartz=auto quicktime=auto _macosx_finder=no _macosx_bundle=auto @@ -1139,8 +1137,6 @@ for ac_option do --disable-corevideo) _corevideo=no ;; --enable-cocoa) _cocoa=yes ;; --disable-cocoa) _cocoa=no ;; - --enable-quartz) _quartz=yes ;; - --disable-quartz) _quartz=no ;; --enable-macosx-finder) _macosx_finder=yes ;; --disable-macosx-finder) _macosx_finder=no ;; --enable-macosx-bundle) _macosx_bundle=yes ;; @@ -3583,7 +3579,7 @@ echocheck "Mac OS X Finder Support" def_macosx_finder='#undef CONFIG_MACOSX_FINDER' if test "$_macosx_finder" = yes ; then def_macosx_finder='#define CONFIG_MACOSX_FINDER 1' - extra_ldflags="$extra_ldflags -framework Carbon" + extra_ldflags="$extra_ldflags -framework Cocoa" fi echores "$_macosx_finder" @@ -3592,7 +3588,6 @@ def_macosx_bundle='#undef CONFIG_MACOSX_BUNDLE' test "$_macosx_bundle" = auto && _macosx_bundle=$_macosx_finder if test "$_macosx_bundle" = yes ; then def_macosx_bundle='#define CONFIG_MACOSX_BUNDLE 1' - extra_ldflags="$extra_ldflags -framework Carbon" fi echores "$_macosx_bundle" @@ -4218,25 +4213,9 @@ if test "$quicktime" = yes ; then def_quicktime='#define CONFIG_QUICKTIME 1' else def_quicktime='#undef CONFIG_QUICKTIME' - _quartz=no fi echores $quicktime -echocheck "Quartz" -if test "$_quartz" = auto ; then - _quartz=no - statement_check Carbon/Carbon.h 'CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, false)' -framework Carbon && _quartz=yes -fi -if test "$_quartz" = yes ; then - libs_mplayer="$libs_mplayer -framework Carbon" - def_quartz='#define CONFIG_QUARTZ 1' - vomodules="quartz $vomodules" -else - def_quartz='#undef CONFIG_QUARTZ' - novomodules="quartz $novomodules" -fi -echores $_quartz - echocheck "CoreVideo" if test "$_corevideo" = auto ; then cat > $TMPC <<EOF @@ -4573,7 +4552,7 @@ int main(int argc, char *argv[]) { EOF _gl=no for _ld_tmp in "" -lGL "-lGL -lXdamage" "-lGL $_ld_pthread" ; do - if cc_check $_ld_tmp $_ld_lm ; then + if test "$_cocoa" != yes && cc_check $_ld_tmp $_ld_lm ; then _gl=yes _gl_x11=yes libs_mplayer="$libs_mplayer $_ld_tmp $_ld_dl" @@ -6563,7 +6542,6 @@ PVR = $_pvr QTX_CODECS = $_qtx QTX_CODECS_WIN32 = $_qtx_codecs_win32 QTX_EMULATION = $_qtx_emulation -QUARTZ = $_quartz RADIO=$_radio RADIO_CAPTURE=$_radio_capture REAL_CODECS = $_real @@ -6930,7 +6908,6 @@ $def_mga $def_mng $def_png $def_pnm -$def_quartz $def_s3fb $def_sdl $def_sdl_sdl_h diff --git a/defaultopts.c b/defaultopts.c index bf0489a335..8cb86c0457 100644 --- a/defaultopts.c +++ b/defaultopts.c @@ -10,9 +10,11 @@ void set_default_mplayer_options(struct MPOpts *opts) .audio_driver_list = NULL, .video_driver_list = NULL, .fixed_vo = 1, + .softvol_max = 110, .ao_buffersize = -1, .monitor_pixel_aspect = 1.0, .vo_panscanrange = 1.0, + .cursor_autohide_delay = 1000, .vo_gamma_gamma = 1000, .vo_gamma_brightness = 1000, .vo_gamma_contrast = 1000, diff --git a/etc/input.conf b/etc/input.conf index b358d33243..7b61344f7f 100644 --- a/etc/input.conf +++ b/etc/input.conf @@ -33,16 +33,16 @@ MOUSE_BTN4 seek -10 MOUSE_BTN5 volume 1 MOUSE_BTN6 volume -1 -# Seek units are in seconds, but note that these are mostly limited by keyframes -RIGHT seek 10 -LEFT seek -10 -UP seek 60 -DOWN seek -60 +# Seek units are in seconds, but note that these are limited by keyframes +RIGHT seek 10 +LEFT seek -10 +UP seek 60 +DOWN seek -60 # Do smaller, always exact (non-keyframe-limited), seeks with shift. Shift+RIGHT seek 1 0 1 Shift+LEFT seek -1 0 1 -Shift+UP seek 5 0 1 -Shift+DOWN seek -5 0 1 +Shift+UP seek 5 0 1 +Shift+DOWN seek -5 0 1 PGUP seek 600 PGDWN seek -600 + audio_delay 0.100 # this changes audio/video sync @@ -87,9 +87,10 @@ m mute 7 saturation -1 8 saturation 1 d frame_drop # cycle through framedrop modes -D step_property_osd deinterlace # toggle deinterlacer, requires -vf yadif or kerndeint +# toggle deinterlacer; requires either vdpau output, -vf yadif or kerndeint +D step_property_osd deinterlace c step_property_osd colormatrix -# These currently only work with --no-ass +# Next 3 currently only work with --no-ass r sub_pos -1 # move subtitles up t sub_pos +1 # down a sub_alignment @@ -106,7 +107,7 @@ i edl_mark # for use with --edlout mode T vo_ontop # toggle video window ontop of other windows f vo_fullscreen # toggle fullscreen C step_property_osd capturing -s screenshot 0 # take a png screenshot with -vf screenshot +s screenshot 0 # take a png screenshot S screenshot 1 # ...on every frame Alt+s screenshot 0 1 # take a screenshot of window contents Alt+S screenshot 1 1 # ...on every frame diff --git a/input/input.c b/input/input.c index 008c908634..57b2d21f9d 100644 --- a/input/input.c +++ b/input/input.c @@ -71,150 +71,152 @@ struct key_name { char *name; }; -/// This array defines all known commands. -/// The first field is an id used to recognize the command without too many strcmp. -/// The second is obviously the command name. -/// The third is the minimum number of arguments this command needs. -/// Then comes the definition of each argument, terminated with an arg of -/// type 0 (this doesn't need to be explicit, because C will default initialize -/// the following arguments to type 0). -/// A command can take a maximum of MP_CMD_MAX_ARGS-1 arguments (-1 because of -/// the last one) which is actually 9. - -/// For the args, the first field is the type (actually int, float or string), the second -/// is the default value wich is used for optional arguments +/* This array defines all known commands. + * The first field is an id used to recognize the command. + * The second is the command name used in slave mode and input.conf. + * Then comes the definition of each argument, first mandatory arguments + * (ARG_INT, ARG_FLOAT, ARG_STRING) if any, then optional arguments + * (OARG_INT(default), etc) if any. The command will be given the default + * argument value if the user didn't give enough arguments to specify it. + * A command can take a maximum of MP_CMD_MAX_ARGS arguments (10). + */ +#define ARG_INT { .type = MP_CMD_ARG_INT } +#define OARG_INT(def) { .type = MP_CMD_ARG_INT, .optional = true, .v.i = def } +#define ARG_FLOAT { .type = MP_CMD_ARG_FLOAT } +#define OARG_FLOAT(def) { .type = MP_CMD_ARG_FLOAT, .optional = true, .v.f = def } +#define ARG_STRING { .type = MP_CMD_ARG_STRING } +#define OARG_STRING(def) { .type = MP_CMD_ARG_STRING, .optional = true, .v.s = def } static const mp_cmd_t mp_cmds[] = { #ifdef CONFIG_RADIO - { MP_CMD_RADIO_STEP_CHANNEL, "radio_step_channel", 1, { { MP_CMD_ARG_INT} } }, - { MP_CMD_RADIO_SET_CHANNEL, "radio_set_channel", 1, { { MP_CMD_ARG_STRING} } }, - { MP_CMD_RADIO_SET_FREQ, "radio_set_freq", 1, { {MP_CMD_ARG_FLOAT} } }, - { MP_CMD_RADIO_STEP_FREQ, "radio_step_freq", 1, { {MP_CMD_ARG_FLOAT} } }, + { MP_CMD_RADIO_STEP_CHANNEL, "radio_step_channel", { ARG_INT } }, + { MP_CMD_RADIO_SET_CHANNEL, "radio_set_channel", { ARG_STRING } }, + { MP_CMD_RADIO_SET_FREQ, "radio_set_freq", { ARG_FLOAT } }, + { MP_CMD_RADIO_STEP_FREQ, "radio_step_freq", {ARG_FLOAT } }, #endif - { MP_CMD_SEEK, "seek", 1, { {MP_CMD_ARG_FLOAT}, {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_EDL_MARK, "edl_mark", 0 }, - { MP_CMD_AUDIO_DELAY, "audio_delay", 1, { {MP_CMD_ARG_FLOAT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_SPEED_INCR, "speed_incr", 1, { {MP_CMD_ARG_FLOAT} } }, - { MP_CMD_SPEED_MULT, "speed_mult", 1, { {MP_CMD_ARG_FLOAT} } }, - { MP_CMD_SPEED_SET, "speed_set", 1, { {MP_CMD_ARG_FLOAT} } }, - { MP_CMD_QUIT, "quit", 0, { {MP_CMD_ARG_INT} } }, - { MP_CMD_STOP, "stop", 0 }, - { MP_CMD_PAUSE, "pause", 0 }, - { MP_CMD_FRAME_STEP, "frame_step", 0 }, - { MP_CMD_PLAY_TREE_STEP, "pt_step", 1, { { MP_CMD_ARG_INT }, { MP_CMD_ARG_INT } } }, - { MP_CMD_PLAY_TREE_UP_STEP, "pt_up_step", 1, { { MP_CMD_ARG_INT }, { MP_CMD_ARG_INT } } }, - { MP_CMD_PLAY_ALT_SRC_STEP, "alt_src_step", 1, { { MP_CMD_ARG_INT } } }, - { MP_CMD_LOOP, "loop", 1, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_SUB_DELAY, "sub_delay", 1, { {MP_CMD_ARG_FLOAT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_SUB_STEP, "sub_step", 1, { { MP_CMD_ARG_INT }, {MP_CMD_ARG_INT} } }, - { MP_CMD_OSD, "osd", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, - { MP_CMD_OSD_SHOW_TEXT, "osd_show_text", 1, { {MP_CMD_ARG_STRING}, {MP_CMD_ARG_INT, {.i = -1}}, {MP_CMD_ARG_INT} } }, - { MP_CMD_OSD_SHOW_PROPERTY_TEXT, "osd_show_property_text",1, { {MP_CMD_ARG_STRING}, {MP_CMD_ARG_INT, {.i = -1}}, {MP_CMD_ARG_INT} } }, - { MP_CMD_OSD_SHOW_PROGRESSION, "osd_show_progression", 0 }, - { MP_CMD_VOLUME, "volume", 1, { { MP_CMD_ARG_FLOAT }, {MP_CMD_ARG_INT} } }, - { MP_CMD_BALANCE, "balance", 1, { { MP_CMD_ARG_FLOAT }, {MP_CMD_ARG_INT} } }, - { MP_CMD_MIXER_USEMASTER, "use_master", 0 }, - { MP_CMD_MUTE, "mute", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, - { MP_CMD_CONTRAST, "contrast", 1, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_GAMMA, "gamma", 1, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_BRIGHTNESS, "brightness", 1, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_HUE, "hue", 1, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_SATURATION, "saturation", 1, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_FRAMEDROPPING, "frame_drop", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, - { MP_CMD_SUB_POS, "sub_pos", 1, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_SUB_ALIGNMENT, "sub_alignment", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, - { MP_CMD_SUB_VISIBILITY, "sub_visibility", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, - { MP_CMD_SUB_LOAD, "sub_load", 1, { {MP_CMD_ARG_STRING} } }, - { MP_CMD_SUB_REMOVE, "sub_remove", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, - { MP_CMD_SUB_SELECT, "vobsub_lang", 0, { { MP_CMD_ARG_INT, {.i = -2}} } }, // for compatibility - { MP_CMD_SUB_SELECT, "sub_select", 0, { { MP_CMD_ARG_INT, {.i = -2}} } }, - { MP_CMD_SUB_SOURCE, "sub_source", 0, { { MP_CMD_ARG_INT, {.i = -2}} } }, - { MP_CMD_SUB_VOB, "sub_vob", 0, { { MP_CMD_ARG_INT, {.i = -2}} } }, - { MP_CMD_SUB_DEMUX, "sub_demux", 0, { { MP_CMD_ARG_INT, {.i = -2}} } }, - { MP_CMD_SUB_FILE, "sub_file", 0, { { MP_CMD_ARG_INT, {.i = -2}} } }, - { MP_CMD_SUB_LOG, "sub_log", 0 }, - { MP_CMD_SUB_SCALE, "sub_scale", 1, { {MP_CMD_ARG_FLOAT}, {MP_CMD_ARG_INT} } }, + { MP_CMD_SEEK, "seek", { ARG_FLOAT, OARG_INT(0), OARG_INT(0) } }, + { MP_CMD_EDL_MARK, "edl_mark", }, + { MP_CMD_AUDIO_DELAY, "audio_delay", { ARG_FLOAT, OARG_INT(0) } }, + { MP_CMD_SPEED_INCR, "speed_incr", { ARG_FLOAT } }, + { MP_CMD_SPEED_MULT, "speed_mult", { ARG_FLOAT } }, + { MP_CMD_SPEED_SET, "speed_set", { ARG_FLOAT } }, + { MP_CMD_QUIT, "quit", { OARG_INT(0) } }, + { MP_CMD_STOP, "stop", }, + { MP_CMD_PAUSE, "pause", }, + { MP_CMD_FRAME_STEP, "frame_step", }, + { MP_CMD_PLAY_TREE_STEP, "pt_step", { ARG_INT, OARG_INT(0) } }, + { MP_CMD_PLAY_TREE_UP_STEP, "pt_up_step", { ARG_INT, OARG_INT(0) } }, + { MP_CMD_PLAY_ALT_SRC_STEP, "alt_src_step", { ARG_INT } }, + { MP_CMD_LOOP, "loop", { ARG_INT, OARG_INT(0) } }, + { MP_CMD_SUB_DELAY, "sub_delay", { ARG_FLOAT, OARG_INT(0) } }, + { MP_CMD_SUB_STEP, "sub_step", { ARG_INT, OARG_INT(0) } }, + { MP_CMD_OSD, "osd", { OARG_INT(-1) } }, + { MP_CMD_OSD_SHOW_TEXT, "osd_show_text", { ARG_STRING, OARG_INT(-1), OARG_INT(0) } }, + { MP_CMD_OSD_SHOW_PROPERTY_TEXT, "osd_show_property_text", { ARG_STRING, OARG_INT(-1), OARG_INT(0) } }, + { MP_CMD_OSD_SHOW_PROGRESSION, "osd_show_progression", }, + { MP_CMD_VOLUME, "volume", { ARG_FLOAT, OARG_INT(0) } }, + { MP_CMD_BALANCE, "balance", { ARG_FLOAT, OARG_INT(0) } }, + { MP_CMD_MIXER_USEMASTER, "use_master", }, + { MP_CMD_MUTE, "mute", { OARG_INT(-1) } }, + { MP_CMD_CONTRAST, "contrast", { ARG_INT, OARG_INT(0) } }, + { MP_CMD_GAMMA, "gamma", { ARG_INT, OARG_INT(0) } }, + { MP_CMD_BRIGHTNESS, "brightness", { ARG_INT, OARG_INT(0) } }, + { MP_CMD_HUE, "hue", { ARG_INT, OARG_INT(0) } }, + { MP_CMD_SATURATION, "saturation", { ARG_INT, OARG_INT(0) } }, + { MP_CMD_FRAMEDROPPING, "frame_drop", { OARG_INT(-1) } }, + { MP_CMD_SUB_POS, "sub_pos", { ARG_INT, OARG_INT(0) } }, + { MP_CMD_SUB_ALIGNMENT, "sub_alignment", { OARG_INT(-1) } }, + { MP_CMD_SUB_VISIBILITY, "sub_visibility", { OARG_INT(-1) } }, + { MP_CMD_SUB_LOAD, "sub_load", { ARG_STRING } }, + { MP_CMD_SUB_REMOVE, "sub_remove", { OARG_INT(-1) } }, + { MP_CMD_SUB_SELECT, "vobsub_lang", { OARG_INT(-2) } }, // for compatibility + { MP_CMD_SUB_SELECT, "sub_select", { OARG_INT(-2) } }, + { MP_CMD_SUB_SOURCE, "sub_source", { OARG_INT(-2) } }, + { MP_CMD_SUB_VOB, "sub_vob", { OARG_INT(-2) } }, + { MP_CMD_SUB_DEMUX, "sub_demux", { OARG_INT(-2) } }, + { MP_CMD_SUB_FILE, "sub_file", { OARG_INT(-2) } }, + { MP_CMD_SUB_LOG, "sub_log", }, + { MP_CMD_SUB_SCALE, "sub_scale", { ARG_FLOAT, OARG_INT(0) } }, #ifdef CONFIG_ASS - { MP_CMD_ASS_USE_MARGINS, "ass_use_margins", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, + { MP_CMD_ASS_USE_MARGINS, "ass_use_margins", { OARG_INT(-1) } }, #endif - { MP_CMD_GET_PERCENT_POS, "get_percent_pos", 0 }, - { MP_CMD_GET_TIME_POS, "get_time_pos", 0 }, - { MP_CMD_GET_TIME_LENGTH, "get_time_length", 0 }, - { MP_CMD_GET_FILENAME, "get_file_name", 0 }, - { MP_CMD_GET_VIDEO_CODEC, "get_video_codec", 0 }, - { MP_CMD_GET_VIDEO_BITRATE, "get_video_bitrate", 0 }, - { MP_CMD_GET_VIDEO_RESOLUTION, "get_video_resolution", 0 }, - { MP_CMD_GET_AUDIO_CODEC, "get_audio_codec", 0 }, - { MP_CMD_GET_AUDIO_BITRATE, "get_audio_bitrate", 0 }, - { MP_CMD_GET_AUDIO_SAMPLES, "get_audio_samples", 0 }, - { MP_CMD_GET_META_TITLE, "get_meta_title", 0 }, - { MP_CMD_GET_META_ARTIST, "get_meta_artist", 0 }, - { MP_CMD_GET_META_ALBUM, "get_meta_album", 0 }, - { MP_CMD_GET_META_YEAR, "get_meta_year", 0 }, - { MP_CMD_GET_META_COMMENT, "get_meta_comment", 0 }, - { MP_CMD_GET_META_TRACK, "get_meta_track", 0 }, - { MP_CMD_GET_META_GENRE, "get_meta_genre", 0 }, - { MP_CMD_SWITCH_AUDIO, "switch_audio", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, - { MP_CMD_SWITCH_ANGLE, "switch_angle", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, - { MP_CMD_SWITCH_TITLE, "switch_title", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, + { MP_CMD_GET_PERCENT_POS, "get_percent_pos", }, + { MP_CMD_GET_TIME_POS, "get_time_pos", }, + { MP_CMD_GET_TIME_LENGTH, "get_time_length", }, + { MP_CMD_GET_FILENAME, "get_file_name", }, + { MP_CMD_GET_VIDEO_CODEC, "get_video_codec", }, + { MP_CMD_GET_VIDEO_BITRATE, "get_video_bitrate", }, + { MP_CMD_GET_VIDEO_RESOLUTION, "get_video_resolution", }, + { MP_CMD_GET_AUDIO_CODEC, "get_audio_codec", }, + { MP_CMD_GET_AUDIO_BITRATE, "get_audio_bitrate", }, + { MP_CMD_GET_AUDIO_SAMPLES, "get_audio_samples", }, + { MP_CMD_GET_META_TITLE, "get_meta_title", }, + { MP_CMD_GET_META_ARTIST, "get_meta_artist", }, + { MP_CMD_GET_META_ALBUM, "get_meta_album", }, + { MP_CMD_GET_META_YEAR, "get_meta_year", }, + { MP_CMD_GET_META_COMMENT, "get_meta_comment", }, + { MP_CMD_GET_META_TRACK, "get_meta_track", }, + { MP_CMD_GET_META_GENRE, "get_meta_genre", }, + { MP_CMD_SWITCH_AUDIO, "switch_audio", { OARG_INT(-1) } }, + { MP_CMD_SWITCH_ANGLE, "switch_angle", { OARG_INT(-1) } }, + { MP_CMD_SWITCH_TITLE, "switch_title", { OARG_INT(-1) } }, #ifdef CONFIG_TV - { MP_CMD_TV_START_SCAN, "tv_start_scan", 0 }, - { MP_CMD_TV_STEP_CHANNEL, "tv_step_channel", 1, { {MP_CMD_ARG_INT} } }, - { MP_CMD_TV_STEP_NORM, "tv_step_norm", 0 }, - { MP_CMD_TV_STEP_CHANNEL_LIST, "tv_step_chanlist", 0 }, - { MP_CMD_TV_SET_CHANNEL, "tv_set_channel", 1, { {MP_CMD_ARG_STRING} } }, - { MP_CMD_TV_LAST_CHANNEL, "tv_last_channel", 0 }, - { MP_CMD_TV_SET_FREQ, "tv_set_freq", 1, { {MP_CMD_ARG_FLOAT} } }, - { MP_CMD_TV_STEP_FREQ, "tv_step_freq", 1, { {MP_CMD_ARG_FLOAT} } }, - { MP_CMD_TV_SET_NORM, "tv_set_norm", 1, { {MP_CMD_ARG_STRING} } }, - { MP_CMD_TV_SET_BRIGHTNESS, "tv_set_brightness", 1, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT, {.i = 1}} } }, - { MP_CMD_TV_SET_CONTRAST, "tv_set_contrast", 1, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT, {.i = 1}} } }, - { MP_CMD_TV_SET_HUE, "tv_set_hue", 1, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT, {.i = 1}} } }, - { MP_CMD_TV_SET_SATURATION, "tv_set_saturation", 1, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT, {.i = 1}} } }, + { MP_CMD_TV_START_SCAN, "tv_start_scan", }, + { MP_CMD_TV_STEP_CHANNEL, "tv_step_channel", { ARG_INT } }, + { MP_CMD_TV_STEP_NORM, "tv_step_norm", }, + { MP_CMD_TV_STEP_CHANNEL_LIST, "tv_step_chanlist", }, + { MP_CMD_TV_SET_CHANNEL, "tv_set_channel", { ARG_STRING } }, + { MP_CMD_TV_LAST_CHANNEL, "tv_last_channel", }, + { MP_CMD_TV_SET_FREQ, "tv_set_freq", { ARG_FLOAT } }, + { MP_CMD_TV_STEP_FREQ, "tv_step_freq", { ARG_FLOAT } }, + { MP_CMD_TV_SET_NORM, "tv_set_norm", { ARG_STRING } }, + { MP_CMD_TV_SET_BRIGHTNESS, "tv_set_brightness", { ARG_INT, OARG_INT(1) } }, + { MP_CMD_TV_SET_CONTRAST, "tv_set_contrast", { ARG_INT, OARG_INT(1) } }, + { MP_CMD_TV_SET_HUE, "tv_set_hue", { ARG_INT, OARG_INT(1) } }, + { MP_CMD_TV_SET_SATURATION, "tv_set_saturation", { ARG_INT, OARG_INT(1) } }, #endif - { MP_CMD_SUB_FORCED_ONLY, "forced_subs_only", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, + { MP_CMD_SUB_FORCED_ONLY, "forced_subs_only", { OARG_INT(-1) } }, #ifdef CONFIG_DVBIN - { MP_CMD_DVB_SET_CHANNEL, "dvb_set_channel", 2, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT} } }, + { MP_CMD_DVB_SET_CHANNEL, "dvb_set_channel", { ARG_INT, ARG_INT } }, #endif - { MP_CMD_SWITCH_RATIO, "switch_ratio", 0, { {MP_CMD_ARG_FLOAT} } }, - { MP_CMD_VO_FULLSCREEN, "vo_fullscreen", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, - { MP_CMD_VO_ONTOP, "vo_ontop", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, - { MP_CMD_VO_ROOTWIN, "vo_rootwin", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, - { MP_CMD_VO_BORDER, "vo_border", 0, { {MP_CMD_ARG_INT, {.i = -1}} } }, - { MP_CMD_SCREENSHOT, "screenshot", 0, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_PANSCAN, "panscan",1, { {MP_CMD_ARG_FLOAT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_SWITCH_VSYNC, "switch_vsync", 0, { {MP_CMD_ARG_INT} } }, - { MP_CMD_LOADFILE, "loadfile", 1, { {MP_CMD_ARG_STRING}, {MP_CMD_ARG_INT} } }, - { MP_CMD_LOADLIST, "loadlist", 1, { {MP_CMD_ARG_STRING}, {MP_CMD_ARG_INT} } }, - { MP_CMD_PLAY_TREE_CLEAR, "pt_clear", 0 }, - { MP_CMD_RUN, "run", 1, { {MP_CMD_ARG_STRING} } }, - { MP_CMD_CAPTURING, "capturing", 0 }, - { MP_CMD_VF_CHANGE_RECTANGLE, "change_rectangle", 2, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_TV_TELETEXT_ADD_DEC, "teletext_add_dec", 1, { {MP_CMD_ARG_STRING} } }, - { MP_CMD_TV_TELETEXT_GO_LINK, "teletext_go_link", 1, { {MP_CMD_ARG_INT} } }, + { MP_CMD_SWITCH_RATIO, "switch_ratio", { OARG_FLOAT(0) } }, + { MP_CMD_VO_FULLSCREEN, "vo_fullscreen", { OARG_INT(-1) } }, + { MP_CMD_VO_ONTOP, "vo_ontop", { OARG_INT(-1) } }, + { MP_CMD_VO_ROOTWIN, "vo_rootwin", { OARG_INT(-1) } }, + { MP_CMD_VO_BORDER, "vo_border", { OARG_INT(-1) } }, + { MP_CMD_SCREENSHOT, "screenshot", { OARG_INT(0), OARG_INT(0) } }, + { MP_CMD_PANSCAN, "panscan", { ARG_FLOAT, OARG_INT(0) } }, + { MP_CMD_SWITCH_VSYNC, "switch_vsync", { OARG_INT(0) } }, + { MP_CMD_LOADFILE, "loadfile", { ARG_STRING, OARG_INT(0) } }, + { MP_CMD_LOADLIST, "loadlist", { ARG_STRING, OARG_INT(0) } }, + { MP_CMD_PLAY_TREE_CLEAR, "pt_clear", }, + { MP_CMD_RUN, "run", { ARG_STRING } }, + { MP_CMD_CAPTURING, "capturing", }, + { MP_CMD_VF_CHANGE_RECTANGLE, "change_rectangle", { ARG_INT, ARG_INT } }, + { MP_CMD_TV_TELETEXT_ADD_DEC, "teletext_add_dec", { ARG_STRING } }, + { MP_CMD_TV_TELETEXT_GO_LINK, "teletext_go_link", { ARG_INT } }, #ifdef CONFIG_DVDNAV - { MP_CMD_DVDNAV, "dvdnav", 1, { {MP_CMD_ARG_STRING} } }, + { MP_CMD_DVDNAV, "dvdnav", { ARG_STRING } }, #endif - { MP_CMD_GET_VO_FULLSCREEN, "get_vo_fullscreen", 0 }, - { MP_CMD_GET_SUB_VISIBILITY, "get_sub_visibility", 0 }, - { MP_CMD_KEYDOWN_EVENTS, "key_down_event", 1, { {MP_CMD_ARG_INT} } }, - { MP_CMD_SET_PROPERTY, "set_property", 2, { {MP_CMD_ARG_STRING}, {MP_CMD_ARG_STRING} } }, - { MP_CMD_SET_PROPERTY_OSD, "set_property_osd", 2, { {MP_CMD_ARG_STRING}, {MP_CMD_ARG_STRING} } }, - { MP_CMD_GET_PROPERTY, "get_property", 1, { {MP_CMD_ARG_STRING} } }, - { MP_CMD_STEP_PROPERTY, "step_property", 1, { {MP_CMD_ARG_STRING}, {MP_CMD_ARG_FLOAT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_STEP_PROPERTY_OSD, "step_property_osd", 1, { {MP_CMD_ARG_STRING}, {MP_CMD_ARG_FLOAT}, {MP_CMD_ARG_INT} } }, - - { MP_CMD_SEEK_CHAPTER, "seek_chapter", 1, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT} } }, - { MP_CMD_SET_MOUSE_POS, "set_mouse_pos", 2, { {MP_CMD_ARG_INT}, {MP_CMD_ARG_INT} } }, - - { MP_CMD_AF_SWITCH, "af_switch", 1, { {MP_CMD_ARG_STRING} } }, - { MP_CMD_AF_ADD, "af_add", 1, { {MP_CMD_ARG_STRING} } }, - { MP_CMD_AF_DEL, "af_del", 1, { {MP_CMD_ARG_STRING} } }, - { MP_CMD_AF_CLR, "af_clr", 0 }, - { MP_CMD_AF_CMDLINE, "af_cmdline", 2, { {MP_CMD_ARG_STRING}, {MP_CMD_ARG_STRING} } }, - + { MP_CMD_GET_VO_FULLSCREEN, "get_vo_fullscreen", }, + { MP_CMD_GET_SUB_VISIBILITY, "get_sub_visibility", }, + { MP_CMD_KEYDOWN_EVENTS, "key_down_event", { ARG_INT } }, + { MP_CMD_SET_PROPERTY, "set_property", { ARG_STRING, ARG_STRING } }, + { MP_CMD_SET_PROPERTY_OSD, "set_property_osd", { ARG_STRING, ARG_STRING } }, + { MP_CMD_GET_PROPERTY, "get_property", { ARG_STRING } }, + { MP_CMD_STEP_PROPERTY, "step_property", { ARG_STRING, OARG_FLOAT(0), OARG_INT(0) } }, + { MP_CMD_STEP_PROPERTY_OSD, "step_property_osd", { ARG_STRING, OARG_FLOAT(0), OARG_INT(0) } }, + + { MP_CMD_SEEK_CHAPTER, "seek_chapter", { ARG_INT, OARG_INT(0) } }, + { MP_CMD_SET_MOUSE_POS, "set_mouse_pos", { ARG_INT, ARG_INT } }, + + { MP_CMD_AF_SWITCH, "af_switch", { ARG_STRING } }, + { MP_CMD_AF_ADD, "af_add", { ARG_STRING } }, + { MP_CMD_AF_DEL, "af_del", { ARG_STRING } }, + { MP_CMD_AF_CLR, "af_clr", }, + { MP_CMD_AF_CMDLINE, "af_cmdline", { ARG_STRING, ARG_STRING } }, {0} }; @@ -618,6 +620,8 @@ struct input_ctx { struct cmd_queue key_cmd_queue; struct cmd_queue control_cmd_queue; + + int wakeup_pipe[2]; }; @@ -990,10 +994,14 @@ mp_cmd_t *mp_input_parse_cmd(char *str) } cmd->nargs = i; - if (cmd_def->nargs > cmd->nargs) { - mp_tmsg(MSGT_INPUT, MSGL_ERR, "Command %s requires at least %d " + int min_args; + for (min_args = 0; min_args < MP_CMD_MAX_ARGS + && cmd_def->args[min_args].type + && !cmd_def->args[min_args].optional; min_args++); + if (cmd->nargs < min_args) { + mp_tmsg(MSGT_INPUT, MSGL_ERR, "Command \"%s\" requires at least %d " "arguments, we found only %d so far.\n", cmd_def->name, - cmd_def->nargs, cmd->nargs); + min_args, cmd->nargs); goto error; } @@ -1116,6 +1124,13 @@ static int default_cmd_func(int fd, char *buf, int l) } } +static int read_wakeup(void *ctx, int fd) +{ + char buf[100]; + read(fd, buf, sizeof(buf)); + return MP_INPUT_NOTHING; +} + static char *find_bind_for_key(const struct cmd_bind *binds, int n, int *keys) { @@ -1138,7 +1153,7 @@ static char *find_bind_for_key(const struct cmd_bind *binds, int n, int *keys) } static struct cmd_bind_section *get_bind_section(struct input_ctx *ictx, - char *section) + char *section) |