Commit c106f23b authored by Laurent Aimar's avatar Laurent Aimar

* added support for S_SSA and S_ASS old way (fix 1373).

   added removing of all {\xxxx} in the SSA stream.
parent 1547721f
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* mkv.cpp : matroska demuxer * mkv.cpp : matroska demuxer
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: mkv.cpp,v 1.28 2003/10/11 21:08:40 hartman Exp $ * $Id: mkv.cpp,v 1.29 2003/10/22 00:00:54 fenrir Exp $
* *
* Authors: Laurent Aimar <fenrir@via.ecp.fr> * Authors: Laurent Aimar <fenrir@via.ecp.fr>
* *
...@@ -1244,7 +1244,9 @@ static int Open( vlc_object_t * p_this ) ...@@ -1244,7 +1244,9 @@ static int Open( vlc_object_t * p_this )
{ {
tk.i_codec = VLC_FOURCC( 's', 'u', 'b', 't' ); tk.i_codec = VLC_FOURCC( 's', 'u', 'b', 't' );
} }
else if( !strcmp( tk.psz_codec, "S_TEXT/SSA" ) ) else if( !strcmp( tk.psz_codec, "S_TEXT/SSA" ) ||
!strcmp( tk.psz_codec, "S_SSA" ) ||
!strcmp( tk.psz_codec, "S_ASS" ))
{ {
tk.i_codec = VLC_FOURCC( 's', 'u', 'b', 't' ); tk.i_codec = VLC_FOURCC( 's', 'u', 'b', 't' );
} }
...@@ -1632,10 +1634,13 @@ static void BlockDecode( input_thread_t *p_input, KaxBlock *block, mtime_t i_pts ...@@ -1632,10 +1634,13 @@ static void BlockDecode( input_thread_t *p_input, KaxBlock *block, mtime_t i_pts
{ {
p_pes->p_first->p_payload_end[-1] = '\0'; p_pes->p_first->p_payload_end[-1] = '\0';
} }
if( !strcmp( tk.psz_codec, "S_TEXT/SSA" ) ) if( !strcmp( tk.psz_codec, "S_TEXT/SSA" ) ||
!strcmp( tk.psz_codec, "S_SSA" ) ||
!strcmp( tk.psz_codec, "S_ASS" ))
{ {
/* remove all fields before text for now */ /* remove all fields before text for now */
char *start = (char*)p_pes->p_first->p_payload_start; char *start = (char*)p_pes->p_first->p_payload_start;
char *src, *dst;
int i_comma = 0; int i_comma = 0;
while( *start && i_comma < 8 ) while( *start && i_comma < 8 )
...@@ -1647,6 +1652,29 @@ static void BlockDecode( input_thread_t *p_input, KaxBlock *block, mtime_t i_pts ...@@ -1647,6 +1652,29 @@ static void BlockDecode( input_thread_t *p_input, KaxBlock *block, mtime_t i_pts
} }
memmove( p_pes->p_first->p_payload_start, start, memmove( p_pes->p_first->p_payload_start, start,
strlen( start) + 1 ); strlen( start) + 1 );
/* remove all {\... } stuff */
src = dst = (char*)p_pes->p_first->p_payload_start;
for( ;; )
{
if( src[0] == '{' && src[1] == '\\' )
{
while( *src )
{
if( *src == '}' )
{
src++;
break;
}
src++;
}
}
if( *src == '\0' )
{
break;
}
*dst++ = *src++;
}
*dst++ = '\0';
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment