[vlc-devel] commit: Moved static variable to the subtitle demuxer context. ( Laurent Aimar )
git version control
git at videolan.org
Sun Aug 3 13:37:27 CEST 2008
vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Sun Aug 3 13:39:09 2008 +0200| [a6d22fe5d220c4ad1b0695d0cbc85e1377c30173] | committer: Laurent Aimar
Moved static variable to the subtitle demuxer context.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a6d22fe5d220c4ad1b0695d0cbc85e1377c30173
---
modules/demux/subtitle.c | 79 +++++++++++++++++++++++++++++++--------------
1 files changed, 54 insertions(+), 25 deletions(-)
diff --git a/modules/demux/subtitle.c b/modules/demux/subtitle.c
index 975e6de..8883d12 100644
--- a/modules/demux/subtitle.c
+++ b/modules/demux/subtitle.c
@@ -151,6 +151,23 @@ struct demux_sys_t
subtitle_t *subtitle;
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 );
@@ -235,6 +252,9 @@ static int Open ( vlc_object_t *p_this )
p_sys->subtitle = NULL;
p_sys->i_microsecperframe = 40000;
+ p_sys->jss.b_inited = false;
+ p_sys->mpsub.b_inited = false;
+
/* Get the FPS */
f_fps = var_CreateGetFloat( p_demux, "sub-original-fps" ); /* FIXME */
if( f_fps >= 1.0 )
@@ -1422,9 +1442,6 @@ static int ParsePJS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
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 )
{
VLC_UNUSED( 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;
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( ;; )
{
float f1, f2;
@@ -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')
{
- mpsub_factor = 100.0;
+ p_sys->mpsub.f_factor = 100.0;
break;
}
@@ -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 )
var_SetFloat( p_demux, "sub-fps", f_fps );
- mpsub_factor = 1.0;
+ p_sys->mpsub.f_factor = 1.0;
free( psz_temp );
break;
}
@@ -1473,10 +1498,10 @@ static int ParseMPSub( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
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;
- p_subtitle->i_stop = (int64_t)(10000.0 * mpsub_total);
+ p_sys->mpsub.f_total += f1 * p_sys->mpsub.f_factor;
+ p_subtitle->i_start = (int64_t)(10000.0 * p_sys->mpsub.f_total);
+ p_sys->mpsub.f_total += f2 * p_sys->mpsub.f_factor;
+ p_subtitle->i_stop = (int64_t)(10000.0 * p_sys->mpsub.f_total);
break;
}
}
@@ -1516,10 +1541,14 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
char *psz_text2, *psz_orig2;
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;
- static int jss_time_shift = 0;
+ p_sys->jss.b_inited = true;
+ }
/* Parse the main lines */
for( ;; )
@@ -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 )
{
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;
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;
break;
}
@@ -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 )
{
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)(
- ( 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;
}
/* General Directive lines */
@@ -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);
sec *= inv;
}
- jss_time_shift = ( ( h * 3600 + m * 60 + sec )
- * jss_time_resolution + f ) * inv;
+ p_sys->jss.i_time_shift = ( ( h * 3600 + m * 60 + sec )
+ * p_sys->jss.i_time_resolution + f ) * inv;
}
break;
case 'T':
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;
}
free( psz_orig );
@@ -1668,17 +1697,17 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
switch( *psz_text )
{
case '{':
- i_comment++;
+ p_sys->jss.i_comment++;
break;
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++;
}
break;
case '~':
- if( !i_comment )
+ if( !p_sys->jss.i_comment )
{
*psz_text2 = ' ';
psz_text2++;
@@ -1688,7 +1717,7 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
case '\t':
if( (*(psz_text + 1 ) ) == ' ' || (*(psz_text + 1 ) ) == '\t' )
break;
- if( !i_comment )
+ if( !p_sys->jss.i_comment )
{
*psz_text2 = ' ';
psz_text2++;
@@ -1726,7 +1755,7 @@ static int ParseJSS( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
}
break;
default:
- if( !i_comment )
+ if( !p_sys->jss.i_comment )
{
*psz_text2 = *psz_text;
psz_text2++;
More information about the vlc-devel
mailing list