0006-libvlc-add-preliminary-code-path-to-modify-quartztex.patch 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. From fc9aca281a2d103b78b6004297b49636a0069ac7 Mon Sep 17 00:00:00 2001
  2. From: =?UTF-8?q?Felix=20Paul=20K=C3=BChne?= <fkuehne@videolan.org>
  3. Date: Mon, 31 Mar 2014 17:54:01 +0200
  4. Subject: [PATCH 6/9] libvlc: add preliminary code path to modify quartztext
  5. variables on-the-fly
  6. ---
  7. include/vlc/libvlc_media_player.h | 21 +++++++++++++
  8. lib/libvlc.sym | 4 +++
  9. lib/media_player.c | 6 ++++
  10. lib/video.c | 47 +++++++++++++++++++++++++++++
  11. modules/text_renderer/quartztext.c | 60 +++++++++++++++++++++++++++++++++-----
  12. 5 files changed, 130 insertions(+), 8 deletions(-)
  13. diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h
  14. index 3f9441c..81b5ce3 100644
  15. --- a/include/vlc/libvlc_media_player.h
  16. +++ b/include/vlc/libvlc_media_player.h
  17. @@ -1383,6 +1383,27 @@ LIBVLC_API float libvlc_video_get_adjust_float( libvlc_media_player_t *p_mi,
  18. LIBVLC_API void libvlc_video_set_adjust_float( libvlc_media_player_t *p_mi,
  19. unsigned option, float value );
  20. +/** option values for libvlc_video_{get,set}_adjust_{int,float,bool} */
  21. +enum libvlc_video_textrenderer_option_t {
  22. + libvlc_textrender_font = 0,
  23. + libvlc_textrender_fontsize,
  24. + libvlc_textrender_fontcolor,
  25. +};
  26. +
  27. +LIBVLC_API int libvlc_video_get_textrenderer_int( libvlc_media_player_t *p_mi,
  28. + unsigned option );
  29. +
  30. +LIBVLC_API void libvlc_video_set_textrenderer_int( libvlc_media_player_t *p_mi,
  31. + unsigned option, int value );
  32. +
  33. +LIBVLC_API char *libvlc_video_get_textrenderer_string( libvlc_media_player_t *p_mi,
  34. + unsigned option );
  35. +
  36. +LIBVLC_API void libvlc_video_set_textrenderer_string( libvlc_media_player_t *p_mi,
  37. + unsigned option,
  38. + const char *psz_text );
  39. +
  40. +
  41. /** @} video */
  42. /** \defgroup libvlc_audio LibVLC audio controls
  43. diff --git a/lib/libvlc.sym b/lib/libvlc.sym
  44. index 1e241e7..ab1e3e8 100644
  45. --- a/lib/libvlc.sym
  46. +++ b/lib/libvlc.sym
  47. @@ -224,6 +224,8 @@ libvlc_video_get_spu_count
  48. libvlc_video_get_spu_delay
  49. libvlc_video_get_spu_description
  50. libvlc_video_get_teletext
  51. +libvlc_video_get_text_renderer_int
  52. +libvlc_video_get_text_renderer_string
  53. libvlc_video_get_title_description
  54. libvlc_video_get_track
  55. libvlc_video_get_track_count
  56. @@ -248,6 +250,8 @@ libvlc_video_set_spu
  57. libvlc_video_set_spu_delay
  58. libvlc_video_set_subtitle_file
  59. libvlc_video_set_teletext
  60. +libvlc_video_set_text_renderer_int
  61. +libvlc_video_set_text_renderer_string
  62. libvlc_video_set_track
  63. libvlc_video_take_snapshot
  64. libvlc_vlm_add_broadcast
  65. diff --git a/lib/media_player.c b/lib/media_player.c
  66. index b41d6f3..19b447d 100644
  67. --- a/lib/media_player.c
  68. +++ b/lib/media_player.c
  69. @@ -556,6 +556,12 @@ libvlc_media_player_new( libvlc_instance_t *instance )
  70. var_Create (mp, "saturation", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT);
  71. var_Create (mp, "gamma", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT);
  72. +#ifdef __APPLE__
  73. + var_Create (mp, "quartztext-font", VLC_VAR_STRING | VLC_VAR_DOINHERIT);
  74. + var_Create (mp, "quartztext-fontsize", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
  75. + var_Create (mp, "quartztext-color", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
  76. +#endif
  77. +
  78. /* Audio */
  79. var_Create (mp, "aout", VLC_VAR_STRING | VLC_VAR_DOINHERIT);
  80. var_Create (mp, "mute", VLC_VAR_BOOL);
  81. diff --git a/lib/video.c b/lib/video.c
  82. index 4abe36e..f9d306a 100644
  83. --- a/lib/video.c
  84. +++ b/lib/video.c
  85. @@ -908,3 +908,50 @@ float libvlc_video_get_adjust_float( libvlc_media_player_t *p_mi,
  86. {
  87. return get_float( p_mi, "adjust", adjust_option_bynumber(option) );
  88. }
  89. +
  90. +
  91. +static const opt_t *
  92. +textrenderer_option_bynumber( unsigned option )
  93. +{
  94. + static const opt_t optlist[] =
  95. + {
  96. + { "quartztext-font", VLC_VAR_STRING },
  97. + { "quartztext-fontsize", VLC_VAR_INTEGER },
  98. + { "quartztext-color", VLC_VAR_INTEGER },
  99. + };
  100. + enum { num_opts = sizeof(optlist) / sizeof(*optlist) };
  101. +
  102. + const opt_t *r = option < num_opts ? optlist+option : NULL;
  103. + if( !r )
  104. + libvlc_printerr( "Unknown quartztext option" );
  105. + return r;
  106. +}
  107. +
  108. +/* basic text renderer support */
  109. +
  110. +void libvlc_video_set_textrenderer_int( libvlc_media_player_t *p_mi,
  111. + unsigned option, int value )
  112. +{
  113. + set_int( p_mi, "quartztext", textrenderer_option_bynumber(option), value );
  114. +}
  115. +
  116. +
  117. +int libvlc_video_get_textrenderer_int( libvlc_media_player_t *p_mi,
  118. + unsigned option )
  119. +{
  120. + return get_int( p_mi, "quartztext", textrenderer_option_bynumber(option) );
  121. +}
  122. +
  123. +
  124. +void libvlc_video_set_textrenderer_string( libvlc_media_player_t *p_mi,
  125. + unsigned option, const char *psz_value )
  126. +{
  127. + set_string( p_mi, "quartztext", textrenderer_option_bynumber(option), psz_value );
  128. +}
  129. +
  130. +
  131. +char * libvlc_video_get_textrenderer_string( libvlc_media_player_t *p_mi,
  132. + unsigned option )
  133. +{
  134. + return get_string( p_mi, "quartztext", textrenderer_option_bynumber(option) );
  135. +}
  136. diff --git a/modules/text_renderer/quartztext.c b/modules/text_renderer/quartztext.c
  137. index 3b8e6ca..d81b531 100644
  138. --- a/modules/text_renderer/quartztext.c
  139. +++ b/modules/text_renderer/quartztext.c
  140. @@ -65,6 +65,10 @@
  141. static int Create (vlc_object_t *);
  142. static void Destroy(vlc_object_t *);
  143. +static int QuartztextCallback( vlc_object_t *p_this, char const *psz_var,
  144. + vlc_value_t oldval, vlc_value_t newval,
  145. + void *p_data );
  146. +
  147. static int LoadFontsFromAttachments(filter_t *p_filter);
  148. static int RenderText(filter_t *, subpicture_region_t *,
  149. @@ -131,16 +135,20 @@ vlc_module_begin ()
  150. add_string("quartztext-font", DEFAULT_FONT, FONT_TEXT, FONT_LONGTEXT,
  151. false)
  152. - add_integer("quartztext-rel-fontsize", DEFAULT_REL_FONT_SIZE, FONTSIZER_TEXT,
  153. + change_safe()
  154. + add_integer("quartztext-fontsize", DEFAULT_REL_FONT_SIZE, FONTSIZER_TEXT,
  155. FONTSIZER_LONGTEXT, false)
  156. + change_safe()
  157. change_integer_list(pi_sizes, ppsz_sizes_text)
  158. add_integer("quartztext-color", 0x00FFFFFF, COLOR_TEXT,
  159. COLOR_LONGTEXT, false)
  160. + change_safe()
  161. change_integer_list(pi_color_values, ppsz_color_descriptions)
  162. add_bool("quartztext-outline", false, OUTLINE_TEXT, NULL, false)
  163. add_bool("quartztext-shadow", true, SHADOW_TEXT, NULL, false)
  164. set_capability("text renderer", 50)
  165. add_shortcut("text")
  166. + add_shortcut("quartztext")
  167. set_callbacks(Create, Destroy)
  168. vlc_module_end ()
  169. @@ -182,7 +190,8 @@ struct offscreen_bitmap_t
  170. *****************************************************************************/
  171. struct filter_sys_t
  172. {
  173. - char *psz_font_name;
  174. + vlc_mutex_t lock;
  175. + char *psz_font_name;
  176. uint8_t i_font_opacity;
  177. int i_font_color;
  178. int i_font_size;
  179. @@ -209,9 +218,9 @@ static int Create(vlc_object_t *p_this)
  180. p_filter->p_sys = p_sys = malloc(sizeof(filter_sys_t));
  181. if (!p_sys)
  182. return VLC_ENOMEM;
  183. - p_sys->psz_font_name = var_CreateGetString(p_this, "quartztext-font");
  184. + p_sys->psz_font_name = var_CreateGetStringCommand(p_this, "quartztext-font");
  185. p_sys->i_font_opacity = 255;
  186. - p_sys->i_font_color = VLC_CLIP(var_CreateGetInteger(p_this, "quartztext-color") , 0, 0xFFFFFF);
  187. + p_sys->i_font_color = VLC_CLIP(var_CreateGetIntegerCommand(p_this, "quartztext-color") , 0, 0xFFFFFF);
  188. p_sys->b_outline = var_InheritBool(p_this, "quartztext-outline");
  189. p_sys->b_shadow = var_InheritBool(p_this, "quartztext-shadow");
  190. p_sys->i_font_size = GetFontSize(p_filter);
  191. @@ -224,6 +233,11 @@ static int Create(vlc_object_t *p_this)
  192. p_sys->i_fonts = 0;
  193. #endif
  194. + vlc_mutex_init( &p_sys->lock );
  195. + var_AddCallback( p_filter, "quartztext-font", QuartztextCallback, p_sys );
  196. + var_AddCallback( p_filter, "quartztext-fontsize", QuartztextCallback, p_sys );
  197. + var_AddCallback( p_filter, "quartztext-color", QuartztextCallback, p_sys );
  198. +
  199. LoadFontsFromAttachments(p_filter);
  200. return VLC_SUCCESS;
  201. @@ -238,6 +252,16 @@ static void Destroy(vlc_object_t *p_this)
  202. {
  203. filter_t *p_filter = (filter_t *)p_this;
  204. filter_sys_t *p_sys = p_filter->p_sys;
  205. +
  206. + var_DelCallback( p_filter, "quartztext-font", QuartztextCallback, p_sys );
  207. + var_DelCallback( p_filter, "quartztext-fontsize", QuartztextCallback, p_sys );
  208. + var_DelCallback( p_filter, "quartztext-color", QuartztextCallback, p_sys );
  209. + vlc_mutex_destroy( &p_sys->lock );
  210. +
  211. + var_Destroy( p_filter, "quartztext-font" ) ;
  212. + var_Destroy( p_filter, "quartztext-fontsize" );
  213. + var_Destroy( p_filter, "quartztext-color" );
  214. +
  215. #ifndef TARGET_OS_IPHONE
  216. if (p_sys->p_fonts) {
  217. for (int k = 0; k < p_sys->i_fonts; k++) {
  218. @@ -245,8 +269,8 @@ static void Destroy(vlc_object_t *p_this)
  219. free(p_sys->p_fonts);
  220. }
  221. -#endif
  222. free(p_sys->psz_font_name);
  223. +#endif
  224. free(p_sys);
  225. }
  226. @@ -1001,12 +1025,12 @@ static int GetFontSize(filter_t *p_filter)
  227. {
  228. int i_size = 0;
  229. - int i_ratio = var_CreateGetInteger( p_filter, "quartztext-rel-fontsize" );
  230. + int i_ratio = var_CreateGetIntegerCommand( p_filter, "quartztext-fontsize" );
  231. +
  232. if( i_ratio > 0 )
  233. i_size = (int)p_filter->fmt_out.video.i_height / i_ratio;
  234. - if( i_size <= 0 )
  235. - {
  236. + if( i_size <= 0 ) {
  237. msg_Warn( p_filter, "invalid fontsize, using 12" );
  238. i_size = 12;
  239. }
  240. @@ -1092,3 +1116,23 @@ static int RenderYUVA(filter_t *p_filter, subpicture_region_t *p_region,
  241. return VLC_SUCCESS;
  242. }
  243. +
  244. +static int QuartztextCallback( vlc_object_t *p_this, char const *psz_var,
  245. + vlc_value_t oldval, vlc_value_t newval,
  246. + void *p_data )
  247. +{
  248. + VLC_UNUSED(oldval);
  249. + filter_t *p_filter = (filter_t *)p_this;
  250. + filter_sys_t *p_sys = (filter_sys_t *)p_data;
  251. +
  252. + vlc_mutex_lock( &p_sys->lock );
  253. + if( !strcmp( psz_var, "quartztext-font" ) )
  254. + p_sys->psz_font_name = newval.psz_string;
  255. + else if( !strcmp( psz_var, "quartztext-fontsize" ) )
  256. + p_sys->i_font_size = (int)p_filter->fmt_out.video.i_height / newval.i_int;
  257. + else if( !strcmp( psz_var, "quartztext-color" ) )
  258. + p_sys->i_font_color = VLC_CLIP(newval.i_int, 0, 0xFFFFFF);
  259. + vlc_mutex_unlock( &p_sys->lock );
  260. +
  261. + return VLC_SUCCESS;
  262. +}
  263. --
  264. 2.3.2