X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fdemux%2Fsubtitle.c;h=0aedae1310fef6f937b4335ade82556a1bb83e0f;hb=321d5550316b6ba4e69dbdce6a57ab7281df3713;hp=0ec9ecb8939ff133f243fae6f2a927088bd9c959;hpb=997c6c3419170b68d41ff8ee5b27b26166138984;p=vlc diff --git a/modules/demux/subtitle.c b/modules/demux/subtitle.c index 0ec9ecb893..0aedae1310 100644 --- a/modules/demux/subtitle.c +++ b/modules/demux/subtitle.c @@ -28,7 +28,9 @@ #include #include -#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif #include #include @@ -103,8 +105,8 @@ static void TextUnload( text_t * ); typedef struct { - mtime_t i_start; - mtime_t i_stop; + int64_t i_start; + int64_t i_stop; char *psz_text; } subtitle_t; @@ -119,7 +121,7 @@ struct demux_sys_t int64_t i_next_demux_date; int64_t i_microsecperframe; - mtime_t i_original_mspf; + int64_t i_original_mspf; char *psz_header; int i_subtitle; @@ -188,17 +190,20 @@ static int Open ( vlc_object_t *p_this ) /* Get the FPS */ - p_sys->i_microsecperframe = 40000; /* default to 25 fps */ f_fps = var_CreateGetFloat( p_demux, "sub-fps" ); if( f_fps >= 1.0 ) { - p_sys->i_microsecperframe = (mtime_t)( (float)1000000 / f_fps ); + p_sys->i_microsecperframe = (int64_t)( (float)1000000 / f_fps ); + } + else + { + p_sys->i_microsecperframe = 0; } f_fps = var_CreateGetFloat( p_demux, "sub-original-fps" ); if( f_fps >= 1.0 ) { - p_sys->i_original_mspf = (mtime_t)( (float)1000000 / f_fps ); + p_sys->i_original_mspf = (int64_t)( (float)1000000 / f_fps ); } else { @@ -674,10 +679,14 @@ static int ParseMicroDvd( demux_t *p_demux, subtitle_t *p_subtitle ) char *s; char buffer_text[MAX_LINE + 1]; - unsigned int i_start; - unsigned int i_stop; + int i_start; + int i_stop; unsigned int i; + int i_microsecperframe = 40000; /* default to 25 fps */ + if( p_sys->i_microsecperframe > 0 ) + i_microsecperframe = p_sys->i_microsecperframe; + p_subtitle->i_start = 0; p_subtitle->i_stop = 0; p_subtitle->psz_text = NULL; @@ -707,8 +716,8 @@ static int ParseMicroDvd( demux_t *p_demux, subtitle_t *p_subtitle ) } } - p_subtitle->i_start = (mtime_t)i_start * p_sys->i_microsecperframe; - p_subtitle->i_stop = (mtime_t)i_stop * p_sys->i_microsecperframe; + p_subtitle->i_start = (int64_t)i_start * i_microsecperframe; + p_subtitle->i_stop = (int64_t)i_stop * i_microsecperframe; p_subtitle->psz_text = strndup( buffer_text, MAX_LINE ); return( 0 ); } @@ -730,8 +739,8 @@ static int ParseSubRip( demux_t *p_demux, subtitle_t *p_subtitle ) char *s; char buffer_text[ 10 * MAX_LINE]; int i_buffer_text; - mtime_t i_start; - mtime_t i_stop; + int64_t i_start; + int64_t i_stop; p_subtitle->i_start = 0; p_subtitle->i_stop = 0; @@ -749,15 +758,15 @@ static int ParseSubRip( demux_t *p_demux, subtitle_t *p_subtitle ) &h1, &m1, &s1, &d1, &h2, &m2, &s2, &d2 ) == 8 ) { - i_start = ( (mtime_t)h1 * 3600*1000 + - (mtime_t)m1 * 60*1000 + - (mtime_t)s1 * 1000 + - (mtime_t)d1 ) * 1000; + i_start = ( (int64_t)h1 * 3600*1000 + + (int64_t)m1 * 60*1000 + + (int64_t)s1 * 1000 + + (int64_t)d1 ) * 1000; - i_stop = ( (mtime_t)h2 * 3600*1000 + - (mtime_t)m2 * 60*1000 + - (mtime_t)s2 * 1000 + - (mtime_t)d2 ) * 1000; + i_stop = ( (int64_t)h2 * 3600*1000 + + (int64_t)m2 * 60*1000 + + (int64_t)s2 * 1000 + + (int64_t)d2 ) * 1000; /* Now read text until an empty line */ for( i_buffer_text = 0;; ) @@ -780,10 +789,10 @@ static int ParseSubRip( demux_t *p_demux, subtitle_t *p_subtitle ) if( p_sys->i_microsecperframe != 0 && p_sys->i_original_mspf != 0) { - p_subtitle->i_start = (mtime_t)i_start * + p_subtitle->i_start = (int64_t)i_start * p_sys->i_microsecperframe/ p_sys->i_original_mspf; - p_subtitle->i_stop = (mtime_t)i_stop * + p_subtitle->i_stop = (int64_t)i_stop * p_sys->i_microsecperframe / p_sys->i_original_mspf; } @@ -823,8 +832,8 @@ static int ParseSubViewer( demux_t *p_demux, subtitle_t *p_subtitle ) char *s; char buffer_text[ 10 * MAX_LINE]; int i_buffer_text; - mtime_t i_start; - mtime_t i_stop; + int64_t i_start; + int64_t i_stop; p_subtitle->i_start = 0; p_subtitle->i_stop = 0; @@ -842,15 +851,15 @@ static int ParseSubViewer( demux_t *p_demux, subtitle_t *p_subtitle ) &h1, &m1, &s1, &d1, &h2, &m2, &s2, &d2 ) == 8 ) { - i_start = ( (mtime_t)h1 * 3600*1000 + - (mtime_t)m1 * 60*1000 + - (mtime_t)s1 * 1000 + - (mtime_t)d1 ) * 1000; + i_start = ( (int64_t)h1 * 3600*1000 + + (int64_t)m1 * 60*1000 + + (int64_t)s1 * 1000 + + (int64_t)d1 ) * 1000; - i_stop = ( (mtime_t)h2 * 3600*1000 + - (mtime_t)m2 * 60*1000 + - (mtime_t)s2 * 1000 + - (mtime_t)d2 ) * 1000; + i_stop = ( (int64_t)h2 * 3600*1000 + + (int64_t)m2 * 60*1000 + + (int64_t)s2 * 1000 + + (int64_t)d2 ) * 1000; /* Now read text until an empty line */ for( i_buffer_text = 0;; ) @@ -910,8 +919,8 @@ static int ParseSSA( demux_t *p_demux, subtitle_t *p_subtitle ) char buffer_text[ 10 * MAX_LINE]; char *s; - mtime_t i_start; - mtime_t i_stop; + int64_t i_start; + int64_t i_stop; p_subtitle->i_start = 0; p_subtitle->i_stop = 0; @@ -935,15 +944,15 @@ static int ParseSSA( demux_t *p_demux, subtitle_t *p_subtitle ) &h2, &m2, &s2, &c2, buffer_text ) == 10 ) { - i_start = ( (mtime_t)h1 * 3600*1000 + - (mtime_t)m1 * 60*1000 + - (mtime_t)s1 * 1000 + - (mtime_t)c1 * 10 ) * 1000; + i_start = ( (int64_t)h1 * 3600*1000 + + (int64_t)m1 * 60*1000 + + (int64_t)s1 * 1000 + + (int64_t)c1 * 10 ) * 1000; - i_stop = ( (mtime_t)h2 * 3600*1000 + - (mtime_t)m2 * 60*1000 + - (mtime_t)s2 * 1000 + - (mtime_t)c2 * 10 ) * 1000; + i_stop = ( (int64_t)h2 * 3600*1000 + + (int64_t)m2 * 60*1000 + + (int64_t)s2 * 1000 + + (int64_t)c2 * 10 ) * 1000; /* The dec expects: ReadOrder, Layer, Style, Name, MarginL, MarginR, MarginV, Effect, Text */ if( p_sys->i_type == SUB_TYPE_SSA1 ) @@ -1002,7 +1011,7 @@ static int ParseVplayer( demux_t *p_demux, subtitle_t *p_subtitle ) */ char *p; char buffer_text[MAX_LINE + 1]; - mtime_t i_start; + int64_t i_start; unsigned int i; p_subtitle->i_start = 0; @@ -1024,9 +1033,9 @@ static int ParseVplayer( demux_t *p_demux, subtitle_t *p_subtitle ) memset( buffer_text, '\0', MAX_LINE ); if( sscanf( p, "%d:%d:%d%[ :]%[^\r\n]", &h, &m, &s, &c, buffer_text ) == 5 ) { - i_start = ( (mtime_t)h * 3600*1000 + - (mtime_t)m * 60*1000 + - (mtime_t)s * 1000 ) * 1000; + i_start = ( (int64_t)h * 3600*1000 + + (int64_t)m * 60*1000 + + (int64_t)s * 1000 ) * 1000; break; } } @@ -1083,7 +1092,7 @@ static int ParseSami( demux_t *p_demux, subtitle_t *p_subtitle ) text_t *txt = &p_sys->txt; char *p; - int i_start; + int64_t i_start; int i_text; char buffer_text[10*MAX_LINE + 1];