# HG changeset patch # User reimar # Date 1163787381 0 # Node ID c0bcec5150a31066929350c7cc50b8da434e11fd # Parent ef8ac967b43fffd9d51feebbfc6a66ce3187539e Add deinterlace property, patch by Carl Eugen Hoyos (cehoyos [at] rainbow studorg tuwien ac at) with small modifications by me. diff -r ef8ac967b43f -r c0bcec5150a3 input/input.c --- a/input/input.c Fri Nov 17 17:44:51 2006 +0000 +++ b/input/input.c Fri Nov 17 18:16:21 2006 +0000 @@ -371,6 +371,7 @@ { { '7', 0 }, "saturation -1" }, { { '8', 0 }, "saturation 1" }, { { 'd', 0 }, "frame_drop" }, + { { 'D', 0 }, "step_property deinterlace" }, { { 'r', 0 }, "sub_pos -1" }, { { 't', 0 }, "sub_pos +1" }, { { 'a', 0 }, "sub_alignment" }, diff -r ef8ac967b43f -r c0bcec5150a3 libmpcodecs/vf.h --- a/libmpcodecs/vf.h Fri Nov 17 17:44:51 2006 +0000 +++ b/libmpcodecs/vf.h Fri Nov 17 18:16:21 2006 +0000 @@ -80,6 +80,8 @@ #define VFCTRL_INIT_EOSD 15 /* Select EOSD renderer */ #define VFCTRL_DRAW_EOSD 16 /* Render EOSD */ #define VFCTRL_GET_PTS 17 /* Return last pts value that reached vf_vo*/ +#define VFCTRL_SET_DEINTERLACE 18 /* Set deinterlacing status */ +#define VFCTRL_GET_DEINTERLACE 19 /* Get deinterlacing status */ #include "vfcap.h" diff -r ef8ac967b43f -r c0bcec5150a3 libmpcodecs/vf_vo.c --- a/libmpcodecs/vf_vo.c Fri Nov 17 17:44:51 2006 +0000 +++ b/libmpcodecs/vf_vo.c Fri Nov 17 18:16:21 2006 +0000 @@ -76,6 +76,18 @@ static int control(struct vf_instance_s* vf, int request, void* data) { switch(request){ + case VFCTRL_GET_DEINTERLACE: + { + if(!video_out) return CONTROL_FALSE; // vo not configured? + return(video_out->control(VOCTRL_GET_DEINTERLACE, data) + == VO_TRUE) ? CONTROL_TRUE : CONTROL_FALSE; + } + case VFCTRL_SET_DEINTERLACE: + { + if(!video_out) return CONTROL_FALSE; // vo not configured? + return(video_out->control(VOCTRL_SET_DEINTERLACE, data) + == VO_TRUE) ? CONTROL_TRUE : CONTROL_FALSE; + } #ifdef USE_OSD case VFCTRL_DRAW_OSD: if(!vo_config_count) return CONTROL_FALSE; // vo not configured? diff -r ef8ac967b43f -r c0bcec5150a3 libvo/video_out.h --- a/libvo/video_out.h Fri Nov 17 17:44:51 2006 +0000 +++ b/libvo/video_out.h Fri Nov 17 18:16:21 2006 +0000 @@ -65,6 +65,9 @@ int mt, mb, ml, mr; // borders (top, bottom, left, right) } mp_eosd_res_t; +#define VOCTRL_SET_DEINTERLACE 30 +#define VOCTRL_GET_DEINTERLACE 31 + // Vo can be used by xover #define VOCTRL_XOVERLAY_SUPPORT 22 diff -r ef8ac967b43f -r c0bcec5150a3 libvo/vo_xvmc.c --- a/libvo/vo_xvmc.c Fri Nov 17 17:44:51 2006 +0000 +++ b/libvo/vo_xvmc.c Fri Nov 17 18:16:21 2006 +0000 @@ -1379,6 +1379,15 @@ static int control(uint32_t request, void *data, ... ) { switch (request){ + case VOCTRL_GET_DEINTERLACE: + *(int*)data = bob_deinterlace; + return VO_TRUE; + case VOCTRL_SET_DEINTERLACE: + if (*(int*)data == -1) + bob_deinterlace = !bob_deinterlace; + else + bob_deinterlace = *(int*)data; + return VO_TRUE; case VOCTRL_QUERY_FORMAT: return query_format(*((uint32_t*)data)); case VOCTRL_DRAW_IMAGE: diff -r ef8ac967b43f -r c0bcec5150a3 mplayer.c --- a/mplayer.c Fri Nov 17 17:44:51 2006 +0000 +++ b/mplayer.c Fri Nov 17 18:16:21 2006 +0000 @@ -1926,6 +1926,29 @@ } } +static int mp_property_deinterlace(m_option_t* prop,int action,void* arg) { + int toggle = -1; + vf_instance_t *vf; + if (!sh_video || !sh_video->vfilter) return M_PROPERTY_UNAVAILABLE; + vf = sh_video->vfilter; + switch(action) { + case M_PROPERTY_GET: + if(!arg) return M_PROPERTY_ERROR; + vf->control(sh_video->vfilter, VFCTRL_GET_DEINTERLACE, arg); + return M_PROPERTY_OK; + case M_PROPERTY_SET: + if(!arg) return M_PROPERTY_ERROR; + M_PROPERTY_CLAMP(prop,*(int*)arg); + vf->control(sh_video->vfilter, VFCTRL_SET_DEINTERLACE, arg); + return M_PROPERTY_OK; + case M_PROPERTY_STEP_UP: + case M_PROPERTY_STEP_DOWN: + vf->control(sh_video->vfilter, VFCTRL_SET_DEINTERLACE, &toggle); + return M_PROPERTY_OK; + } + return M_PROPERTY_NOT_IMPLEMENTED; +} + /// Panscan (RW) static int mp_property_panscan(m_option_t* prop,int action,void* arg) { @@ -2470,6 +2493,8 @@ // Video { "fullscreen", mp_property_fullscreen, CONF_TYPE_FLAG, M_OPT_RANGE, 0, 1, NULL }, + { "deinterlace", mp_property_deinterlace, 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,