vlc | branch: master | Steve Lhomme <[email protected]> | Fri Nov 6 14:27:52 2020 +0100| [ebbbdf7d831d5688981f0ba46a856b013afa2262] | committer: Steve Lhomme
video_output: use a separate structure for the deinterlacing state > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ebbbdf7d831d5688981f0ba46a856b013afa2262 --- src/video_output/interlacing.c | 22 +++++++++++----------- src/video_output/video_output.c | 14 ++++++++------ src/video_output/vout_private.h | 18 +++++++++--------- 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/video_output/interlacing.c b/src/video_output/interlacing.c index 0f9a16956f..bb2f1341ea 100644 --- a/src/video_output/interlacing.c +++ b/src/video_output/interlacing.c @@ -90,13 +90,13 @@ static int DeinterlaceCallback(vlc_object_t *object, char const *cmd, return VLC_SUCCESS; } -void vout_InitInterlacingSupport(vout_thread_t *vout, vout_thread_private_t *sys) +void vout_InitInterlacingSupport(vout_thread_t *vout, vout_thread_interlacing_t *sys) { vlc_value_t val; msg_Dbg(vout, "Deinterlacing available"); - sys->interlacing.has_deint = false; + sys->has_deint = false; /* Create the configuration variables */ /* */ @@ -139,7 +139,7 @@ void vout_InitInterlacingSupport(vout_thread_t *vout, vout_thread_private_t *sys /* Override the initial value from filters if present */ char *filter_mode = NULL; - if (sys->interlacing.has_deint) + if (sys->has_deint) filter_mode = var_CreateGetNonEmptyString(vout, "sout-deinterlace-mode"); if (filter_mode) { deinterlace_state = 1; @@ -154,29 +154,29 @@ void vout_InitInterlacingSupport(vout_thread_t *vout, vout_thread_private_t *sys var_SetInteger(vout, "deinterlace", deinterlace_state); free(deinterlace_mode); - sys->interlacing.is_interlaced = false; + sys->is_interlaced = false; } -void vout_ReinitInterlacingSupport(vout_thread_t *vout, vout_thread_private_t *sys) +void vout_ReinitInterlacingSupport(vout_thread_t *vout, vout_thread_interlacing_t *sys) { - sys->interlacing.is_interlaced = false; + sys->is_interlaced = false; var_SetBool(vout, "deinterlace-needed", false); } -void vout_SetInterlacingState(vout_thread_t *vout, vout_thread_private_t *sys, bool is_interlaced) +void vout_SetInterlacingState(vout_thread_t *vout, vout_thread_interlacing_t *sys, bool is_interlaced) { /* Wait 30s before quiting interlacing mode */ const int interlacing_change = (!!is_interlaced) - - (!!sys->interlacing.is_interlaced); + - (!!sys->is_interlaced); if (interlacing_change == 1 || (interlacing_change == -1 && - sys->interlacing.date + VLC_TICK_FROM_SEC(30) < vlc_tick_now())) + sys->date + VLC_TICK_FROM_SEC(30) < vlc_tick_now())) { msg_Dbg(vout, "Detected %s video", is_interlaced ? "interlaced" : "progressive"); var_SetBool(vout, "deinterlace-needed", is_interlaced); - sys->interlacing.is_interlaced = is_interlaced; + sys->is_interlaced = is_interlaced; } if (is_interlaced) - sys->interlacing.date = vlc_tick_now(); + sys->date = vlc_tick_now(); } diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c index 90a004931d..b3b9b6ef3c 100644 --- a/src/video_output/video_output.c +++ b/src/video_output/video_output.c @@ -66,6 +66,8 @@ typedef struct vout_thread_sys_t { struct vout_thread_t obj; + vout_thread_interlacing_t interlacing; + vout_thread_private_t private; bool dummy; @@ -965,7 +967,7 @@ static void ThreadChangeFilters(vout_thread_sys_t *vout, bool flush_displayed) vlc_array_init(&array_static); vlc_array_init(&array_interactive); - if (sys->private.interlacing.has_deint) + if (sys->interlacing.has_deint) { vout_filter_t *e = malloc(sizeof(*e)); @@ -1469,9 +1471,9 @@ static int ThreadDisplayPicture(vout_thread_sys_t *vout, vlc_tick_t *deadline) vlc_mutex_lock(&sys->filter.lock); if (sys->filter.changed || - sys->private.interlacing.has_deint != sys->filter.new_interlaced) + sys->interlacing.has_deint != sys->filter.new_interlaced) { - sys->private.interlacing.has_deint = sys->filter.new_interlaced; + sys->interlacing.has_deint = sys->filter.new_interlaced; ThreadChangeFilters(vout, true); } vlc_mutex_unlock(&sys->filter.lock); @@ -1922,7 +1924,7 @@ static void *Thread(void *object) const bool picture_interlaced = sys->displayed.is_interlaced; - vout_SetInterlacingState(&vout->obj, &sys->private, picture_interlaced); + vout_SetInterlacingState(&vout->obj, &sys->interlacing, picture_interlaced); } } @@ -2130,7 +2132,7 @@ vout_thread_t *vout_Create(vlc_object_t *object) sys->title.timeout = var_InheritInteger(vout, "video-title-timeout"); sys->title.position = var_InheritInteger(vout, "video-title-position"); - vout_InitInterlacingSupport(vout, &sys->private); + vout_InitInterlacingSupport(vout, &sys->interlacing); sys->is_late_dropped = var_InheritBool(vout, "drop-late-frames"); @@ -2297,7 +2299,7 @@ int vout_Request(const vout_configuration_t *cfg, vlc_video_context *vctx, input if (sys->display != NULL) vout_StopDisplay(cfg->vout); - vout_ReinitInterlacingSupport(cfg->vout, &sys->private); + vout_ReinitInterlacingSupport(cfg->vout, &sys->interlacing); sys->original = original; diff --git a/src/video_output/vout_private.h b/src/video_output/vout_private.h index 5e8c58dabe..9899ce7a69 100644 --- a/src/video_output/vout_private.h +++ b/src/video_output/vout_private.h @@ -30,15 +30,15 @@ typedef struct vout_thread_private_t vout_thread_private_t; +typedef struct { + bool is_interlaced; // is the source interlaced + bool has_deint; // is deinterlacing filter needed + vlc_tick_t date; // system date when interlacing source was last seen +} vout_thread_interlacing_t; + /* */ struct vout_thread_private_t { - struct { - bool is_interlaced; - bool has_deint; - vlc_tick_t date; - } interlacing; - picture_pool_t *private_pool; picture_pool_t *display_pool; }; @@ -48,8 +48,8 @@ vout_display_t *vout_OpenWrapper(vout_thread_t *, vout_thread_private_t *, const const vout_display_cfg_t *, video_format_t *, vlc_video_context *); void vout_CloseWrapper(vout_thread_t *, vout_thread_private_t *, vout_display_t *vd); -void vout_InitInterlacingSupport(vout_thread_t *, vout_thread_private_t *); -void vout_ReinitInterlacingSupport(vout_thread_t *, vout_thread_private_t *); -void vout_SetInterlacingState(vout_thread_t *, vout_thread_private_t *, bool is_interlaced); +void vout_InitInterlacingSupport(vout_thread_t *, vout_thread_interlacing_t *); +void vout_ReinitInterlacingSupport(vout_thread_t *, vout_thread_interlacing_t *); +void vout_SetInterlacingState(vout_thread_t *, vout_thread_interlacing_t *, bool is_interlaced); #endif // LIBVLC_VOUT_PRIVATE_H _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
