[vlc-devel] [PATCH 09/10] vout: move some shared fields in a separate vout_thread_private_t structure
Steve Lhomme
robux4 at ycbcr.xyz
Thu Jul 16 15:58:07 CEST 2020
The internal call definitions using vout_thread_private_t are moved to
vout_private.h as well.
The object and storage structure are now separated for these calls.
---
po/POTFILES.in | 1 +
src/Makefile.am | 2 +-
src/video_output/interlacing.c | 12 +++----
src/video_output/interlacing.h | 30 ----------------
src/video_output/video_output.c | 32 ++++++++---------
src/video_output/vout_internal.h | 22 ++----------
src/video_output/vout_private.h | 59 ++++++++++++++++++++++++++++++++
src/video_output/vout_wrapper.c | 7 ++--
8 files changed, 86 insertions(+), 79 deletions(-)
delete mode 100644 src/video_output/interlacing.h
create mode 100644 src/video_output/vout_private.h
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 35fe3ec7787..5a39007f798 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -130,6 +130,7 @@ src/video_output/video_text.c
src/video_output/video_widgets.c
src/video_output/vout_internal.h
src/video_output/vout_intf.c
+src/video_output/vout_private.h
src/video_output/vout_subpictures.c
src/win32/thread.c
diff --git a/src/Makefile.am b/src/Makefile.am
index 9e088c1fd9e..9e7c2931d27 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -313,7 +313,6 @@ libvlccore_la_SOURCES = \
video_output/inhibit.c \
video_output/inhibit.h \
video_output/interlacing.c \
- video_output/interlacing.h \
video_output/snapshot.c \
video_output/snapshot.h \
video_output/statistic.h \
@@ -329,6 +328,7 @@ libvlccore_la_SOURCES = \
video_output/opengl.c \
video_output/vout_intf.c \
video_output/vout_internal.h \
+ video_output/vout_private.h \
video_output/vout_wrapper.c \
network/getaddrinfo.c \
network/http_auth.c \
diff --git a/src/video_output/interlacing.c b/src/video_output/interlacing.c
index 6f5d4e9f247..da2845abb50 100644
--- a/src/video_output/interlacing.c
+++ b/src/video_output/interlacing.c
@@ -28,7 +28,6 @@
#include <vlc_common.h>
#include <vlc_vout.h>
-#include "interlacing.h"
#include "vout_internal.h"
/*****************************************************************************
@@ -90,10 +89,9 @@ static int DeinterlaceCallback(vlc_object_t *object, char const *cmd,
return VLC_SUCCESS;
}
-void vout_InitInterlacingSupport(vout_thread_t *vout)
+void vout_InitInterlacingSupport(vout_thread_t *vout, vout_thread_private_t *sys)
{
vlc_value_t val;
- vout_thread_sys_t *sys = vout->p;
msg_Dbg(vout, "Deinterlacing available");
@@ -158,17 +156,15 @@ void vout_InitInterlacingSupport(vout_thread_t *vout)
sys->interlacing.is_interlaced = false;
}
-void vout_ReinitInterlacingSupport(vout_thread_t *vout)
+void vout_ReinitInterlacingSupport(vout_thread_t *vout, vout_thread_private_t *sys)
{
- vout_thread_sys_t *sys = vout->p;
sys->interlacing.is_interlaced = false;
var_SetBool(vout, "deinterlace-needed", false);
}
-void vout_SetInterlacingState(vout_thread_t *vout, bool is_interlaced)
+void vout_SetInterlacingState(vout_thread_t *vout, vout_thread_private_t *sys, bool is_interlaced)
{
- vout_thread_sys_t *sys = vout->p;
- /* Wait 30s before quiting interlacing mode */
+ /* Wait 30s before quiting interlacing mode */
const int interlacing_change = (!!is_interlaced)
- (!!sys->interlacing.is_interlaced);
if (interlacing_change == 1 ||
diff --git a/src/video_output/interlacing.h b/src/video_output/interlacing.h
deleted file mode 100644
index c8b4b65fe55..00000000000
--- a/src/video_output/interlacing.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*****************************************************************************
- * interlacing.h: Interlacing related helpers
- *****************************************************************************
- * Copyright (C) 2010 Laurent Aimar
- *
- * Authors: Laurent Aimar <fenrir _AT_ videolan _DOT_ org>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef LIBVLC_VOUT_INTERLACING_H
-#define LIBVLC_VOUT_INTERLACING_H
-
-void vout_InitInterlacingSupport(vout_thread_t *);
-void vout_ReinitInterlacingSupport(vout_thread_t *);
-void vout_SetInterlacingState(vout_thread_t *, bool is_interlaced);
-
-#endif
diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c
index f72f59df266..a772fa1c10b 100644
--- a/src/video_output/video_output.c
+++ b/src/video_output/video_output.c
@@ -51,7 +51,6 @@
#include <libvlc.h>
#include "vout_internal.h"
-#include "interlacing.h"
#include "display.h"
#include "snapshot.h"
#include "window.h"
@@ -336,7 +335,7 @@ picture_t *vout_GetPicture(vout_thread_t *vout)
{
vout_thread_sys_t *sys = vout->p;
assert(!sys->dummy);
- picture_t *picture = picture_pool_Wait(sys->display_pool);
+ picture_t *picture = picture_pool_Wait(sys->private.display_pool);
if (likely(picture != NULL)) {
picture_Reset(picture);
video_format_CopyCropAr(&picture->format, &sys->original);
@@ -728,7 +727,7 @@ static picture_t *VoutVideoFilterInteractiveNewPicture(filter_t *filter)
vout_thread_t *vout = filter->owner.sys;
vout_thread_sys_t *sys = vout->p;
- picture_t *picture = picture_pool_Get(sys->private_pool);
+ picture_t *picture = picture_pool_Get(sys->private.private_pool);
if (picture) {
picture_Reset(picture);
video_format_CopyCropAr(&picture->format, &filter->fmt_out.video);
@@ -794,9 +793,9 @@ static void ThreadChangeFilters(vout_thread_t *vout,
vlc_array_init(&array_interactive);
if (new_deinterlace != NULL)
- sys->interlacing.has_deint = *new_deinterlace;
+ sys->private.interlacing.has_deint = *new_deinterlace;
- if (sys->interlacing.has_deint)
+ if (sys->private.interlacing.has_deint)
{
vout_filter_t *e = malloc(sizeof(*e));
@@ -1182,7 +1181,7 @@ static int ThreadDisplayRenderPicture(vout_thread_t *vout, bool is_forced)
picture_t *snap_pic = todisplay;
if (do_early_spu && subpic) {
if (sys->spu_blend) {
- picture_t *blent = picture_pool_Get(sys->private_pool);
+ picture_t *blent = picture_pool_Get(sys->private.private_pool);
if (blent) {
video_format_CopyCropAr(&blent->format, &filtered->format);
picture_Copy(blent, filtered);
@@ -1578,8 +1577,8 @@ static int vout_Start(vout_thread_t *vout, vlc_video_context *vctx, const vout_c
vlc_mouse_Init(&sys->mouse);
sys->decoder_fifo = picture_fifo_New();
- sys->display_pool = NULL;
- sys->private_pool = NULL;
+ sys->private.display_pool = NULL;
+ sys->private.private_pool = NULL;
sys->filter.configuration = NULL;
video_format_Copy(&sys->filter.src_fmt, &sys->original);
@@ -1647,7 +1646,8 @@ static int vout_Start(vout_thread_t *vout, vlc_video_context *vctx, const vout_c
dcfg.window_props.width = sys->window_width;
dcfg.window_props.height = sys->window_height;
- sys->display = vout_OpenWrapper(vout, sys->splitter_name, &dcfg, &sys->original, vctx);
+ sys->display = vout_OpenWrapper(vout, &sys->private, sys->splitter_name, &dcfg,
+ &sys->original, vctx);
if (sys->display == NULL) {
vlc_mutex_unlock(&sys->display_lock);
goto error;
@@ -1659,7 +1659,7 @@ static int vout_Start(vout_thread_t *vout, vlc_video_context *vctx, const vout_c
vout_SetDisplayAspect(sys->display, num, den);
vlc_mutex_unlock(&sys->display_lock);
- assert(sys->display_pool != NULL && sys->private_pool != NULL);
+ assert(sys->private.display_pool != NULL && sys->private.private_pool != NULL);
sys->displayed.current = NULL;
sys->displayed.next = NULL;
@@ -1749,7 +1749,7 @@ static void *Thread(void *object)
const bool picture_interlaced = sys->displayed.is_interlaced;
- vout_SetInterlacingState(vout, picture_interlaced);
+ vout_SetInterlacingState(vout, &sys->private, picture_interlaced);
}
}
@@ -1763,11 +1763,11 @@ static void vout_ReleaseDisplay(vout_thread_t *vout)
filter_DeleteBlend(sys->spu_blend);
/* Destroy the rendering display */
- if (sys->display_pool != NULL)
+ if (sys->private.display_pool != NULL)
vout_FlushUnlocked(vout, true, INT64_MAX);
vlc_mutex_lock(&sys->display_lock);
- vout_CloseWrapper(vout, sys->display);
+ vout_CloseWrapper(vout, &sys->private, sys->display);
sys->display = NULL;
vlc_mutex_unlock(&sys->display_lock);
@@ -1788,7 +1788,7 @@ static void vout_ReleaseDisplay(vout_thread_t *vout)
picture_fifo_Delete(sys->decoder_fifo);
sys->decoder_fifo = NULL;
}
- assert(sys->display_pool == NULL);
+ assert(sys->private.display_pool == NULL);
if (sys->mouse_event)
sys->mouse_event(NULL, sys->mouse_opaque);
@@ -1956,7 +1956,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);
+ vout_InitInterlacingSupport(vout, &sys->private);
sys->is_late_dropped = var_InheritBool(vout, "drop-late-frames");
@@ -2082,7 +2082,7 @@ int vout_Request(const vout_configuration_t *cfg, vlc_video_context *vctx, input
if (sys->display != NULL)
vout_StopDisplay(vout);
- vout_ReinitInterlacingSupport(vout);
+ vout_ReinitInterlacingSupport(vout, &sys->private);
sys->original = original;
diff --git a/src/video_output/vout_internal.h b/src/video_output/vout_internal.h
index 106c48ca0d0..6540efb4df3 100644
--- a/src/video_output/vout_internal.h
+++ b/src/video_output/vout_internal.h
@@ -33,6 +33,7 @@
#include "chrono.h"
#include "../clock/clock.h"
#include "../input/input_internal.h"
+#include "vout_private.h"
/* It should be high enough to absorbe jitter due to difficult picture(s)
* to decode but not too high as memory is not that cheap.
@@ -54,18 +55,14 @@ typedef struct {
} vout_configuration_t;
#include "control.h"
-struct vout_snapshot;
-
-enum vout_crop_mode {
- VOUT_CROP_NONE, VOUT_CROP_RATIO, VOUT_CROP_WINDOW, VOUT_CROP_BORDER,
-};
-
/**
* Video output thread private structure
*/
typedef struct vout_thread_sys_t vout_thread_sys_t;
struct vout_thread_sys_t
{
+ vout_thread_private_t private;
+
bool dummy;
/* Splitter module if used */
@@ -146,12 +143,6 @@ struct vout_thread_sys_t
int position;
} title;
- struct {
- bool is_interlaced;
- bool has_deint;
- vlc_tick_t date;
- } interlacing;
-
/* */
bool is_late_dropped;
@@ -182,8 +173,6 @@ struct vout_thread_sys_t
vout_display_t *display;
vlc_mutex_t display_lock;
- picture_pool_t *private_pool;
- picture_pool_t *display_pool;
picture_fifo_t *decoder_fifo;
vout_chrono_t render; /**< picture render time estimator */
@@ -266,11 +255,6 @@ void vout_IntfInit( vout_thread_t * );
void vout_IntfReinit( vout_thread_t * );
void vout_IntfDeinit(vlc_object_t *);
-/* */
-vout_display_t *vout_OpenWrapper(vout_thread_t *, const char *,
- const vout_display_cfg_t *, video_format_t *, vlc_video_context *);
-void vout_CloseWrapper(vout_thread_t *, vout_display_t *vd);
-
/* */
ssize_t vout_RegisterSubpictureChannelInternal( vout_thread_t *,
vlc_clock_t *clock,
diff --git a/src/video_output/vout_private.h b/src/video_output/vout_private.h
new file mode 100644
index 00000000000..261dcc30fe4
--- /dev/null
+++ b/src/video_output/vout_private.h
@@ -0,0 +1,59 @@
+/*****************************************************************************
+ * vout_private.h : Internal vout definitions
+ *****************************************************************************
+ * Copyright (C) 2008-2018 VLC authors and VideoLAN
+ * Copyright (C) 2008 Laurent Aimar
+ *
+ * Authors: Laurent Aimar < fenrir _AT_ videolan _DOT_ org >
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifndef LIBVLC_VOUT_PRIVATE_H
+#define LIBVLC_VOUT_PRIVATE_H 1
+
+#include <vlc_picture_fifo.h>
+#include <vlc_picture_pool.h>
+#include <vlc_vout_display.h>
+
+typedef struct vout_thread_private_t vout_thread_private_t;
+
+enum vout_crop_mode {
+ VOUT_CROP_NONE, VOUT_CROP_RATIO, VOUT_CROP_WINDOW, VOUT_CROP_BORDER,
+};
+
+/* */
+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;
+};
+
+/* */
+vout_display_t *vout_OpenWrapper(vout_thread_t *, vout_thread_private_t *, const char *,
+ 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);
+
+#endif // LIBVLC_VOUT_PRIVATE_H
diff --git a/src/video_output/vout_wrapper.c b/src/video_output/vout_wrapper.c
index 2c2d896f5a0..1cb74ecfb43 100644
--- a/src/video_output/vout_wrapper.c
+++ b/src/video_output/vout_wrapper.c
@@ -54,11 +54,10 @@ static void VoutViewpointMoved(void *sys, const vlc_viewpoint_t *vp)
/*****************************************************************************
*
*****************************************************************************/
-vout_display_t *vout_OpenWrapper(vout_thread_t *vout,
+vout_display_t *vout_OpenWrapper(vout_thread_t *vout, vout_thread_private_t *sys,
const char *splitter_name, const vout_display_cfg_t *cfg,
video_format_t *fmt, vlc_video_context *vctx)
{
- vout_thread_sys_t *sys = vout->p;
vout_display_t *vd;
vout_display_owner_t owner = {
.viewpoint_moved = VoutViewpointMoved, .sys = vout,
@@ -128,10 +127,8 @@ error:
/*****************************************************************************
*
*****************************************************************************/
-void vout_CloseWrapper(vout_thread_t *vout, vout_display_t *vd)
+void vout_CloseWrapper(vout_thread_t *vout, vout_thread_private_t *sys, vout_display_t *vd)
{
- vout_thread_sys_t *sys = vout->p;
-
assert(sys->display_pool && sys->private_pool);
picture_pool_Release(sys->private_pool);
--
2.26.2
More information about the vlc-devel
mailing list