Mercurial > mplayer.hg
changeset 20973:c0bcec5150a3
Add deinterlace property, patch by Carl Eugen Hoyos
(cehoyos [at] rainbow studorg tuwien ac at) with small modifications
by me.
author | reimar |
---|---|
date | Fri, 17 Nov 2006 18:16:21 +0000 |
parents | ef8ac967b43f |
children | 123cdf4a0f73 |
files | input/input.c libmpcodecs/vf.h libmpcodecs/vf_vo.c libvo/video_out.h libvo/vo_xvmc.c mplayer.c |
diffstat | 6 files changed, 52 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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" },
--- 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"
--- 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?
--- 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
--- 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:
--- 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,