X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fdemux%2Fsubtitle.c;h=f7b9ae3a488446db350851f491a2c4e90fa2ce95;hb=5d313c65e44d8963262fdbc5d5d52f5169f3f787;hp=f65575f31fb0f49536266637a676f187d87dd2f4;hpb=13ae40b0efc4f1b1ce205d9a057537047fcab3f4;p=vlc diff --git a/modules/demux/subtitle.c b/modules/demux/subtitle.c index f65575f31f..f7b9ae3a48 100644 --- a/modules/demux/subtitle.c +++ b/modules/demux/subtitle.c @@ -31,7 +31,7 @@ # include "config.h" #endif -#include +#include #include #include @@ -57,16 +57,17 @@ static void Close( vlc_object_t *p_this ); "This will only work with MicroDVD and SubRIP (SRT) subtitles.") #define SUB_TYPE_LONGTEXT \ N_("Force the subtiles format. Valid values are : \"microdvd\", " \ - "\"subrip\", \"ssa1\", \"ssa2-4\", \"ass\", \"vplayer\" " \ - "\"sami\", \"dvdsubtitle\", \"mpl2\", \"aqt\", \"pjs\" "\ - "\"mpsub\" \"jacosub\" \"psb\" \"realtext\" \"dks\" and \"auto\" " \ - "(meaning autodetection, this should always work).") + "\"subrip\", \"subviewer\", \"ssa1\", \"ssa2-4\", \"ass\", \"vplayer\", " \ + "\"sami\", \"dvdsubtitle\", \"mpl2\", \"aqt\", \"pjs\", "\ + "\"mpsub\", \"jacosub\", \"psb\", \"realtext\", \"dks\", \"subviewer1\", " \ + " and \"auto\" (meaning autodetection, this should always work).") -static const char *ppsz_sub_type[] = +static const char *const ppsz_sub_type[] = { "auto", "microdvd", "subrip", "subviewer", "ssa1", "ssa2-4", "ass", "vplayer", "sami", "dvdsubtitle", "mpl2", - "aqt", "pjs", "mpsub", "jacosub", "psb", "rt", "dks" + "aqt", "pjs", "mpsub", "jacosub", "psb", "realtext", "dks", + "subviewer1" }; vlc_module_begin(); @@ -102,8 +103,8 @@ enum SUB_TYPE_ASS, SUB_TYPE_VPLAYER, SUB_TYPE_SAMI, - SUB_TYPE_SUBVIEWER, //SUBVIEWER 2! - SUB_TYPE_DVDSUBTITLE, + SUB_TYPE_SUBVIEWER, /* SUBVIEWER 2 */ + SUB_TYPE_DVDSUBTITLE, /* Mplayer calls it subviewer2 */ SUB_TYPE_MPL2, SUB_TYPE_AQT, SUB_TYPE_PJS, @@ -111,8 +112,9 @@ enum SUB_TYPE_JACOSUB, SUB_TYPE_PSB, SUB_TYPE_RT, - SUB_TYPE_SUBVIEW1, - SUB_TYPE_DKS + SUB_TYPE_DKS, + SUB_TYPE_SUBVIEW1 /* SUBVIEWER 1 - mplayer calls it subrip09, + and Gnome subtitles SubViewer 1.0 */ }; typedef struct @@ -166,7 +168,7 @@ static int ParseJSS ( demux_t *, subtitle_t *, int ); static int ParsePSB ( demux_t *, subtitle_t *, int ); static int ParseRealText ( demux_t *, subtitle_t *, int ); static int ParseDKS ( demux_t *, subtitle_t *, int ); -static int ParseSub1 ( demux_t *, subtitle_t *, int ); +static int ParseSubViewer1 ( demux_t *, subtitle_t *, int ); static struct { @@ -193,7 +195,7 @@ static struct { "psb", SUB_TYPE_PSB, "PowerDivx", ParsePSB }, { "realtext", SUB_TYPE_RT, "RealText", ParseRealText }, { "dks", SUB_TYPE_DKS, "DKS", ParseDKS }, - { "subviewer1", SUB_TYPE_SUBVIEW1, "Subviewer 1", ParseSub1 }, + { "subviewer1", SUB_TYPE_SUBVIEW1, "Subviewer 1", ParseSubViewer1 }, { NULL, SUB_TYPE_UNKNOWN, "Unknown", NULL } }; @@ -251,7 +253,7 @@ static int Open ( vlc_object_t *p_this ) /* Get or probe the type */ p_sys->i_type = SUB_TYPE_UNKNOWN; psz_type = var_CreateGetString( p_demux, "sub-type" ); - if( *psz_type ) + if( psz_type && *psz_type ) { int i; @@ -447,7 +449,6 @@ static int Open ( vlc_object_t *p_this ) if( !( p_sys->subtitle = realloc( p_sys->subtitle, sizeof(subtitle_t) * i_max ) ) ) { - msg_Err( p_demux, "out of memory"); free( p_sys->subtitle ); TextUnload( &p_sys->txt ); free( p_sys ); @@ -913,7 +914,7 @@ static int ParseSubRipSubViewer( demux_t *p_demux, subtitle_t *p_subtitle, if( b_replace_br ) { char *p; - + while( ( p = strstr( psz_text, "[br]" ) ) ) { *p++ = '\n'; @@ -1468,8 +1469,10 @@ static int ParseMPSub( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) free( psz_temp ); } /* Data Lines */ - if( sscanf (s, "%f %f", &f1, &f2 ) == 2 ) + f1 = us_strtod( s, &psz_temp ); + if( *psz_temp ) { + f2 = us_strtod( psz_temp, NULL ); mpsub_total += f1 * mpsub_factor; p_subtitle->i_start = (int64_t)(10000.0 * mpsub_total); mpsub_total += f2 * mpsub_factor; @@ -1947,7 +1950,7 @@ static int ParseDKS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) return VLC_SUCCESS; } -static int ParseSub1( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) +static int ParseSubViewer1( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) { VLC_UNUSED( i_idx );