[vlc-commits] subtitle demux: avoid upconversion to double precision
Rémi Denis-Courmont
git at videolan.org
Wed Aug 13 22:23:08 CEST 2014
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Aug 13 22:30:55 2014 +0300| [0e623d013a947558f75dc6f8ca719a21fb857711] | committer: Rémi Denis-Courmont
subtitle demux: avoid upconversion to double precision
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0e623d013a947558f75dc6f8ca719a21fb857711
---
modules/demux/Makefile.am | 1 +
modules/demux/subtitle.c | 38 +++++++++++++++++++-------------------
2 files changed, 20 insertions(+), 19 deletions(-)
diff --git a/modules/demux/Makefile.am b/modules/demux/Makefile.am
index 47d2782..35d8200 100644
--- a/modules/demux/Makefile.am
+++ b/modules/demux/Makefile.am
@@ -57,6 +57,7 @@ libmjpeg_plugin_la_SOURCES = demux/mjpeg.c demux/mxpeg_helper.h
demux_LTLIBRARIES += libmjpeg_plugin.la
libsubtitle_plugin_la_SOURCES = demux/subtitle.c
+libsubtitle_plugin_la_LIBADD = $(LIBM)
demux_LTLIBRARIES += libsubtitle_plugin.la
libty_plugin_la_SOURCES = demux/ty.c codec/cc.h
diff --git a/modules/demux/subtitle.c b/modules/demux/subtitle.c
index 29922cc..67c267a 100644
--- a/modules/demux/subtitle.c
+++ b/modules/demux/subtitle.c
@@ -37,6 +37,7 @@
#include <vlc_memory.h>
#include <ctype.h>
+#include <math.h>
#include <vlc_demux.h>
#include <vlc_charset.h>
@@ -261,17 +262,17 @@ static int Open ( vlc_object_t *p_this )
/* Get the FPS */
f_fps = var_CreateGetFloat( p_demux, "sub-original-fps" ); /* FIXME */
- if( f_fps >= 1.0 )
- p_sys->i_microsecperframe = (int64_t)( (float)1000000 / f_fps );
+ if( f_fps >= 1.f )
+ p_sys->i_microsecperframe = llroundf( 1000000.f / f_fps );
- msg_Dbg( p_demux, "Movie fps: %f", f_fps );
+ msg_Dbg( p_demux, "Movie fps: %f", (double) f_fps );
/* Check for override of the fps */
f_fps = var_CreateGetFloat( p_demux, "sub-fps" );
- if( f_fps >= 1.0 )
+ if( f_fps >= 1.f )
{
- p_sys->i_microsecperframe = (int64_t)( (float)1000000 / f_fps );
- msg_Dbg( p_demux, "Override subtitle fps %f", f_fps );
+ p_sys->i_microsecperframe = llroundf( 1000000.f / f_fps );
+ msg_Dbg( p_demux, "Override subtitle fps %f", (double) f_fps );
}
/* Get or probe the type */
@@ -872,15 +873,14 @@ static int ParseMicroDvd( demux_t *p_demux, subtitle_t *p_subtitle,
if( sscanf( s, "{%d}{}%[^\r\n]", &i_start, psz_text ) == 2 ||
sscanf( s, "{%d}{%d}%[^\r\n]", &i_start, &i_stop, psz_text ) == 3)
{
- float f_fps;
if( i_start != 1 || i_stop != 1 )
break;
/* We found a possible setting of the framerate "{1}{1}23.976" */
/* Check if it's usable, and if the sub-fps is not set */
- f_fps = us_strtod( psz_text, NULL );
- if( f_fps > 0.0 && var_GetFloat( p_demux, "sub-fps" ) <= 0.0 )
- p_sys->i_microsecperframe = (int64_t)((float)1000000 / f_fps);
+ float f_fps = us_strtof( psz_text, NULL );
+ if( f_fps > 0.f && var_GetFloat( p_demux, "sub-fps" ) <= 0.f )
+ p_sys->i_microsecperframe = llroundf(1000000.f / f_fps);
}
free( psz_text );
}
@@ -1573,7 +1573,6 @@ static int ParseMPSub( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
for( ;; )
{
- float f1, f2;
char p_dummy;
char *psz_temp;
@@ -1601,26 +1600,27 @@ static int ParseMPSub( demux_t *p_demux, subtitle_t *p_subtitle, int i_idx )
if( sscanf( s, "FORMAT=%[^\r\n]", psz_temp ) )
{
- float f_fps;
- f_fps = us_strtod( psz_temp, NULL );
- if( f_fps > 0.0 && var_GetFloat( p_demux, "sub-fps" ) <= 0.0 )
+ float f_fps = us_strtof( psz_temp, NULL );
+
+ if( f_fps > 0.f && var_GetFloat( p_demux, "sub-fps" ) <= 0.f )
var_SetFloat( p_demux, "sub-fps", f_fps );
- p_sys->mpsub.f_factor = 1.0;
+ p_sys->mpsub.f_factor = 1.f;
free( psz_temp );
break;
}
free( psz_temp );
}
+
/* Data Lines */
- f1 = us_strtod( s, &psz_temp );
+ float f1 = us_strtof( s, &psz_temp );
if( *psz_temp )
{
- f2 = us_strtod( psz_temp, NULL );
+ float f2 = us_strtof( psz_temp, NULL );
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_subtitle->i_start = llroundf(10000.f * 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);
+ p_subtitle->i_stop = llroundf(10000.f * p_sys->mpsub.f_total);
break;
}
}
More information about the vlc-commits
mailing list