[vlc-devel] [PATCH v3] ZVBI: add option to select decoding Presentation Level

Stefan Pöschel basic.master at gmx.de
Fri Feb 5 15:48:40 CET 2016


Am 30.01.2016 um 23:33 schrieb Stefan Pöschel:
> Am 30.01.2016 um 18:49 schrieb Stefan Pöschel:
>> Am 30.01.2016 um 18:39 schrieb Jean-Baptiste Kempf:
>>> On 30 Jan, Stefan Pöschel wrote :
>>>> +#define LEVEL_TEXT N_("Presentation Level")
>>>> +#define LEVEL_LONGTEXT N_( "Presentation Level the decoder shall conform to. " \
>>>> +  "Default Level is 3.5." )
>>>
>>> I believe your longtext is useless :)
>>> (Default part should be ommited, at least.
>>>
>>> Rest seems good.
>>>
>>> With my kindest regards,
>>>
>>
>> I do not insist on the longtext - feel free to modify/remove it :-)
> 
> Thinking about it, it turns out that it also saves translation effort
> to remove the entire longtext, so here the modified patch:

Just a tiny final fix: the correct Presentation Level is 1 (not 1.0).




This commit adds an option to the ZVBI settings to select the Teletext
Presentation Level which is used for decoding. Thus one can switch to a lower
level in case of problems or can compare the rendering of a page at different
levels.
The default value is Level 3.5, which already has been used each time for
decoding here.
---
 modules/codec/zvbi.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/modules/codec/zvbi.c b/modules/codec/zvbi.c
index 4d4eaa2..59d98c8 100644
--- a/modules/codec/zvbi.c
+++ b/modules/codec/zvbi.c
@@ -76,11 +76,21 @@ static void Close( vlc_object_t * );
 #define TELX_LONGTEXT N_( "Output teletext subtitles as text " \
   "instead of as RGBA" )

+#define LEVEL_TEXT N_("Presentation Level")
+
 static const int pi_pos_values[] = { 0, 1, 2, 4, 8, 5, 6, 9, 10 };
 static const char *const ppsz_pos_descriptions[] =
 { N_("Center"), N_("Left"), N_("Right"), N_("Top"), N_("Bottom"),
   N_("Top-Left"), N_("Top-Right"), N_("Bottom-Left"), N_("Bottom-Right") };

+static const int level_values[] = { 0, 1, 2, 3 };
+static const char *const level_descriptions[] =
+{ N_("1"), N_("1.5"), N_("2.5"), N_("3.5") };
+
+/* separate internal and zvbi values, as the latter could change */
+static const int level_zvbi_values[] =
+{ VBI_WST_LEVEL_1, VBI_WST_LEVEL_1p5, VBI_WST_LEVEL_2p5, VBI_WST_LEVEL_3p5 };
+
 vlc_module_begin ()
     set_description( N_("VBI and Teletext decoder") )
     set_shortname( N_("VBI & Teletext") )
@@ -97,6 +107,8 @@ vlc_module_begin ()
         change_integer_list( pi_pos_values, ppsz_pos_descriptions );
     add_bool( "vbi-text", false,
               TELX_TEXT, TELX_LONGTEXT, false )
+    add_integer( "vbi-level", 3, LEVEL_TEXT, NULL, false )
+        change_integer_list( level_values, level_descriptions );
 vlc_module_end ()

 /****************************************************************************
@@ -154,6 +166,7 @@ struct decoder_sys_t
     unsigned int      i_wanted_subpage;
     /* */
     bool              b_opaque;
+    unsigned int      i_level;
     struct {
         int pgno, subno;
     }                 nav_link[6];
@@ -255,6 +268,8 @@ static int Open( vlc_object_t *p_this )
     p_sys->b_text = var_CreateGetBool( p_dec, "vbi-text" );
 //    var_AddCallback( p_dec, "vbi-text", Text, p_sys );

+    p_sys->i_level = var_CreateGetInteger( p_dec, "vbi-level" );
+
     /* Listen for keys */
     var_AddCallback( p_dec->p_libvlc, "key-pressed", EventKey, p_dec );

@@ -361,13 +376,14 @@ static subpicture_t *Decode( decoder_t *p_dec, block_t **pp_block )
     const unsigned int i_wanted_page = p_sys->i_wanted_page;
     const unsigned int i_wanted_subpage = p_sys->i_wanted_subpage;
     const bool b_opaque = p_sys->b_opaque;
+    const unsigned int i_level = p_sys->i_level > 3 ? 3 : p_sys->i_level;
     vlc_mutex_unlock( &p_sys->lock );

     /* Try to see if the page we want is in the cache yet */
     memset( &p_page, 0, sizeof(vbi_page) );
     b_cached = vbi_fetch_vt_page( p_sys->p_vbi_dec, &p_page,
                                   vbi_dec2bcd( i_wanted_page ),
-                                  i_wanted_subpage, VBI_WST_LEVEL_3p5,
+                                  i_wanted_subpage, level_zvbi_values[i_level],
                                   25, true );

     if( i_wanted_page == p_sys->i_last_page && !p_sys->b_update )
-- 
2.7.0


More information about the vlc-devel mailing list