[vlc-devel] [PATCH 11/12] mosaic_bridge: implement the hold_device for filters

Steve Lhomme robux4 at ycbcr.xyz
Mon Dec 2 14:26:18 CET 2019


Factorize the code with the get_device for the decoder.
---
 modules/stream_out/mosaic_bridge.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/modules/stream_out/mosaic_bridge.c b/modules/stream_out/mosaic_bridge.c
index b7255344cd1..f41a3f9b406 100644
--- a/modules/stream_out/mosaic_bridge.c
+++ b/modules/stream_out/mosaic_bridge.c
@@ -252,16 +252,21 @@ static int Open( vlc_object_t *p_this )
     return VLC_SUCCESS;
 }
 
-static vlc_decoder_device * video_get_decoder_device( decoder_t *p_dec )
+static vlc_decoder_device * MosaicHoldDecoderDevice( struct decoder_owner *p_owner )
 {
-    struct decoder_owner *p_owner = dec_get_owner( p_dec );
     if ( p_owner->dec_dev == NULL )
     {
-        p_owner->dec_dev = vlc_decoder_device_Create(p_dec, NULL);
+        p_owner->dec_dev = vlc_decoder_device_Create(&p_owner->dec, NULL);
     }
     return p_owner->dec_dev ? vlc_decoder_device_Hold(p_owner->dec_dev) : NULL;
 }
 
+static vlc_decoder_device * video_get_decoder_device( decoder_t *p_dec )
+{
+    struct decoder_owner *p_owner = dec_get_owner( p_dec );
+    return MosaicHoldDecoderDevice(p_owner);
+}
+
 /*****************************************************************************
  * Close
  *****************************************************************************/
@@ -293,6 +298,13 @@ static void ReleaseDecoder( decoder_t *p_dec )
     decoder_Destroy( p_dec );
 }
 
+static vlc_decoder_device * video_filter_hold_device(vlc_object_t *o, void *sys)
+{
+    VLC_UNUSED(o);
+    struct decoder_owner *p_owner = sys;
+    return MosaicHoldDecoderDevice(p_owner);
+}
+
 static void *Add( sout_stream_t *p_stream, const es_format_t *p_fmt )
 {
     sout_stream_sys_t *p_sys = p_stream->p_sys;
@@ -320,7 +332,7 @@ static void *Add( sout_stream_t *p_stream, const es_format_t *p_fmt )
     /* Create user specified video filters */
     static const struct filter_video_callbacks cbs =
     {
-        video_new_buffer_filter, NULL/*TODO*/,
+        video_new_buffer_filter, video_filter_hold_device,
     };
 
     psz_chain = var_GetNonEmptyString( p_stream, CFG_PREFIX "vfilter" );
-- 
2.17.1



More information about the vlc-devel mailing list