[vlc-devel] [PATCH v1 17/33] deinterlace: only support push mode in common deinterlacer code

Steve Lhomme robux4 at ycbcr.xyz
Fri Sep 25 16:46:53 CEST 2020


---
 modules/hw/d3d11/d3d11_deinterlace.c          | 17 +++-------------
 modules/hw/d3d9/dxva2_deinterlace.c           | 13 +++---------
 modules/video_filter/deinterlace/common.c     | 20 ++-----------------
 modules/video_filter/deinterlace/common.h     |  8 +-------
 .../video_filter/deinterlace/deinterlace.c    | 15 ++++----------
 5 files changed, 13 insertions(+), 60 deletions(-)

diff --git a/modules/hw/d3d11/d3d11_deinterlace.c b/modules/hw/d3d11/d3d11_deinterlace.c
index 333c4dfd498..835c56447ca 100644
--- a/modules/hw/d3d11/d3d11_deinterlace.c
+++ b/modules/hw/d3d11/d3d11_deinterlace.c
@@ -161,29 +161,19 @@ static int RenderSinglePic( filter_t *p_filter, picture_t *p_outpic, picture_t *
     return RenderPic( p_filter, p_outpic, p_pic, 0, 0 );
 }
 
-static picture_t *Deinterlace(filter_t *p_filter, picture_t *p_pic)
+static int Deinterlace(filter_t *p_filter, picture_t *p_pic, struct vlc_video_sink *sink)
 {
     filter_sys_t *p_sys = p_filter->p_sys;
 
     d3d11_device_lock( p_sys->d3d_dev );
 
-    picture_t *res = DoDeinterlacing( p_filter, &p_sys->context, p_pic );
+    int res = DoDeinterlacing( p_filter, &p_sys->context, p_pic, sink );
 
     d3d11_device_unlock( p_sys->d3d_dev );
 
     return res;
 }
 
-static int DeinterlaceInto(filter_t *p_filter, picture_t *p_pic, struct vlc_video_sink *sink)
-{
-    filter_sys_t *p_sys = p_filter->p_sys;
-
-    d3d11_device_lock( p_sys->d3d_dev );
-    int res = DoDeinterlacingInto( p_filter, &p_sys->context, p_pic, sink );
-    d3d11_device_unlock( p_sys->d3d_dev );
-    return res;
-}
-
 static const struct filter_mode_t *GetFilterMode(const char *mode)
 {
     if ( mode == NULL || !strcmp( mode, "auto" ) )
@@ -360,8 +350,7 @@ int D3D11OpenDeinterlace(vlc_object_t *obj)
 
     filter->fmt_out.video   = out_fmt;
     filter->vctx_out        = vlc_video_context_Hold(filter->vctx_in);
-    filter->pf_video_filter = Deinterlace;
-    filter->pf_video_filter_into = DeinterlaceInto;
+    filter->pf_video_filter_into = Deinterlace;
     filter->pf_flush        = Flush;
     filter->p_sys = sys;
 
diff --git a/modules/hw/d3d9/dxva2_deinterlace.c b/modules/hw/d3d9/dxva2_deinterlace.c
index cbc8398f821..bdd592d5e23 100644
--- a/modules/hw/d3d9/dxva2_deinterlace.c
+++ b/modules/hw/d3d9/dxva2_deinterlace.c
@@ -262,16 +262,10 @@ static int RenderSinglePic( filter_t *p_filter, picture_t *p_outpic, picture_t *
     return RenderPic( p_filter, p_outpic, p_pic, 0, 0 );
 }
 
-static picture_t *Deinterlace(filter_t *p_filter, picture_t *p_pic)
+static int Deinterlace(filter_t *p_filter, picture_t *p_pic, struct vlc_video_sink *sink)
 {
     filter_sys_t *p_sys = p_filter->p_sys;
-    return DoDeinterlacing( p_filter, &p_sys->context, p_pic );
-}
-
-static int DeinterlaceInto(filter_t *p_filter, picture_t *p_pic, struct vlc_video_sink *sink)
-{
-    filter_sys_t *p_sys = p_filter->p_sys;
-    return DoDeinterlacingInto( p_filter, &p_sys->context, p_pic, sink );
+    return DoDeinterlacing( p_filter, &p_sys->context, p_pic, sink );
 }
 
 static const struct filter_mode_t *GetFilterMode(const char *mode)
@@ -507,8 +501,7 @@ int D3D9OpenDeinterlace(vlc_object_t *obj)
 
     filter->fmt_out.video   = out_fmt;
     filter->vctx_out        = vlc_video_context_Hold(filter->vctx_in);
-    filter->pf_video_filter = Deinterlace;
-    filter->pf_video_filter_into = DeinterlaceInto;
+    filter->pf_video_filter_into = Deinterlace;
     filter->pf_flush        = Flush;
     filter->p_sys = sys;
 
diff --git a/modules/video_filter/deinterlace/common.c b/modules/video_filter/deinterlace/common.c
index 955e88f1e2b..3f856eee738 100644
--- a/modules/video_filter/deinterlace/common.c
+++ b/modules/video_filter/deinterlace/common.c
@@ -358,24 +358,8 @@ drop:
 #endif
 }
 
-picture_t *DoDeinterlacing( filter_t *p_filter,
-                            struct deinterlace_ctx *p_context, picture_t *p_pic )
-{
-    picture_t *p_dst[DEINTERLACE_DST_SIZE];
-    int res = Deinterlace(p_filter, p_context, p_pic, p_dst);
-    if (res != VLC_SUCCESS)
-        return NULL;
-    if (p_dst[0])
-    {
-        // attach pictures consecutively
-        for (size_t i=1; p_dst[i] != NULL && i<ARRAY_SIZE(p_dst); i++)
-            vlc_picture_chain_AppendChain( p_dst[i-1], p_dst[i] );
-    }
-    return p_dst[0];
-}
-
-int DoDeinterlacingInto( filter_t *p_filter, struct deinterlace_ctx *p_context,
-                         picture_t *p_pic, struct vlc_video_sink *sink )
+int DoDeinterlacing( filter_t *p_filter, struct deinterlace_ctx *p_context,
+                     picture_t *p_pic, struct vlc_video_sink *sink )
 {
     picture_t *p_dst[DEINTERLACE_DST_SIZE];
     int res = Deinterlace(p_filter, p_context, p_pic, p_dst);
diff --git a/modules/video_filter/deinterlace/common.h b/modules/video_filter/deinterlace/common.h
index ed989dd1a7d..3b84329ae29 100644
--- a/modules/video_filter/deinterlace/common.h
+++ b/modules/video_filter/deinterlace/common.h
@@ -111,17 +111,11 @@ vlc_tick_t GetFieldDuration( const struct deinterlace_ctx *,
 void GetDeinterlacingOutput( const struct deinterlace_ctx *,
                              video_format_t *p_dst, const video_format_t *p_src );
 
-/**
- * @brief Do the deinterlacing of the picture using pf_render_ordered() or pf_render_single_pic() calls.
- * @return The deinterlaced picture or NULL if it failed
- */
-picture_t *DoDeinterlacing( filter_t *, struct deinterlace_ctx *, picture_t * );
-
 /**
  * @brief Do the deinterlacing of the picture using pf_render_ordered() or pf_render_single_pic() calls.
  * @return VLC_SUCCESS if pictures we pushed to the sink.
  */
-int DoDeinterlacingInto( filter_t *, struct deinterlace_ctx *, picture_t *, struct vlc_video_sink * );
+int DoDeinterlacing( filter_t *, struct deinterlace_ctx *, picture_t *, struct vlc_video_sink * );
 
 /**
  * @brief Flush the deinterlacer context
diff --git a/modules/video_filter/deinterlace/deinterlace.c b/modules/video_filter/deinterlace/deinterlace.c
index 46ecf303e20..a26591e4490 100644
--- a/modules/video_filter/deinterlace/deinterlace.c
+++ b/modules/video_filter/deinterlace/deinterlace.c
@@ -91,7 +91,7 @@
  * @see filter_t
  * @see filter_sys_t
  */
-static picture_t *Deinterlace( filter_t *p_filter, picture_t *p_pic );
+static int Deinterlace(filter_t *, picture_t *, struct vlc_video_sink * );
 
 /**
  * Reads the configuration, sets up and starts the filter.
@@ -446,16 +446,10 @@ picture_t *AllocPicture( filter_t *filter )
 }
 
 /* This is the filter function. See Open(). */
-picture_t *Deinterlace( filter_t *p_filter, picture_t *p_pic )
+static int Deinterlace(filter_t *p_filter, picture_t *p_pic, struct vlc_video_sink *sink)
 {
     filter_sys_t *p_sys = p_filter->p_sys;
-    return DoDeinterlacing( p_filter, &p_sys->context, p_pic );
-}
-
-static int DeinterlaceInto(filter_t *p_filter, picture_t *p_pic, struct vlc_video_sink *sink)
-{
-    filter_sys_t *p_sys = p_filter->p_sys;
-    return DoDeinterlacingInto( p_filter, &p_sys->context, p_pic, sink );
+    return DoDeinterlacing( p_filter, &p_sys->context, p_pic, sink );
 }
 
 /*****************************************************************************
@@ -649,8 +643,7 @@ notsupp:
     }
     p_filter->fmt_out.video = fmt;
     p_filter->fmt_out.i_codec = fmt.i_chroma;
-    p_filter->pf_video_filter = Deinterlace;
-    p_filter->pf_video_filter_into = DeinterlaceInto;
+    p_filter->pf_video_filter_into = Deinterlace;
     p_filter->pf_flush = Flush;
     p_filter->pf_video_mouse  = Mouse;
 
-- 
2.26.2



More information about the vlc-devel mailing list