[vlc-devel] [PATCH 13/15] video_filter:deinterlace: move the deinterlacing parameters in a structure
Steve Lhomme
robux4 at videolabs.io
Fri Jun 30 14:20:06 CEST 2017
---
modules/video_filter/deinterlace/common.c | 22 ++++++++++----------
modules/video_filter/deinterlace/common.h | 10 ++++++---
modules/video_filter/deinterlace/deinterlace.c | 28 +++++++++++++-------------
3 files changed, 32 insertions(+), 28 deletions(-)
diff --git a/modules/video_filter/deinterlace/common.c b/modules/video_filter/deinterlace/common.c
index cfd3a38983..3d144f5fc1 100644
--- a/modules/video_filter/deinterlace/common.c
+++ b/modules/video_filter/deinterlace/common.c
@@ -35,9 +35,9 @@
void InitDeinterlacingContext( struct deinterlace_ctx *p_context )
{
- p_context->b_double_rate = false;
- p_context->b_half_height = false;
- p_context->b_use_frame_history = false;
+ p_context->settings.b_double_rate = false;
+ p_context->settings.b_half_height = false;
+ p_context->settings.b_use_frame_history = false;
p_context->meta[0].pi_date = VLC_TS_INVALID;
p_context->meta[0].pi_nb_fields = 2;
@@ -108,7 +108,7 @@ void GetDeinterlacingOutput( const struct deinterlace_ctx *p_context,
{
*p_dst = *p_src;
- if( p_context->b_half_height )
+ if( p_context->settings.b_half_height )
{
p_dst->i_height /= 2;
p_dst->i_visible_height /= 2;
@@ -116,7 +116,7 @@ void GetDeinterlacingOutput( const struct deinterlace_ctx *p_context,
p_dst->i_sar_den *= 2;
}
- if( p_context->b_double_rate )
+ if( p_context->settings.b_double_rate )
{
p_dst->i_frame_rate *= 2;
}
@@ -151,7 +151,7 @@ picture_t *DoDeinterlacing( filter_t *p_filter,
/* Update the input frame history, if the currently active algorithm
needs it. */
- if( p_context->b_use_frame_history )
+ if( p_context->settings.b_use_frame_history )
{
/* Keep reference for the picture */
picture_t *p_dup = picture_Hold( p_pic );
@@ -192,7 +192,7 @@ picture_t *DoDeinterlacing( filter_t *p_filter,
/* Framerate doublers must not request CUSTOM_PTS, as they need the
original field timings, and need Deinterlace() to allocate the
correct number of output frames. */
- assert( !p_context->b_double_rate );
+ assert( !p_context->settings.b_double_rate );
/* NOTE: i_nb_fields is only used for framerate doublers, so it is
unused in this case. b_top_field_first is only passed to the
@@ -211,7 +211,7 @@ picture_t *DoDeinterlacing( filter_t *p_filter,
framerate doublers. Will be inited
below. Declared here because the
PTS logic needs the result. */
- if( p_context->b_double_rate )
+ if( p_context->settings.b_double_rate )
{
i_double_rate_alloc_end = i_nb_fields;
if( i_nb_fields > DEINTERLACE_DST_SIZE )
@@ -256,11 +256,11 @@ picture_t *DoDeinterlacing( filter_t *p_filter,
Note that now p_dst[i] != NULL
for 0 <= i < i_double_rate_alloc_end. */
}
- assert( p_context->b_double_rate || p_dst[1] == NULL );
+ assert( p_context->settings.b_double_rate || p_dst[1] == NULL );
assert( i_nb_fields > 2 || p_dst[2] == NULL );
/* Render */
- if ( !p_context->b_double_rate )
+ if ( !p_context->settings.b_double_rate )
{
if ( p_context->pf_render_single_pic( p_filter, p_dst[0], p_pic ) )
goto drop;
@@ -294,7 +294,7 @@ picture_t *DoDeinterlacing( filter_t *p_filter,
when i_frame_offset > 0. */
p_dst[0]->date = i_base_pts;
- if( p_context->b_double_rate )
+ if( p_context->settings.b_double_rate )
{
mtime_t i_field_dur = GetFieldDuration( p_context, &p_filter->fmt_out.video, p_pic );
/* Processing all actually allocated output frames. */
diff --git a/modules/video_filter/deinterlace/common.h b/modules/video_filter/deinterlace/common.h
index ad74b5353d..0c5fa91e75 100644
--- a/modules/video_filter/deinterlace/common.h
+++ b/modules/video_filter/deinterlace/common.h
@@ -56,12 +56,16 @@ typedef struct {
#define HISTORY_SIZE (3)
#define CUSTOM_PTS -1
+typedef struct {
+ bool b_double_rate; /**< Shall we double the framerate? */
+ bool b_use_frame_history; /**< Use the input frame history buffer? */
+ bool b_half_height; /**< Shall be divide the height by 2 */
+} deinterlace_algo;
+
struct deinterlace_ctx
{
/* Algorithm behaviour flags */
- bool b_double_rate; /**< Shall we double the framerate? */
- bool b_half_height; /**< Shall be divide the height by 2 */
- bool b_use_frame_history; /**< Use the input frame history buffer? */
+ deinterlace_algo settings;
/**
* Metadata history (PTS, nb_fields, TFF). Used for framerate doublers.
diff --git a/modules/video_filter/deinterlace/deinterlace.c b/modules/video_filter/deinterlace/deinterlace.c
index db7ca39886..1a22191ae3 100644
--- a/modules/video_filter/deinterlace/deinterlace.c
+++ b/modules/video_filter/deinterlace/deinterlace.c
@@ -151,29 +151,29 @@ static void SetFilterMethod( filter_t *p_filter, const char *mode, bool pack )
if ( mode == NULL || !strcmp( mode, "auto" ) )
mode = "x";
- p_sys->context.b_double_rate = false;
- p_sys->context.b_half_height = false;
- p_sys->context.b_use_frame_history = false;
+ p_sys->context.settings.b_double_rate = false;
+ p_sys->context.settings.b_half_height = false;
+ p_sys->context.settings.b_use_frame_history = false;
if( !strcmp( mode, "discard" ) )
{
p_sys->context.pf_render_single_pic = RenderDiscard;
- p_sys->context.b_half_height = true;
+ p_sys->context.settings.b_half_height = true;
}
else if( !strcmp( mode, "bob" ) || !strcmp( mode, "progressive-scan" ) )
{
p_sys->context.pf_render_ordered = RenderBob;
- p_sys->context.b_double_rate = true;
+ p_sys->context.settings.b_double_rate = true;
}
else if( !strcmp( mode, "linear" ) )
{
p_sys->context.pf_render_ordered = RenderLinear;
- p_sys->context.b_double_rate = true;
+ p_sys->context.settings.b_double_rate = true;
}
else if( !strcmp( mode, "mean" ) )
{
p_sys->context.pf_render_single_pic = RenderMean;
- p_sys->context.b_half_height = true;
+ p_sys->context.settings.b_half_height = true;
}
else if( !strcmp( mode, "blend" ) )
{
@@ -188,13 +188,13 @@ static void SetFilterMethod( filter_t *p_filter, const char *mode, bool pack )
else if( !strcmp( mode, "yadif" ) )
{
p_sys->context.pf_render_ordered = RenderYadif;
- p_sys->context.b_use_frame_history = true;
+ p_sys->context.settings.b_use_frame_history = true;
}
else if( !strcmp( mode, "yadif2x" ) )
{
p_sys->context.pf_render_ordered = RenderYadif;
- p_sys->context.b_double_rate = true;
- p_sys->context.b_use_frame_history = true;
+ p_sys->context.settings.b_double_rate = true;
+ p_sys->context.settings.b_use_frame_history = true;
}
else if( p_sys->chroma->pixel_size > 1 )
{
@@ -209,13 +209,13 @@ static void SetFilterMethod( filter_t *p_filter, const char *mode, bool pack )
else if( !strcmp( mode, "phosphor" ) )
{
p_sys->context.pf_render_ordered = RenderPhosphor;
- p_sys->context.b_double_rate = true;
- p_sys->context.b_use_frame_history = true;
+ p_sys->context.settings.b_double_rate = true;
+ p_sys->context.settings.b_use_frame_history = true;
}
else if( !strcmp( mode, "ivtc" ) )
{
p_sys->context.pf_render_single_pic = RenderIVTC;
- p_sys->context.b_use_frame_history = true;
+ p_sys->context.settings.b_use_frame_history = true;
}
else
msg_Err( p_filter, "unknown deinterlace mode \"%s\"", mode );
@@ -272,7 +272,7 @@ int Mouse( filter_t *p_filter,
{
VLC_UNUSED(p_old);
*p_mouse = *p_new;
- if( p_filter->p_sys->context.b_half_height )
+ if( p_filter->p_sys->context.settings.b_half_height )
p_mouse->i_y *= 2;
return VLC_SUCCESS;
}
--
2.12.1
More information about the vlc-devel
mailing list