[vlc-devel] commit: Support for AQT subtitles. (Jean-Baptiste Kempf )

git version control git at videolan.org
Fri May 2 08:46:05 CEST 2008


vlc | branch: master | Jean-Baptiste Kempf <jb at videolan.org> | Thu May  1 23:29:23 2008 -0700| [bd57eaaeb3001b9e2af467053bd55f5f15b2a7ea]

Support for AQT subtitles.
Parsing is fine but timing is wrong since it must be multiplied by FPS.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=bd57eaaeb3001b9e2af467053bd55f5f15b2a7ea
---

 modules/demux/subtitle.c |   60 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 59 insertions(+), 1 deletions(-)

diff --git a/modules/demux/subtitle.c b/modules/demux/subtitle.c
index ef9a359..38fecc2 100644
--- a/modules/demux/subtitle.c
+++ b/modules/demux/subtitle.c
@@ -99,7 +99,8 @@ enum
     SUB_TYPE_SAMI,
     SUB_TYPE_SUBVIEWER,
     SUB_TYPE_DVDSUBTITLE,
-    SUB_TYPE_MPL2
+    SUB_TYPE_MPL2,
+    SUB_TYPE_AQT
 };
 
 typedef struct
@@ -145,6 +146,7 @@ static int  ParseVplayer    ( demux_t *, subtitle_t *, int );
 static int  ParseSami       ( demux_t *, subtitle_t *, int );
 static int  ParseDVDSubtitle( demux_t *, subtitle_t *, int );
 static int  ParseMPL2       ( demux_t *, subtitle_t *, int );
+static int  ParseAQT        ( demux_t *, subtitle_t *, int );
 
 static struct
 {
@@ -164,6 +166,7 @@ static struct
     { "sami",       SUB_TYPE_SAMI,        "SAMI",        ParseSami },
     { "dvdsubtitle",SUB_TYPE_DVDSUBTITLE, "DVDSubtitle", ParseDVDSubtitle },
     { "mpl2",       SUB_TYPE_MPL2,        "MPL2",        ParseMPL2 },
+    { "aqt",        SUB_TYPE_AQT,         "AQTitle",     ParseAQT },
     { NULL,         SUB_TYPE_UNKNOWN,     "Unknown",     NULL }
 };
 
@@ -317,6 +320,9 @@ static int Open ( vlc_object_t *p_this )
             {
                 p_sys->i_type = SUB_TYPE_MPL2;
                 break;
+            }else if( sscanf (s, "-->> %d", &i_dummy) == 1 )
+            {
+                p_sys->i_type = SUB_TYPE_AQT;
             }
 
             free( s );
@@ -1226,3 +1232,55 @@ static int ParseMPL2( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
     return VLC_SUCCESS;
 }
 
+static int ParseAQT( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
+{
+    demux_sys_t *p_sys = p_demux->p_sys;
+    text_t      *txt = &p_sys->txt;
+    char *psz_text = strdup( "" );
+    int i_old = 0;
+    int i_firstline = 1;
+
+    for( ;; )
+    {
+        int t; /* Time */
+
+        const char *s = TextGetLine( txt );
+
+        if( !s )
+            return VLC_EGENERIC;
+
+        /* Data Lines */
+        if( sscanf (s, "-->> %d", &t) == 1)
+        {
+            p_subtitle->i_start = (int64_t)t; /* * FPS*/
+            p_subtitle->i_stop  = 0;
+
+            /* Starting of a subtitle */
+            if( i_firstline )
+            {
+                i_firstline = 0;
+            }
+            /* We have been too far: end of the subtitle, begin of next */
+            else
+            {
+                txt->i_line--;
+                break;
+            }
+        }
+        /* Text Lines */
+        else
+        {
+            i_old = strlen( psz_text ) + 1;
+            psz_text = realloc( psz_text, i_old + strlen( s ) + 1 );
+            if( !psz_text )
+                 return VLC_ENOMEM;
+            strcat( psz_text, s );
+            strcat( psz_text, "\n" );
+            if( txt->i_line == txt->i_line_count )
+                break;
+        }
+    }
+    p_subtitle->psz_text = psz_text;
+    return VLC_SUCCESS;
+}
+




More information about the vlc-devel mailing list