[vlc-commits] demux:mkv: store the segment duration in vlc_tick_t not float
Steve Lhomme
git at videolan.org
Tue Sep 18 13:53:02 CEST 2018
vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Fri Jun 8 08:53:37 2018 +0200| [cfbf0e9ccf414858aa43813d89c1f1738f8bbd4d] | committer: Steve Lhomme
demux:mkv: store the segment duration in vlc_tick_t not float
Also the chapter/edition is in vlc_tick_t so doesn't need extra conversion.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=cfbf0e9ccf414858aa43813d89c1f1738f8bbd4d
---
modules/demux/mkv/demux.cpp | 2 +-
modules/demux/mkv/demux.hpp | 4 ++--
modules/demux/mkv/mkv.cpp | 16 ++++++++--------
modules/demux/mkv/virtual_segment.hpp | 4 ++--
4 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/modules/demux/mkv/demux.cpp b/modules/demux/mkv/demux.cpp
index 7909973ba2..8108ac528e 100644
--- a/modules/demux/mkv/demux.cpp
+++ b/modules/demux/mkv/demux.cpp
@@ -302,7 +302,7 @@ bool demux_sys_t::PreparePlayback( virtual_segment_c & new_vsegment, vlc_tick_t
if( !p_current_vsegment->CurrentSegment()->b_cues )
msg_Warn( &p_current_vsegment->CurrentSegment()->sys.demuxer, "no cues/empty cues found->seek won't be precise" );
- f_duration = p_current_vsegment->Duration();
+ i_duration = p_current_vsegment->Duration();
/* add information */
p_current_vsegment->CurrentSegment()->InformationCreate( );
diff --git a/modules/demux/mkv/demux.hpp b/modules/demux/mkv/demux.hpp
index 0f4e4df571..81e9ad0928 100644
--- a/modules/demux/mkv/demux.hpp
+++ b/modules/demux/mkv/demux.hpp
@@ -54,7 +54,7 @@ public:
,i_updates(0)
,p_current_vsegment(NULL)
,dvd_interpretor( *this )
- ,f_duration(-1.0)
+ ,i_duration(-1)
,p_input(NULL)
,ev(&demux)
{
@@ -89,7 +89,7 @@ public:
dvd_command_interpretor_c dvd_interpretor;
/* duration of the stream */
- float f_duration;
+ vlc_tick_t i_duration;
matroska_segment_c *FindSegment( const EbmlBinary & uid ) const;
virtual_chapter_c *BrowseCodecPrivate( unsigned int codec_id,
diff --git a/modules/demux/mkv/mkv.cpp b/modules/demux/mkv/mkv.cpp
index 78ba0bc41b..1cdf9d5a8e 100644
--- a/modules/demux/mkv/mkv.cpp
+++ b/modules/demux/mkv/mkv.cpp
@@ -331,22 +331,22 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
case DEMUX_GET_LENGTH:
pi64 = va_arg( args, int64_t * );
- if( p_sys->f_duration > 0.0 )
- *pi64 = static_cast<int64_t>( p_sys->f_duration * 1000 );
+ if( p_sys->i_duration > 0 )
+ *pi64 = static_cast<int64_t>( p_sys->i_duration );
else
*pi64 = VLC_TICK_INVALID;
return VLC_SUCCESS;
case DEMUX_GET_POSITION:
pf = va_arg( args, double * );
- if ( p_sys->f_duration > 0.0 )
+ if ( p_sys->i_duration > 0 )
*pf = static_cast<double> (p_sys->i_pcr >= (p_sys->i_start_pts + p_sys->i_mk_chapter_time) ?
p_sys->i_pcr :
- (p_sys->i_start_pts + p_sys->i_mk_chapter_time) ) / (1000.0 * p_sys->f_duration);
+ (p_sys->i_start_pts + p_sys->i_mk_chapter_time) ) / p_sys->i_duration;
return VLC_SUCCESS;
case DEMUX_SET_POSITION:
- if( p_sys->f_duration > 0.0 )
+ if( p_sys->i_duration > 0)
{
f = va_arg( args, double );
b = va_arg( args, int ); /* precise? */
@@ -388,7 +388,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
{
p_sys->i_updates |= INPUT_UPDATE_SEEKPOINT|INPUT_UPDATE_TITLE;
p_sys->i_current_seekpoint = 0;
- p_sys->f_duration = (float) p_sys->titles[i_idx]->i_length / 1000.f;
+ p_sys->i_duration = p_sys->titles[i_idx]->i_length;
return VLC_SUCCESS;
}
else
@@ -489,7 +489,7 @@ static int Seek( demux_t *p_demux, vlc_tick_t i_mk_date, double f_percent, virtu
msg_Warn( p_demux, "cannot seek so far!" );
return VLC_EGENERIC;
}
- if( p_sys->f_duration < 0 )
+ if( p_sys->i_duration < 0 )
{
msg_Warn( p_demux, "cannot seek without duration!");
return VLC_EGENERIC;
@@ -503,7 +503,7 @@ static int Seek( demux_t *p_demux, vlc_tick_t i_mk_date, double f_percent, virtu
/* seek without index or without date */
if( f_percent >= 0 && (var_InheritBool( p_demux, "mkv-seek-percent" ) || i_mk_date < 0 ))
{
- i_mk_date = int64_t( f_percent * p_sys->f_duration * 1000.0 );
+ i_mk_date = vlc_tick_t( f_percent * p_sys->i_duration );
}
return p_vsegment->Seek( *p_demux, i_mk_date, p_vchapter, b_precise ) ? VLC_SUCCESS : VLC_EGENERIC;
}
diff --git a/modules/demux/mkv/virtual_segment.hpp b/modules/demux/mkv/virtual_segment.hpp
index 4c420ef623..e5ac74977a 100644
--- a/modules/demux/mkv/virtual_segment.hpp
+++ b/modules/demux/mkv/virtual_segment.hpp
@@ -145,9 +145,9 @@ public:
return &p_current_vchapter->segment;
}
- inline int64_t Duration()
+ inline vlc_tick_t Duration()
{
- return veditions[i_current_edition]->i_duration / 1000;
+ return veditions[i_current_edition]->i_duration;
}
inline std::vector<virtual_edition_c*>* Editions() { return &veditions; }
More information about the vlc-commits
mailing list