Commit a6d22fe5 authored by Laurent Aimar's avatar Laurent Aimar

Moved static variable to the subtitle demuxer context.

parent 2c05ac48
...@@ -151,6 +151,23 @@ struct demux_sys_t ...@@ -151,6 +151,23 @@ struct demux_sys_t
subtitle_t *subtitle; subtitle_t *subtitle;
int64_t i_length; int64_t i_length;
/* */
struct
{
bool b_inited;
int i_comment;
int i_time_resolution;
int i_time_shift;
} jss;
struct
{
bool b_inited;
float f_total;
float f_factor;
} mpsub;
}; };
static int ParseMicroDvd ( demux_t *, subtitle_t *, int ); static int ParseMicroDvd ( demux_t *, subtitle_t *, int );
...@@ -235,6 +252,9 @@ static int Open ( vlc_object_t *p_this ) ...@@ -235,6 +252,9 @@ static int Open ( vlc_object_t *p_this )
p_sys->subtitle = NULL; p_sys->subtitle = NULL;
p_sys->i_microsecperframe = 40000; p_sys->i_microsecperframe = 40000;
p_sys->jss.b_inited = false;
p_sys->mpsub.b_inited = false;
/* Get the FPS */ /* Get the FPS */
f_fps = var_CreateGetFloat( p_demux, "sub-original-fps" ); /* FIXME */ f_fps = var_CreateGetFloat( p_demux, "sub-original-fps" ); /* FIXME */
if( f_fps >= 1.0 ) if( f_fps >= 1.0 )
...@@ -1422,9 +1442,6 @@ static int ParsePJS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) ...@@ -1422,9 +1442,6 @@ static int ParsePJS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
return VLC_SUCCESS; return VLC_SUCCESS;
} }
static float mpsub_total = 0.0;
static float mpsub_factor = 0.0;
static int ParseMPSub( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) static int ParseMPSub( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
{ {
VLC_UNUSED( i_idx ); VLC_UNUSED( i_idx );
...@@ -1433,6 +1450,14 @@ static int ParseMPSub( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) ...@@ -1433,6 +1450,14 @@ static int ParseMPSub( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
text_t *txt = &p_sys->txt; text_t *txt = &p_sys->txt;
char *psz_text = strdup( "" ); char *psz_text = strdup( "" );
if( !p_sys->mpsub.b_inited )
{
p_sys->mpsub.f_total = 0.0;
p_sys->mpsub.f_factor = 0.0;
p_sys->mpsub.b_inited = true;
}
for( ;; ) for( ;; )
{ {
float f1, f2; float f1, f2;
...@@ -1447,7 +1472,7 @@ static int ParseMPSub( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) ...@@ -1447,7 +1472,7 @@ static int ParseMPSub( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
{ {
if( sscanf (s, "FORMAT=TIM%c", &p_dummy ) == 1 && p_dummy == 'E') if( sscanf (s, "FORMAT=TIM%c", &p_dummy ) == 1 && p_dummy == 'E')
{ {
mpsub_factor = 100.0; p_sys->mpsub.f_factor = 100.0;
break; break;
} }
...@@ -1462,7 +1487,7 @@ static int ParseMPSub( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) ...@@ -1462,7 +1487,7 @@ static int ParseMPSub( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
if( f_fps > 0.0 && var_GetFloat( p_demux, "sub-fps" ) <= 0.0 ) if( f_fps > 0.0 && var_GetFloat( p_demux, "sub-fps" ) <= 0.0 )
var_SetFloat( p_demux, "sub-fps", f_fps ); var_SetFloat( p_demux, "sub-fps", f_fps );
mpsub_factor = 1.0; p_sys->mpsub.f_factor = 1.0;
free( psz_temp ); free( psz_temp );
break; break;
} }
...@@ -1473,10 +1498,10 @@ static int ParseMPSub( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) ...@@ -1473,10 +1498,10 @@ static int ParseMPSub( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
if( *psz_temp ) if( *psz_temp )
{ {
f2 = us_strtod( psz_temp, NULL ); f2 = us_strtod( psz_temp, NULL );
mpsub_total += f1 * mpsub_factor; p_sys->mpsub.f_total += f1 * p_sys->mpsub.f_factor;
p_subtitle->i_start = (int64_t)(10000.0 * mpsub_total); p_subtitle->i_start = (int64_t)(10000.0 * p_sys->mpsub.f_total);
mpsub_total += f2 * mpsub_factor; p_sys->mpsub.f_total += f2 * p_sys->mpsub.f_factor;
p_subtitle->i_stop = (int64_t)(10000.0 * mpsub_total); p_subtitle->i_stop = (int64_t)(10000.0 * p_sys->mpsub.f_total);
break; break;
} }
} }
...@@ -1516,10 +1541,14 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) ...@@ -1516,10 +1541,14 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
char *psz_text2, *psz_orig2; char *psz_text2, *psz_orig2;
int h1, h2, m1, m2, s1, s2, f1, f2; int h1, h2, m1, m2, s1, s2, f1, f2;
static int i_comment = 0; if( !p_sys->jss.b_inited )
{
p_sys->jss.i_comment = 0;
p_sys->jss.i_time_resolution = 30;
p_sys->jss.i_time_shift = 0;
static int jss_time_resolution = 30; p_sys->jss.b_inited = true;
static int jss_time_shift = 0; }
/* Parse the main lines */ /* Parse the main lines */
for( ;; ) for( ;; )
...@@ -1538,10 +1567,10 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) ...@@ -1538,10 +1567,10 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
&h1, &m1, &s1, &f1, &h2, &m2, &s2, &f2, psz_text ) == 9 ) &h1, &m1, &s1, &f1, &h2, &m2, &s2, &f2, psz_text ) == 9 )
{ {
p_subtitle->i_start = ( (int64_t)( h1 *3600 + m1 * 60 + s1 ) + p_subtitle->i_start = ( (int64_t)( h1 *3600 + m1 * 60 + s1 ) +
(int64_t)( ( f1 + jss_time_shift ) / jss_time_resolution ) ) (int64_t)( ( f1 + p_sys->jss.i_time_shift ) / p_sys->jss.i_time_resolution ) )
* 1000000; * 1000000;
p_subtitle->i_stop = ( (int64_t)( h2 *3600 + m2 * 60 + s2 ) + p_subtitle->i_stop = ( (int64_t)( h2 *3600 + m2 * 60 + s2 ) +
(int64_t)( ( f2 + jss_time_shift ) / jss_time_resolution ) ) (int64_t)( ( f2 + p_sys->jss.i_time_shift ) / p_sys->jss.i_time_resolution ) )
* 1000000; * 1000000;
break; break;
} }
...@@ -1549,9 +1578,9 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) ...@@ -1549,9 +1578,9 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
else if( sscanf( s, "@%d @%d %[^\n\r]", &f1, &f2, psz_text ) == 3 ) else if( sscanf( s, "@%d @%d %[^\n\r]", &f1, &f2, psz_text ) == 3 )
{ {
p_subtitle->i_start = (int64_t)( p_subtitle->i_start = (int64_t)(
( f1 + jss_time_shift ) / jss_time_resolution * 1000000.0 ); ( f1 + p_sys->jss.i_time_shift ) / p_sys->jss.i_time_resolution * 1000000.0 );
p_subtitle->i_stop = (int64_t)( p_subtitle->i_stop = (int64_t)(
( f2 + jss_time_shift ) / jss_time_resolution * 1000000.0 ); ( f2 + p_sys->jss.i_time_shift ) / p_sys->jss.i_time_resolution * 1000000.0 );
break; break;
} }
/* General Directive lines */ /* General Directive lines */
...@@ -1598,15 +1627,15 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) ...@@ -1598,15 +1627,15 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
sscanf( &psz_text[shift], "%d.%d", &sec, &f); sscanf( &psz_text[shift], "%d.%d", &sec, &f);
sec *= inv; sec *= inv;
} }
jss_time_shift = ( ( h * 3600 + m * 60 + sec ) p_sys->jss.i_time_shift = ( ( h * 3600 + m * 60 + sec )
* jss_time_resolution + f ) * inv; * p_sys->jss.i_time_resolution + f ) * inv;
} }
break; break;
case 'T': case 'T':
shift = isalpha( psz_text[2] ) ? 8 : 2 ; shift = isalpha( psz_text[2] ) ? 8 : 2 ;
sscanf( &psz_text[shift], "%d", &jss_time_resolution ); sscanf( &psz_text[shift], "%d", &p_sys->jss.i_time_resolution );
break; break;
} }
free( psz_orig ); free( psz_orig );
...@@ -1668,17 +1697,17 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) ...@@ -1668,17 +1697,17 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
switch( *psz_text ) switch( *psz_text )
{ {
case '{': case '{':
i_comment++; p_sys->jss.i_comment++;
break; break;
case '}': case '}':
if( i_comment ) if( p_sys->jss.i_comment )
{ {
i_comment = 0; p_sys->jss.i_comment = 0;
if( (*(psz_text + 1 ) ) == ' ' ) psz_text++; if( (*(psz_text + 1 ) ) == ' ' ) psz_text++;
} }
break; break;
case '~': case '~':
if( !i_comment ) if( !p_sys->jss.i_comment )
{ {
*psz_text2 = ' '; *psz_text2 = ' ';
psz_text2++; psz_text2++;
...@@ -1688,7 +1717,7 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) ...@@ -1688,7 +1717,7 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
case '\t': case '\t':
if( (*(psz_text + 1 ) ) == ' ' || (*(psz_text + 1 ) ) == '\t' ) if( (*(psz_text + 1 ) ) == ' ' || (*(psz_text + 1 ) ) == '\t' )
break; break;
if( !i_comment ) if( !p_sys->jss.i_comment )
{ {
*psz_text2 = ' '; *psz_text2 = ' ';
psz_text2++; psz_text2++;
...@@ -1726,7 +1755,7 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx ) ...@@ -1726,7 +1755,7 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
} }
break; break;
default: default:
if( !i_comment ) if( !p_sys->jss.i_comment )
{ {
*psz_text2 = *psz_text; *psz_text2 = *psz_text;
psz_text2++; psz_text2++;
......
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