[vlc-devel] [PATCH 02/15] filters: pass the owner sys to the buffer_new callback
Steve Lhomme
robux4 at ycbcr.xyz
Fri Jul 19 15:32:06 CEST 2019
This way we don't have to modify the the owner for each call in the
filter chain.
---
include/vlc_filter.h | 4 ++--
modules/hw/d3d11/d3d11_surface.c | 7 ++++---
modules/hw/d3d9/dxa9.c | 7 ++++---
modules/stream_out/mosaic_bridge.c | 6 +++---
modules/stream_out/sdi/SDIStream.cpp | 3 ++-
modules/stream_out/transcode/video.c | 3 ++-
modules/video_chroma/chain.c | 5 +++--
modules/video_filter/canvas.c | 7 +++++--
modules/video_filter/ci_filters.m | 3 ++-
modules/video_filter/edgedetection.c | 9 ++++++---
src/misc/filter_chain.c | 10 +++-------
src/misc/image.c | 3 ++-
src/video_output/display.c | 4 ++--
src/video_output/video_output.c | 13 +++++++------
src/video_output/vout_subpictures.c | 6 +++---
15 files changed, 50 insertions(+), 40 deletions(-)
diff --git a/include/vlc_filter.h b/include/vlc_filter.h
index 0c756ce10e..5c2a82ed1d 100644
--- a/include/vlc_filter.h
+++ b/include/vlc_filter.h
@@ -38,7 +38,7 @@
struct filter_video_callbacks
{
- picture_t *(*buffer_new)(filter_t *);
+ picture_t *(*buffer_new)(filter_t *, void *);
};
struct filter_subpicture_callbacks
@@ -160,7 +160,7 @@ struct filter_t
*/
static inline picture_t *filter_NewPicture( filter_t *p_filter )
{
- picture_t *pic = p_filter->owner.video->buffer_new( p_filter );
+ picture_t *pic = p_filter->owner.video->buffer_new( p_filter, p_filter->owner.sys );
if( pic == NULL )
msg_Warn( p_filter, "can't get output picture" );
return pic;
diff --git a/modules/hw/d3d11/d3d11_surface.c b/modules/hw/d3d11/d3d11_surface.c
index afae5b58df..471de4163a 100644
--- a/modules/hw/d3d11/d3d11_surface.c
+++ b/modules/hw/d3d11/d3d11_surface.c
@@ -515,10 +515,11 @@ static void DeleteFilter( filter_t * p_filter )
vlc_object_delete(p_filter);
}
-static picture_t *NewBuffer(filter_t *p_filter)
+static picture_t *NewBuffer(filter_t *p_filter, void *opaque)
{
- filter_t *p_parent = p_filter->owner.sys;
- filter_sys_t *p_sys = p_parent->p_sys;
+ (void) p_filter;
+ filter_t *p_this = opaque;
+ filter_sys_t *p_sys = p_this->p_sys;
return p_sys->staging_pic;
}
diff --git a/modules/hw/d3d9/dxa9.c b/modules/hw/d3d9/dxa9.c
index 6cc7748daf..027bc8b780 100644
--- a/modules/hw/d3d9/dxa9.c
+++ b/modules/hw/d3d9/dxa9.c
@@ -190,10 +190,11 @@ static void DeleteFilter( filter_t * p_filter )
vlc_object_delete(p_filter);
}
-static picture_t *NewBuffer(filter_t *p_filter)
+static picture_t *NewBuffer(filter_t *p_filter, void *opaque)
{
- filter_t *p_parent = p_filter->owner.sys;
- filter_sys_t *p_sys = p_parent->p_sys;
+ (void) p_filter;
+ filter_t *p_this = opaque;
+ filter_sys_t *p_sys = p_this->p_sys;
return p_sys->staging;
}
diff --git a/modules/stream_out/mosaic_bridge.c b/modules/stream_out/mosaic_bridge.c
index d7eab648d2..92274f6936 100644
--- a/modules/stream_out/mosaic_bridge.c
+++ b/modules/stream_out/mosaic_bridge.c
@@ -85,7 +85,7 @@ static int Send( sout_stream_t *, void *, block_t * );
static void decoder_queue_video( decoder_t *p_dec, picture_t *p_pic );
inline static int video_update_format_decoder( decoder_t *p_dec );
-inline static picture_t *video_new_buffer_filter( filter_t * );
+inline static picture_t *video_new_buffer_filter( filter_t *, void * );
static void video_update_format( video_format_t *, es_format_t * );
static int HeightCallback( vlc_object_t *, char const *,
@@ -577,9 +577,9 @@ inline static int video_update_format_decoder( decoder_t *p_dec )
return 0;
}
-inline static picture_t *video_new_buffer_filter( filter_t *p_filter )
+inline static picture_t *video_new_buffer_filter( filter_t *p_filter, void *opaque )
{
- struct decoder_owner *p_owner = p_filter->owner.sys;
+ struct decoder_owner *p_owner = opaque;
video_update_format( &p_owner->video, &p_filter->fmt_out );
return picture_NewFromFormat( &p_filter->fmt_out.video );
}
diff --git a/modules/stream_out/sdi/SDIStream.cpp b/modules/stream_out/sdi/SDIStream.cpp
index 4845466a1a..1fc72ced8c 100644
--- a/modules/stream_out/sdi/SDIStream.cpp
+++ b/modules/stream_out/sdi/SDIStream.cpp
@@ -494,8 +494,9 @@ int VideoDecodedStream::VideoDecCallback_update_format(decoder_t *p_dec)
return VLC_SUCCESS;
}
-static picture_t *transcode_video_filter_buffer_new(filter_t *p_filter)
+static picture_t *transcode_video_filter_buffer_new(filter_t *p_filter, void *opaque)
{
+ (void) opaque;
p_filter->fmt_out.video.i_chroma = p_filter->fmt_out.i_codec;
return picture_NewFromFormat(&p_filter->fmt_out.video);
}
diff --git a/modules/stream_out/transcode/video.c b/modules/stream_out/transcode/video.c
index 108eabada9..d1c7bf303f 100644
--- a/modules/stream_out/transcode/video.c
+++ b/modules/stream_out/transcode/video.c
@@ -100,8 +100,9 @@ static picture_t *video_new_buffer_encoder( transcode_encoder_t *p_enc )
return picture_NewFromFormat( &transcode_encoder_format_in( p_enc )->video );
}
-static picture_t *transcode_video_filter_buffer_new( filter_t *p_filter )
+static picture_t *transcode_video_filter_buffer_new( filter_t *p_filter, void *opaque )
{
+ (void) opaque;
p_filter->fmt_out.video.i_chroma = p_filter->fmt_out.i_codec;
return picture_NewFromFormat( &p_filter->fmt_out.video );
}
diff --git a/modules/video_chroma/chain.c b/modules/video_chroma/chain.c
index 964c51b8ae..84336f0f3d 100644
--- a/modules/video_chroma/chain.c
+++ b/modules/video_chroma/chain.c
@@ -130,9 +130,10 @@ static int RestartFilterCallback( vlc_object_t *obj, char const *psz_name,
/*****************************************************************************
* Buffer management
*****************************************************************************/
-static picture_t *BufferNew( filter_t *p_filter )
+static picture_t *BufferNew( filter_t *p_filter, void *opaque )
{
- filter_t *p_parent = p_filter->owner.sys;
+ (void) p_filter;
+ filter_t *p_parent = opaque;
return filter_NewPicture( p_parent );
}
diff --git a/modules/video_filter/canvas.c b/modules/video_filter/canvas.c
index b8e15eaef1..8597ce8ef5 100644
--- a/modules/video_filter/canvas.c
+++ b/modules/video_filter/canvas.c
@@ -131,9 +131,12 @@ typedef struct
filter_chain_t *p_chain;
} filter_sys_t;
-static picture_t *video_new( filter_t *p_filter )
+static picture_t *video_new( filter_t *p_filter, void *opaque )
{
- return filter_NewPicture( p_filter->owner.sys );
+ (void) p_filter;
+ filter_t *p_parent = opaque;
+
+ return filter_NewPicture( p_parent );
}
static const struct filter_video_callbacks canvas_cbs =
diff --git a/modules/video_filter/ci_filters.m b/modules/video_filter/ci_filters.m
index 8511858aec..4ad40bb1a0 100644
--- a/modules/video_filter/ci_filters.m
+++ b/modules/video_filter/ci_filters.m
@@ -540,8 +540,9 @@ Close_RemoveConverters(filter_t *filter, struct ci_filters_ctx *ctx)
}
}
-static picture_t *CVPX_to_CVPX_converter_BufferNew(filter_t *p_filter)
+static picture_t *CVPX_to_CVPX_converter_BufferNew(filter_t *p_filter, void *opaque)
{
+ (void) opaque;
return picture_NewFromFormat(&p_filter->fmt_out.video);
}
diff --git a/modules/video_filter/edgedetection.c b/modules/video_filter/edgedetection.c
index a8da06d78f..aa4e75d3d8 100644
--- a/modules/video_filter/edgedetection.c
+++ b/modules/video_filter/edgedetection.c
@@ -47,7 +47,7 @@
*****************************************************************************/
static int Open( vlc_object_t * );
static int Close( vlc_object_t * );
-static picture_t *new_frame( filter_t * );
+static picture_t *new_frame( filter_t *, void * );
static picture_t *Filter( filter_t *, picture_t * );
static uint8_t sobel( const uint8_t *, const int, const int, int, int);
@@ -141,9 +141,12 @@ static int Close( vlc_object_t *p_this )
/* *****************************************************************************
* Allocates a new buffer for the filter chain.
******************************************************************************/
-static picture_t *new_frame( filter_t *p_filter)
+static picture_t *new_frame( filter_t *p_filter, void *opaque )
{
- return filter_NewPicture( p_filter->owner.sys );
+ (void) p_filter;
+ filter_t *p_this = opaque;
+
+ return filter_NewPicture( p_this );
}
/******************************************************************************
diff --git a/src/misc/filter_chain.c b/src/misc/filter_chain.c
index 89b499d26a..7070ce9f8c 100644
--- a/src/misc/filter_chain.c
+++ b/src/misc/filter_chain.c
@@ -108,7 +108,7 @@ filter_chain_t *filter_chain_NewSPU( vlc_object_t *obj, const char *cap )
}
/** Chained filter picture allocator function */
-static picture_t *filter_chain_VideoBufferNew( filter_t *filter )
+static picture_t *filter_chain_VideoBufferNew( filter_t *filter, void *sys )
{
if( chained(filter)->next != NULL )
{
@@ -119,13 +119,9 @@ static picture_t *filter_chain_VideoBufferNew( filter_t *filter )
}
else
{
- filter_chain_t *chain = filter->owner.sys;
+ filter_chain_t *chain = sys;
- /* XXX ugly */
- filter->owner.sys = chain->owner.sys;
- picture_t *pic = chain->owner.video->buffer_new( filter );
- filter->owner.sys = chain;
- return pic;
+ return chain->owner.video->buffer_new( filter, chain->owner.sys );
}
}
diff --git a/src/misc/image.c b/src/misc/image.c
index 976e30dde0..0cd67711e0 100644
--- a/src/misc/image.c
+++ b/src/misc/image.c
@@ -779,8 +779,9 @@ static void DeleteEncoder( encoder_t * p_enc )
vlc_object_delete(p_enc);
}
-static picture_t *filter_new_picture( filter_t *p_filter )
+static picture_t *filter_new_picture( filter_t *p_filter, void *opaque )
{
+ (void) opaque;
return picture_NewFromFormat( &p_filter->fmt_out.video );
}
diff --git a/src/video_output/display.c b/src/video_output/display.c
index 1b84060d5e..ad744892f1 100644
--- a/src/video_output/display.c
+++ b/src/video_output/display.c
@@ -46,9 +46,9 @@
/*****************************************************************************
* FIXME/TODO see how to have direct rendering here (interact with vout.c)
*****************************************************************************/
-static picture_t *VideoBufferNew(filter_t *filter)
+static picture_t *VideoBufferNew(filter_t *filter, void *opaque)
{
- vout_display_t *vd = filter->owner.sys;
+ vout_display_t *vd = opaque;
const video_format_t *fmt = &filter->fmt_out.video;
assert(vd->fmt.i_chroma == fmt->i_chroma &&
diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c
index 490d1fa97e..8dffb00080 100644
--- a/src/video_output/video_output.c
+++ b/src/video_output/video_output.c
@@ -689,9 +689,9 @@ static void ThreadDelAllFilterCallbacks(vout_thread_t *vout)
ThreadDelFilterCallbacks, vout);
}
-static picture_t *VoutVideoFilterInteractiveNewPicture(filter_t *filter)
+static picture_t *VoutVideoFilterInteractiveNewPicture(filter_t *filter, void *opaque)
{
- vout_thread_t *vout = filter->owner.sys;
+ vout_thread_t *vout = opaque;
picture_t *picture = picture_pool_Get(vout->p->private_pool);
if (picture) {
@@ -701,13 +701,13 @@ static picture_t *VoutVideoFilterInteractiveNewPicture(filter_t *filter)
return picture;
}
-static picture_t *VoutVideoFilterStaticNewPicture(filter_t *filter)
+static picture_t *VoutVideoFilterStaticNewPicture(filter_t *filter, void *opaque)
{
- vout_thread_t *vout = filter->owner.sys;
+ vout_thread_t *vout = opaque;
vlc_mutex_assert(&vout->p->filter.lock);
if (filter_chain_IsEmpty(vout->p->filter.chain_interactive))
- return VoutVideoFilterInteractiveNewPicture(filter);
+ return VoutVideoFilterInteractiveNewPicture(filter, vout);
return picture_NewFromFormat(&filter->fmt_out.video);
}
@@ -928,8 +928,9 @@ static int ThreadDisplayPreparePicture(vout_thread_t *vout, bool reuse, bool fra
return VLC_SUCCESS;
}
-static picture_t *ConvertRGB32AndBlendBufferNew(filter_t *filter)
+static picture_t *ConvertRGB32AndBlendBufferNew(filter_t *filter, void *opaque)
{
+ (void) opaque;
return picture_NewFromFormat(&filter->fmt_out.video);
}
diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c
index 2709d3e8a5..182dd0ddbe 100644
--- a/src/video_output/vout_subpictures.c
+++ b/src/video_output/vout_subpictures.c
@@ -198,11 +198,11 @@ static void FilterRelease(filter_t *filter)
vlc_object_delete(filter);
}
-static picture_t *spu_new_video_buffer(filter_t *filter)
+static picture_t *spu_new_video_buffer(filter_t *filter, void *opaque)
{
- const video_format_t *fmt = &filter->fmt_out.video;
+ (void) opaque;
- return picture_NewFromFormat(fmt);
+ return picture_NewFromFormat(&filter->fmt_out.video);
}
static int spu_get_attachments(filter_t *filter,
--
2.17.1
More information about the vlc-devel
mailing list