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,