[vlc-devel] [PATCH 4/7] filters: use macro to set the typed Open callback for text renderer filters

Steve Lhomme robux4 at ycbcr.xyz
Mon Oct 12 15:59:12 CEST 2020


---
 include/vlc_filter.h                        | 11 ++++++++++-
 modules/text_renderer/freetype/freetype.c   | 12 +++++-------
 modules/text_renderer/nsspeechsynthesizer.m |  8 +++-----
 modules/text_renderer/sapi.cpp              | 18 ++++++++----------
 modules/text_renderer/svg.c                 |  9 +++------
 modules/text_renderer/tdummy.c              |  8 +++-----
 6 files changed, 32 insertions(+), 34 deletions(-)

diff --git a/include/vlc_filter.h b/include/vlc_filter.h
index 63763e02318..6b3c395d7d4 100644
--- a/include/vlc_filter.h
+++ b/include/vlc_filter.h
@@ -100,7 +100,7 @@ struct vlc_filter_operations
         /** Filter a subpicture (sub filter) */
         subpicture_t *(*filter_sub)(filter_t *, subpicture_t *);
 
-        /** Render text (text render) */
+        /** Render text (text renderer) */
         int (*render)(filter_t *, subpicture_region_t *,
                       subpicture_region_t *, const vlc_fourcc_t *);
     };
@@ -143,6 +143,7 @@ struct vlc_filter_operations
 typedef int (*vlc_open_deinterlace)(filter_t *);
 typedef int (*vlc_video_converter_open)(filter_t *);
 typedef int (*vlc_video_filter_open)(filter_t *);
+typedef int (*vlc_video_text_renderer_open)(filter_t *);
 
 
 #define set_deinterlace_callback( activate )     \
@@ -170,6 +171,14 @@ typedef int (*vlc_video_filter_open)(filter_t *);
     }                                                      \
     set_capability( "video converter", priority )
 
+#define set_callback_text_renderer( activate, priority )   \
+    {                                                      \
+        vlc_video_text_renderer_open open__ = activate;    \
+        (void) open__;                                     \
+        set_callback(activate)                             \
+    }                                                      \
+    set_capability( "text renderer", priority )
+
 /** Structure describing a filter
  * @warning BIG FAT WARNING : the code relies on the first 4 members of
  * filter_t and decoder_t to be the same, so if you have anything to add,
diff --git a/modules/text_renderer/freetype/freetype.c b/modules/text_renderer/freetype/freetype.c
index a866b99d725..d9044ca54c7 100644
--- a/modules/text_renderer/freetype/freetype.c
+++ b/modules/text_renderer/freetype/freetype.c
@@ -53,7 +53,7 @@
 /*****************************************************************************
  * Module descriptor
  *****************************************************************************/
-static int  Create ( vlc_object_t * );
+static int  Create ( filter_t * );
 static void Destroy( filter_t * );
 
 #define FONT_TEXT N_("Font")
@@ -204,9 +204,8 @@ vlc_module_begin ()
         change_safe()
 #endif
 
-    set_capability( "text renderer", 100 )
     add_shortcut( "text" )
-    set_callback( Create )
+    set_callback_text_renderer( Create, 100 )
 vlc_module_end ()
 
 /* */
@@ -1169,9 +1168,8 @@ static const struct vlc_filter_operations filter_ops =
  *****************************************************************************
  * This function allocates and initializes a Clone vout method.
  *****************************************************************************/
-static int Create( vlc_object_t *p_this )
+static int Create( filter_t *p_filter )
 {
-    filter_t      *p_filter         = ( filter_t * ) p_this;
     filter_sys_t  *p_sys            = NULL;
 
     /* Allocate structure */
@@ -1193,8 +1191,8 @@ static int Create( vlc_object_t *p_this )
         p_sys->p_stroker = NULL;
     }
 
-    p_sys->ftcache = vlc_ftcache_New( p_this, p_sys->p_library,
-                            var_InheritInteger( p_this, "freetype-cache-size" ) );
+    p_sys->ftcache = vlc_ftcache_New( VLC_OBJECT(p_filter), p_sys->p_library,
+                            var_InheritInteger( p_filter, "freetype-cache-size" ) );
     if( !p_sys->ftcache )
         goto error;
 
diff --git a/modules/text_renderer/nsspeechsynthesizer.m b/modules/text_renderer/nsspeechsynthesizer.m
index f3b7d7e1512..5d8a683ec4f 100644
--- a/modules/text_renderer/nsspeechsynthesizer.m
+++ b/modules/text_renderer/nsspeechsynthesizer.m
@@ -35,7 +35,7 @@
 
 #import <Cocoa/Cocoa.h>
 
-static int Create (vlc_object_t *);
+static int Create (filter_t *);
 static void Destroy(filter_t *);
 static int RenderText(filter_t *,
                       subpicture_region_t *,
@@ -47,8 +47,7 @@ set_description(N_("Speech synthesis for Mac OS X"))
 set_category(CAT_VIDEO)
 set_subcategory(SUBCAT_VIDEO_SUBPIC)
 
-set_capability("text renderer", 0)
-set_callback(Create)
+set_callback_text_renderer(Create, 0)
 vlc_module_end ()
 
 typedef struct filter_sys_t
@@ -62,9 +61,8 @@ static const struct vlc_filter_operations filter_ops = {
     .render = RenderText, .close = Destroy,
 };
 
-static int  Create (vlc_object_t *p_this)
+static int  Create (filter_t *p_filter)
 {
-    filter_t *p_filter = (filter_t *)p_this;
     filter_sys_t *p_sys;
 
     p_filter->p_sys = p_sys = malloc(sizeof(filter_sys_t));
diff --git a/modules/text_renderer/sapi.cpp b/modules/text_renderer/sapi.cpp
index f12961ecef5..d735b8c512f 100644
--- a/modules/text_renderer/sapi.cpp
+++ b/modules/text_renderer/sapi.cpp
@@ -44,7 +44,7 @@
 #include <sapi.h>
 #include <sphelper.h>
 
-static int Create (vlc_object_t *);
+static int Create (filter_t *);
 static void Destroy(filter_t *);
 static int RenderText(filter_t *,
                       subpicture_region_t *,
@@ -57,8 +57,7 @@ vlc_module_begin ()
  set_category(CAT_VIDEO)
  set_subcategory(SUBCAT_VIDEO_SUBPIC)
 
- set_capability("text renderer", 0)
- set_callback(Create)
+ set_callback_text_renderer(Create, 0)
  add_integer("sapi-voice", -1, "Voice Index", "Voice index", false)
 vlc_module_end ()
 
@@ -102,13 +101,12 @@ static const struct FilterOperationInitializer {
     };
 } filter_ops;
 
-static int Create (vlc_object_t *p_this)
+static int Create (filter_t *p_filter)
 {
-    filter_t *p_filter = (filter_t *)p_this;
     filter_sys_t *p_sys;
     HRESULT hr;
 
-    if (TryEnterMTA(p_this))
+    if (TryEnterMTA(p_filter))
         return VLC_EGENERIC;
 
     p_filter->p_sys = p_sys = (filter_sys_t*) malloc(sizeof(filter_sys_t));
@@ -131,7 +129,7 @@ static int Create (vlc_object_t *p_this)
             hr = cpEnum->GetCount(&ulCount);
             if (SUCCEEDED (hr))
             {
-                int voiceIndex = var_InheritInteger(p_this, "sapi-voice");
+                int voiceIndex = var_InheritInteger(p_filter, "sapi-voice");
                 if (voiceIndex > -1)
                 {
                     if ((unsigned)voiceIndex < ulCount) {
@@ -139,17 +137,17 @@ static int Create (vlc_object_t *p_this)
                         if (SUCCEEDED(hr)) {
                             hr = p_sys->cpVoice->SetVoice(cpVoiceToken);
                             if (SUCCEEDED(hr)) {
-                                msg_Dbg(p_this, "Selected voice %d", voiceIndex);
+                                msg_Dbg(p_filter, "Selected voice %d", voiceIndex);
                             }
                             else {
-                                msg_Err(p_this, "Failed to set voice %d", voiceIndex);
+                                msg_Err(p_filter, "Failed to set voice %d", voiceIndex);
                             }
                             cpVoiceToken->Release();
                             cpVoiceToken = NULL;
                         }
                     }
                     else
-                        msg_Err(p_this, "Voice index exceeds available count");
+                        msg_Err(p_filter, "Voice index exceeds available count");
                 }
             }
             cpEnum->Release();
diff --git a/modules/text_renderer/svg.c b/modules/text_renderer/svg.c
index fbb55f6beb0..39907a39e70 100644
--- a/modules/text_renderer/svg.c
+++ b/modules/text_renderer/svg.c
@@ -47,7 +47,7 @@
 /*****************************************************************************
  * Local prototypes
  *****************************************************************************/
-static int  Create    ( vlc_object_t * );
+static int  Create    ( filter_t * );
 static void Destroy   ( filter_t * );
 static int  RenderText( filter_t *p_filter, subpicture_region_t *p_region_out,
                         subpicture_region_t *p_region_in,
@@ -73,10 +73,9 @@ typedef struct
 vlc_module_begin ()
     set_category( CAT_INPUT )
     set_subcategory( SUBCAT_INPUT_SCODEC )
-    set_capability( "text renderer", 99 )
     add_shortcut( "svg" )
     add_string( "svg-template-file", "", TEMPLATE_TEXT, TEMPLATE_LONGTEXT, true )
-    set_callback( Create )
+    set_callback_text_renderer( Create, 99 )
 vlc_module_end ()
 
 static void svg_RescaletoFit  ( filter_t *, int *width, int *height, float * );
@@ -179,10 +178,8 @@ static const struct vlc_filter_operations filter_ops = {
  * This function allocates and initializes a  vout method.
  *****************************************************************************/
 
-static int Create( vlc_object_t *p_this )
+static int Create( filter_t *p_filter )
 {
-    filter_t *p_filter = ( filter_t * )p_this;
-
     filter_sys_t *p_sys = calloc( 1, sizeof(*p_sys) );
     if( !p_sys )
         return VLC_ENOMEM;
diff --git a/modules/text_renderer/tdummy.c b/modules/text_renderer/tdummy.c
index 4fd996674c1..dc330605f10 100644
--- a/modules/text_renderer/tdummy.c
+++ b/modules/text_renderer/tdummy.c
@@ -28,13 +28,12 @@
 #include <vlc_plugin.h>
 #include <vlc_filter.h>
 
-static int OpenRenderer( vlc_object_t * );
+static int OpenRenderer( filter_t * );
 
 vlc_module_begin ()
     set_shortname( N_("Dummy") )
     set_description( N_("Dummy font renderer") )
-    set_capability( "text renderer", 1 )
-    set_callback( OpenRenderer )
+    set_callback_text_renderer( OpenRenderer, 1 )
 vlc_module_end ()
 
 
@@ -51,9 +50,8 @@ static const struct vlc_filter_operations filter_ops = {
     .render = RenderText,
 };
 
-static int OpenRenderer( vlc_object_t *p_this )
+static int OpenRenderer( filter_t *p_filter )
 {
-    filter_t *p_filter = (filter_t *)p_this;
     p_filter->ops = &filter_ops;
     return VLC_SUCCESS;
 }
-- 
2.26.2



More information about the vlc-devel mailing list