From efb50daf6eefac3b2eb36ec6a3ffb92889b98122 Mon Sep 17 00:00:00 2001 From: albeu Date: Thu, 23 Mar 2006 01:22:43 +0000 Subject: Convert fullscreen, panscan, color controls, ontop, rootwin, border, framedrop and vsync to properties. Also add a couple of video related properties like width, height, etc. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@17929 b3059339-0415-0410-9bf9-f77b7e298cf2 --- help/help_mp-en.h | 19 ++- input/input.c | 8 +- mplayer.c | 403 ++++++++++++++++++++++++++++-------------------------- 3 files changed, 228 insertions(+), 202 deletions(-) diff --git a/help/help_mp-en.h b/help/help_mp-en.h index 49acb47bc0..cad7493e29 100644 --- a/help/help_mp-en.h +++ b/help/help_mp-en.h @@ -215,13 +215,6 @@ static char help_text[]= #define MSGTR_OSDSubPosition "Sub position: %d/100" #define MSGTR_OSDSubAlignment "Sub alignment: %s" #define MSGTR_OSDSpeed "Speed: x %6.2f" -#define MSGTR_OSDStayOnTop "Stay on top: %s" -#define MSGTR_OSDRootwin "Rootwin: %s" -#define MSGTR_OSDBorder "Border: %s" -#define MSGTR_OSDFramedrop "Framedropping: %s" -#define MSGTR_OSDFramedropOn "on" -#define MSGTR_OSDFramedropHard "hard" -#define MSGTR_OSDFramedropOff "off" #define MSGTR_OSDosd "OSD: %s" #define MSGTR_OSDSubBottom "bottom" #define MSGTR_OSDSubCenter "center" @@ -231,13 +224,25 @@ static char help_text[]= #define MSGTR_Enabled "enabled" #define MSGTR_EnabledEdl "enabled (edl)" #define MSGTR_Disabled "disabled" +#define MSGTR_HardFrameDrop "hard" // osd bar names #define MSGTR_Volume "Volume" +#define MSGTR_Panscan "Panscan" +#define MSGTR_Gamma "Gamma" +#define MSGTR_Brightness "Brightness" +#define MSGTR_Contrast "Contrast" +#define MSGTR_Saturation "Saturation" +#define MSGTR_Hue "Hue" // property state #define MSGTR_MuteStatus "Mute: %s" #define MSGTR_AVDelayStatus "A-V delay: %s" +#define MSGTR_OnTopStatus "Stay on top: %s" +#define MSGTR_RootwinStatus "Rootwin: %s" +#define MSGTR_BorderStatus "Border: %s" +#define MSGTR_FramedroppingStatus "Framedropping: %s" +#define MSGTR_VSyncStatus "VSync: %s" // mencoder.c: diff --git a/input/input.c b/input/input.c index 8bb2deabad..eb71f6b48c 100644 --- a/input/input.c +++ b/input/input.c @@ -105,10 +105,10 @@ static mp_cmd_t mp_cmds[] = { { MP_CMD_DVB_SET_CHANNEL, "dvb_set_channel", 2, { {MP_CMD_ARG_INT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}}}}, #endif { MP_CMD_SWITCH_RATIO, "switch_ratio", 0, { {MP_CMD_ARG_FLOAT,{0}}, {-1,{0}} } }, - { MP_CMD_VO_FULLSCREEN, "vo_fullscreen", 0, { {-1,{0}} } }, - { MP_CMD_VO_ONTOP, "vo_ontop", 0, { {-1,{0}} } }, - { MP_CMD_VO_ROOTWIN, "vo_rootwin", 0, { {-1,{0}} } }, - { MP_CMD_VO_BORDER, "vo_border", 0, { {-1,{0}} } }, + { MP_CMD_VO_FULLSCREEN, "vo_fullscreen", 0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } }, + { MP_CMD_VO_ONTOP, "vo_ontop", 0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } }, + { MP_CMD_VO_ROOTWIN, "vo_rootwin", 0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } }, + { MP_CMD_VO_BORDER, "vo_border", 0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } }, { MP_CMD_SCREENSHOT, "screenshot", 0, { {-1,{0}} } }, { MP_CMD_PANSCAN, "panscan",1, { {MP_CMD_ARG_FLOAT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } }, { MP_CMD_SWITCH_VSYNC, "switch_vsync", 0, { {MP_CMD_ARG_INT,{0}}, {-1,{0}} } }, diff --git a/mplayer.c b/mplayer.c index daf24046ad..1a7edf413c 100644 --- a/mplayer.c +++ b/mplayer.c @@ -1065,10 +1065,6 @@ static void log_sub(void){ // These will later be implemented via properties and removed -#define OSD_MSG_FRAMEDROPPING 101 -#define OSD_MSG_ONTOP 102 -#define OSD_MSG_ROOTWIN 103 -#define OSD_MSG_BORDER 104 #define OSD_MSG_SUB_POS 105 #define OSD_MSG_SUB_ALIGN 106 #define OSD_MSG_SUB_VISIBLE 107 @@ -1516,6 +1512,167 @@ static int mp_property_channels(m_option_t* prop,int action,void* arg) { return m_property_int_ro(prop,action,arg,sh_audio->channels); } +// Video properties + +static int mp_property_fullscreen(m_option_t* prop,int action,void* arg) { + + if(!video_out) return M_PROPERTY_UNAVAILABLE; + + switch(action) { + case M_PROPERTY_SET: + if(!arg) return 0; + M_PROPERTY_CLAMP(prop,*(int*)arg); + if(vo_fs == !!*(int*)arg) return 1; + case M_PROPERTY_STEP_UP: + case M_PROPERTY_STEP_DOWN: +#ifdef HAVE_NEW_GUI + if(use_gui) guiGetEvent(guiIEvent,(char*)MP_CMD_GUI_FULLSCREEN); + else +#endif + if(vo_config_count) video_out->control(VOCTRL_FULLSCREEN, 0); + return 1; + default: + return m_property_flag(prop,action,arg,&vo_fs); + } +} + +static int mp_property_panscan(m_option_t* prop,int action,void* arg) { + + if(!video_out || video_out->control(VOCTRL_GET_PANSCAN,NULL ) != VO_TRUE) + return M_PROPERTY_UNAVAILABLE; + + switch(action) { + case M_PROPERTY_SET: + if(!arg) return 0; + M_PROPERTY_CLAMP(prop,*(float*)arg); + vo_panscan = *(float*)arg; + video_out->control(VOCTRL_SET_PANSCAN,NULL); + return 1; + case M_PROPERTY_STEP_UP: + case M_PROPERTY_STEP_DOWN: + vo_panscan += (arg ? *(float*)arg : 0.1) * + (action == M_PROPERTY_STEP_DOWN ? -1 : 1); + if(vo_panscan > 1) vo_panscan = 1; + else if(vo_panscan < 0) vo_panscan = 0; + video_out->control(VOCTRL_SET_PANSCAN,NULL); + return 1; + default: + return m_property_float_range(prop,action,arg,&vo_panscan); + } +} + + +static int mp_property_vo_flag(m_option_t* prop,int action,void* arg, + int vo_ctrl,int* vo_var) { + + if(!video_out) return M_PROPERTY_UNAVAILABLE; + + switch(action) { + case M_PROPERTY_SET: + if(!arg) return 0; + M_PROPERTY_CLAMP(prop,*(int*)arg); + if(*vo_var == !!*(int*)arg) return 1; + case M_PROPERTY_STEP_UP: + case M_PROPERTY_STEP_DOWN: + if(vo_config_count) video_out->control(vo_ctrl, 0); + return 1; + default: + return m_property_flag(prop,action,arg,vo_var); + } +} + +static int mp_property_ontop(m_option_t* prop,int action,void* arg) { + return mp_property_vo_flag(prop,action,arg,VOCTRL_ONTOP,&vo_ontop); +} + +static int mp_property_rootwin(m_option_t* prop,int action,void* arg) { + return mp_property_vo_flag(prop,action,arg,VOCTRL_ROOTWIN,&vo_rootwin); +} + +static int mp_property_border(m_option_t* prop,int action,void* arg) { + return mp_property_vo_flag(prop,action,arg,VOCTRL_BORDER,&vo_border); +} + +static int mp_property_framedropping(m_option_t* prop,int action,void* arg) { + + if(!sh_video) return M_PROPERTY_UNAVAILABLE; + + switch(action) { + case M_PROPERTY_PRINT: + if(!arg) return 0; + *(char**)arg = strdup(frame_dropping == 1 ? MSGTR_Enabled : + (frame_dropping == 2 ? MSGTR_HardFrameDrop : MSGTR_Disabled)); + return 1; + default: + return m_property_choice(prop,action,arg,&frame_dropping); + } +} + +static int mp_property_gamma(m_option_t* prop,int action,void* arg) { + int* gamma = prop->priv; + + if(!sh_video) return M_PROPERTY_UNAVAILABLE; + + if(gamma[0] == 1000) { + gamma[0] = 0; + get_video_colors (sh_video, prop->name, gamma); + } + + switch(action) { + case M_PROPERTY_SET: + if(!arg) return 0; + M_PROPERTY_CLAMP(prop,*(int*)arg); + *gamma = *(int*)arg; + set_video_colors(sh_video, prop->name, *gamma); + return 1; + case M_PROPERTY_GET: + if(!arg) return 0; + return get_video_colors (sh_video, prop->name, arg); + case M_PROPERTY_STEP_UP: + case M_PROPERTY_STEP_DOWN: + *gamma += (arg ? *(int*)arg : 1) * + (action == M_PROPERTY_STEP_DOWN ? -1 : 1); + M_PROPERTY_CLAMP(prop,*gamma); + return set_video_colors(sh_video, prop->name, *gamma); + } + return M_PROPERTY_NOT_IMPLEMENTED; +} + +static int mp_property_vsync(m_option_t* prop,int action,void* arg) { + return m_property_flag(prop,action,arg,&vo_vsync); +} + +static int mp_property_video_format(m_option_t* prop,int action,void* arg) { + if(!sh_video) return M_PROPERTY_UNAVAILABLE; + return m_property_int_ro(prop,action,arg,sh_video->format); +} + +static int mp_property_video_bitrate(m_option_t* prop,int action,void* arg) { + if(!sh_video) return M_PROPERTY_UNAVAILABLE; + return m_property_int_ro(prop,action,arg,sh_video->i_bps); +} + + +static int mp_property_width(m_option_t* prop,int action,void* arg) { + if(!sh_video) return M_PROPERTY_UNAVAILABLE; + return m_property_int_ro(prop,action,arg,sh_video->disp_w); +} + +static int mp_property_height(m_option_t* prop,int action,void* arg) { + if(!sh_video) return M_PROPERTY_UNAVAILABLE; + return m_property_int_ro(prop,action,arg,sh_video->disp_h); +} + +static int mp_property_fps(m_option_t* prop,int action,void* arg) { + if(!sh_video) return M_PROPERTY_UNAVAILABLE; + return m_property_float_ro(prop,action,arg,sh_video->fps); +} + +static int mp_property_aspect(m_option_t* prop,int action,void* arg) { + if(!sh_video) return M_PROPERTY_UNAVAILABLE; + return m_property_float_ro(prop,action,arg,sh_video->aspect); +} + static m_option_t mp_properties[] = { // General @@ -1548,6 +1705,44 @@ static m_option_t mp_properties[] = { { "channels", mp_property_channels, CONF_TYPE_INT, 0, 0, 0, NULL }, + // Video + { "fullscreen", mp_property_fullscreen, CONF_TYPE_FLAG, + M_OPT_RANGE, 0, 1, NULL }, + { "ontop", mp_property_ontop, CONF_TYPE_FLAG, + M_OPT_RANGE, 0, 1, NULL }, + { "rootwin", mp_property_rootwin, CONF_TYPE_FLAG, + M_OPT_RANGE, 0, 1, NULL }, + { "border", mp_property_border, CONF_TYPE_FLAG, + M_OPT_RANGE, 0, 1, NULL }, + { "framedropping", mp_property_framedropping, CONF_TYPE_INT, + M_OPT_RANGE, 0, 2, NULL }, + { "gamma", mp_property_gamma, CONF_TYPE_INT, + M_OPT_RANGE, -100, 100, &vo_gamma_gamma }, + { "brightness", mp_property_gamma, CONF_TYPE_INT, + M_OPT_RANGE, -100, 100, &vo_gamma_brightness }, + { "contrast", mp_property_gamma, CONF_TYPE_INT, + M_OPT_RANGE, -100, 100, &vo_gamma_contrast }, + { "saturation", mp_property_gamma, CONF_TYPE_INT, + M_OPT_RANGE, -100, 100, &vo_gamma_saturation }, + { "hue", mp_property_gamma, CONF_TYPE_INT, + M_OPT_RANGE, -100, 100, &vo_gamma_hue }, + { "panscan", mp_property_panscan, CONF_TYPE_FLOAT, + M_OPT_RANGE, 0, 1, NULL }, + { "vsync", mp_property_vsync, CONF_TYPE_FLAG, + M_OPT_RANGE, 0, 1, NULL }, + { "video_format", mp_property_video_format, CONF_TYPE_INT, + 0, 0, 0, NULL }, + { "video_bitrate", mp_property_video_bitrate, CONF_TYPE_INT, + 0, 0, 0, NULL }, + { "width", mp_property_width, CONF_TYPE_INT, + 0, 0, 0, NULL }, + { "height", mp_property_height, CONF_TYPE_INT, + 0, 0, 0, NULL }, + { "fps", mp_property_fps, CONF_TYPE_FLOAT, + 0, 0, 0, NULL }, + { "aspect", mp_property_aspect, CONF_TYPE_FLOAT, + 0, 0, 0, NULL }, + { NULL, NULL, NULL, 0, 0, 0, NULL } }; @@ -1592,6 +1787,19 @@ static struct { { "volume", MP_CMD_VOLUME, 0, OSD_VOLUME, -1, MSGTR_Volume }, { "mute", MP_CMD_MUTE, 1, 0, -1, MSGTR_MuteStatus }, { "audio_delay", MP_CMD_AUDIO_DELAY, 0, 0, -1, MSGTR_AVDelayStatus }, + // video + { "fullscreen", MP_CMD_VO_FULLSCREEN, 1, 0, -1, NULL }, + { "panscan", MP_CMD_PANSCAN, 0, OSD_PANSCAN, -1, MSGTR_Panscan }, + { "ontop", MP_CMD_VO_ONTOP, 1, 0, -1, MSGTR_OnTopStatus }, + { "rootwin", MP_CMD_VO_ROOTWIN, 1, 0, -1, MSGTR_RootwinStatus }, + { "border", MP_CMD_VO_BORDER, 1, 0, -1, MSGTR_BorderStatus }, + { "framedropping", MP_CMD_FRAMEDROPPING, 1, 0, -1, MSGTR_FramedroppingStatus }, + { "gamma", MP_CMD_GAMMA, 0, OSD_BRIGHTNESS, -1, MSGTR_Gamma }, + { "brightness", MP_CMD_BRIGHTNESS, 0, OSD_BRIGHTNESS, -1, MSGTR_Brightness }, + { "contrast", MP_CMD_CONTRAST, 0, OSD_CONTRAST, -1, MSGTR_Contrast }, + { "saturation", MP_CMD_SATURATION, 0, OSD_SATURATION, -1, MSGTR_Saturation }, + { "hue", MP_CMD_HUE, 0, OSD_HUE, -1, MSGTR_Hue }, + { "vsync", MP_CMD_SWITCH_VSYNC, 1, 0, -1, MSGTR_VSyncStatus }, { NULL, 0, 0, 0, -1, NULL } }; @@ -3711,138 +3919,6 @@ if (stream->type==STREAMTYPE_DVDNAV && dvd_nav_still) } brk_cmd = 1; } break; - case MP_CMD_GAMMA : { - int v = cmd->args[0].v.i, abs = cmd->args[1].v.i; - - if (!sh_video) - break; - - if (vo_gamma_gamma == 1000) - { - vo_gamma_gamma = 0; - get_video_colors (sh_video, "gamma", &vo_gamma_gamma); - } - - if (abs) - vo_gamma_gamma = v; - else - vo_gamma_gamma += v; - - if (vo_gamma_gamma > 100) - vo_gamma_gamma = 100; - else if (vo_gamma_gamma < -100) - vo_gamma_gamma = -100; - if (set_video_colors(sh_video, "gamma", vo_gamma_gamma)) - set_osd_bar(OSD_BRIGHTNESS,"Gamma",-100,100,vo_gamma_gamma); - } break; - case MP_CMD_BRIGHTNESS : { - int v = cmd->args[0].v.i, abs = cmd->args[1].v.i; - - if (!sh_video) - break; - - if (vo_gamma_brightness == 1000) - { - vo_gamma_brightness = 0; - get_video_colors(sh_video, "brightness", &vo_gamma_brightness); - } - - if (abs) - vo_gamma_brightness = v; - else - vo_gamma_brightness += v; - - if (vo_gamma_brightness > 100) - vo_gamma_brightness = 100; - else if (vo_gamma_brightness < -100) - vo_gamma_brightness = -100; - if(set_video_colors(sh_video, "brightness", vo_gamma_brightness)) - set_osd_bar(OSD_BRIGHTNESS,"Brightness",-100,100,vo_gamma_brightness); - } break; - case MP_CMD_CONTRAST : { - int v = cmd->args[0].v.i, abs = cmd->args[1].v.i; - - if (!sh_video) - break; - - if (vo_gamma_contrast == 1000) - { - vo_gamma_contrast = 0; - get_video_colors(sh_video, "contrast", &vo_gamma_contrast); - } - - if (abs) - vo_gamma_contrast = v; - else - vo_gamma_contrast += v; - - if (vo_gamma_contrast > 100) - vo_gamma_contrast = 100; - else if (vo_gamma_contrast < -100) - vo_gamma_contrast = -100; - if(set_video_colors(sh_video, "contrast", vo_gamma_contrast)) - set_osd_bar(OSD_CONTRAST,"Contrast",-100,100,vo_gamma_contrast); - } break; - case MP_CMD_SATURATION : { - int v = cmd->args[0].v.i, abs = cmd->args[1].v.i; - - if (!sh_video) - break; - - if (vo_gamma_saturation == 1000) - { - vo_gamma_saturation = 0; - get_video_colors(sh_video, "saturation", &vo_gamma_saturation); - } - - if (abs) - vo_gamma_saturation = v; - else - vo_gamma_saturation += v; - - if (vo_gamma_saturation > 100) - vo_gamma_saturation = 100; - else if (vo_gamma_saturation < -100) - vo_gamma_saturation = -100; - if(set_video_colors(sh_video, "saturation", vo_gamma_saturation)) - set_osd_bar(OSD_SATURATION,"Saturation",-100,100,vo_gamma_saturation); - } break; - case MP_CMD_HUE : { - int v = cmd->args[0].v.i, abs = cmd->args[1].v.i; - - if (!sh_video) - break; - - if (vo_gamma_hue == 1000) - { - vo_gamma_hue = 0; - get_video_colors(sh_video, "hue", &vo_gamma_hue); - } - - if (abs) - vo_gamma_hue = v; - else - vo_gamma_hue += v; - - if (vo_gamma_hue > 100) - vo_gamma_hue = 100; - else if (vo_gamma_hue < -100) - vo_gamma_hue = -100; - if(set_video_colors(sh_video, "hue", vo_gamma_hue)) - set_osd_bar(OSD_HUE,"Hue",-100,100,vo_gamma_hue); - } break; - case MP_CMD_FRAMEDROPPING : { - int v = cmd->args[0].v.i; - if(v < 0) - frame_dropping = (frame_dropping+1)%3; - else - frame_dropping = v > 2 ? 2 : v; - set_osd_msg(OSD_MSG_FRAMEDROPPING,1,osd_duration, - MSGTR_OSDFramedrop,(frame_dropping == 1 ? MSGTR_OSDFramedropOn : - (frame_dropping == 2 ? MSGTR_OSDFramedropHard : - MSGTR_OSDFramedropOff))); - //vo_osd_changed(OSDTYPE_SUBTITLE); - } break; #ifdef USE_TV case MP_CMD_TV_SET_FREQ : { if (file_format == DEMUXER_TYPE_TV) @@ -3962,61 +4038,6 @@ if (stream->type==STREAMTYPE_DVDNAV && dvd_nav_still) tv_step_chanlist((tvi_handle_t*)(demuxer->priv)); } break; #endif /* USE_TV */ - case MP_CMD_SWITCH_VSYNC: { - vo_vsync = ( cmd->nargs > 0 )? cmd->args[0].v.i : !vo_vsync; - } break; - case MP_CMD_VO_FULLSCREEN: - { -#ifdef HAVE_NEW_GUI - if ( use_gui ) guiGetEvent( guiIEvent,(char *)MP_CMD_GUI_FULLSCREEN ); - else -#endif - if(video_out && vo_config_count) video_out->control(VOCTRL_FULLSCREEN, 0); - } break; - case MP_CMD_VO_ONTOP: - { - if(video_out && vo_config_count) { - video_out->control(VOCTRL_ONTOP, 0); - set_osd_msg(OSD_MSG_ONTOP,1,osd_duration, - MSGTR_OSDStayOnTop, vo_ontop? MSGTR_OSDenabled : MSGTR_OSDdisabled); - //vo_osd_changed(OSDTYPE_SUBTITLE); - } - - } break; - case MP_CMD_VO_ROOTWIN: - { - if(video_out && vo_config_count) { - video_out->control(VOCTRL_ROOTWIN, 0); - set_osd_msg(OSD_MSG_ROOTWIN,1,osd_duration, - MSGTR_OSDRootwin, vo_rootwin? MSGTR_OSDenabled : MSGTR_OSDdisabled); - //vo_osd_changed(OSDTYPE_SUBTITLE); - } - - } break; - case MP_CMD_VO_BORDER: - { - if(video_out && vo_config_count) { - video_out->control(VOCTRL_BORDER, 0); - set_osd_msg(OSD_MSG_BORDER,1,osd_duration, - MSGTR_OSDBorder, vo_border? MSGTR_OSDenabled : MSGTR_OSDdisabled); - //vo_osd_changed(OSDTYPE_SUBTITLE); - } - - } break; - case MP_CMD_PANSCAN : { - if ( !video_out ) break; - if ( video_out->control( VOCTRL_GET_PANSCAN,NULL ) == VO_TRUE ) - { - int abs= cmd->args[1].v.i; - float v = cmd->args[0].v.f; - float res; - if(abs) res = v; - else res = vo_panscan+v; - vo_panscan = res > 1 ? 1 : res < 0 ? 0 : res; - video_out->control( VOCTRL_SET_PANSCAN,NULL ); - set_osd_bar(OSD_PANSCAN,"Panscan",0,1,vo_panscan); - } - } break; case MP_CMD_SUB_POS: { #ifdef USE_SUB -- cgit v1.2.3