]> git.sesse.net Git - vlc/blobdiff - modules/codec/cc.c
mediacodec: remove jni_SetAndroidSurfaceSizeEnv call
[vlc] / modules / codec / cc.c
index 74a35d966961f3b51a802127d8e45f041dc4dd58..678f9b902977ada8c942d665da9b950e9fa91e8d 100644 (file)
@@ -167,16 +167,16 @@ static int Open( vlc_object_t *p_this )
 
     switch( p_dec->fmt_in.i_codec )
     {
-        case VLC_FOURCC('c','c','1',' '):
+        case VLC_CODEC_EIA608_1:
             i_field = 0; i_channel = 1;
             break;
-        case VLC_FOURCC('c','c','2',' '):
+        case VLC_CODEC_EIA608_2:
             i_field = 0; i_channel = 2;
             break;
-        case VLC_FOURCC('c','c','3',' '):
+        case VLC_CODEC_EIA608_3:
             i_field = 1; i_channel = 1;
             break;
-        case VLC_FOURCC('c','c','4',' '):
+        case VLC_CODEC_EIA608_4:
             i_field = 1; i_channel = 2;
             break;
 
@@ -305,6 +305,8 @@ static subpicture_t *Subtitle( decoder_t *p_dec, char *psz_subtitle, char *psz_h
     if( i_pts <= VLC_TS_INVALID )
     {
         msg_Warn( p_dec, "subtitle without a date" );
+        free( psz_subtitle );
+        free( psz_html );
         return NULL;
     }
 
@@ -327,9 +329,13 @@ static subpicture_t *Subtitle( decoder_t *p_dec, char *psz_subtitle, char *psz_h
 
     subpicture_updater_sys_t *p_spu_sys = p_spu->updater.p_sys;
 
-    p_spu_sys->align = SUBPICTURE_ALIGN_TOP | SUBPICTURE_ALIGN_LEFT;
+    /* The "leavetext" alignment is a special mode where the subpicture
+       region itself gets aligned, but the text inside it does not */
+    p_spu_sys->align = SUBPICTURE_ALIGN_LEAVETEXT;
     p_spu_sys->text  = psz_subtitle;
     p_spu_sys->html  = psz_html;
+    p_spu_sys->i_font_height_percent = 5;
+    p_spu_sys->renderbg = true;
 
     return p_spu;
 }
@@ -933,12 +939,16 @@ static void Eia608TextLine( struct eia608_screen *screen, char *psz_text, int i_
     /* Search the start */
     i_start = 0;
 
+    /* Ensure we get a monospaced font (required for accurate positioning */
+    if( b_html )
+        CAT( "<tt>" );
+
     /* Convert leading spaces to non-breaking so that they don't get
        stripped by the RenderHtml routine as regular whitespace */
     while( i_start < EIA608_SCREEN_COLUMNS && p_char[i_start] == ' ' ) {
-       Eia608TextUtf8( utf8, 0x89 );
-       CAT( utf8 );
-       i_start++;
+        Eia608TextUtf8( utf8, 0x89 );
+        CAT( utf8 );
+        i_start++;
     }
 
     /* Search the end */
@@ -986,9 +996,9 @@ static void Eia608TextLine( struct eia608_screen *screen, char *psz_text, int i_
                     "#ff00ff",  // magenta
                     "#ffffff",  // user defined XXX we use white
                 };
-                CAT( "<font color=" );
+                CAT( "<font color=\"" );
                 CAT( ppsz_color[color] );
-                CAT( ">" );
+                CAT( "\">" );
             }
             if( ( b_close_italics && b_italics ) || ( b_italics && !b_last_italics ) )
                 CAT( "<i>" );
@@ -1038,6 +1048,7 @@ static void Eia608TextLine( struct eia608_screen *screen, char *psz_text, int i_
             CAT( "</i>" );
         if( last_color != EIA608_COLOR_DEFAULT )
             CAT( "</font>" );
+        CAT( "</tt>" );
     }
 #undef CAT
 }