Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (8)
......@@ -80,7 +80,7 @@ struct demux_sys_t
uint64_t i_duration; /* Declared fragmented duration (movie time scale) */
uint64_t i_cumulated_duration; /* Same as above, but not from probing, (movie time scale) */
uint32_t i_timescale; /* movie time scale */
uint64_t i_nztime; /* time position of the presentation (CLOCK_FREQ timescale) */
vlc_tick_t i_nztime; /* time position of the presentation (CLOCK_FREQ timescale) */
unsigned int i_tracks; /* number of tracks */
mp4_track_t *track; /* array of track */
float f_fps; /* number of frame per seconds */
......@@ -205,6 +205,16 @@ static int64_t MP4_rescale( int64_t i_value, uint32_t i_timescale, uint32_t i_ne
return q * i_newscale + r * i_newscale / i_timescale;
}
static vlc_tick_t MP4_rescale_mtime( int64_t i_value, uint32_t i_timescale )
{
return MP4_rescale(i_value, i_timescale, CLOCK_FREQ);
}
static int64_t MP4_rescale_qtime( vlc_tick_t i_value, uint32_t i_timescale )
{
return MP4_rescale(i_value, CLOCK_FREQ, i_timescale);
}
static uint32_t stream_ReadU32( stream_t *s, void *p_read, uint32_t i_toread )
{
ssize_t i_return = 0;
......@@ -406,7 +416,7 @@ static void MP4_TrackTimeApplyELST( const mp4_track_t *p_track, uint64_t i_movie
}
/* Return time in microsecond of a track */
static inline mtime_t MP4_TrackGetDTS( demux_t *p_demux, mp4_track_t *p_track )
static inline vlc_tick_t MP4_TrackGetDTS( demux_t *p_demux, mp4_track_t *p_track )
{
demux_sys_t *p_sys = p_demux->p_sys;
const mp4_chunk_t *p_chunk = &p_track->chunk[p_track->i_chunk];
......@@ -417,22 +427,69 @@ static inline mtime_t MP4_TrackGetDTS( demux_t *p_demux, mp4_track_t *p_track )
/* now handle elst */
MP4_TrackTimeApplyELST( p_track, p_sys->i_timescale, &sdts );
return MP4_rescale( sdts, p_track->i_timescale, CLOCK_FREQ );
return MP4_rescale_mtime( sdts, p_track->i_timescale );
}
static inline bool MP4_TrackGetPTSDelta( demux_t *p_demux, const mp4_track_t *p_track,
mtime_t *pi_delta )
vlc_tick_t *pi_delta )
{
VLC_UNUSED( p_demux );
const mp4_chunk_t *ck = &p_track->chunk[p_track->i_chunk];
stime_t delta;
if( !MP4_ChunkGetSampleCTSDelta( ck, p_track->i_sample - ck->i_sample_first, &delta ) )
return false;
*pi_delta = MP4_rescale( delta, p_track->i_timescale, CLOCK_FREQ );
*pi_delta = MP4_rescale_mtime( delta, p_track->i_timescale );
return true;
}
static inline int64_t MP4_GetMoviePTS(demux_sys_t *p_sys )
static inline mtime_t MP4_GetSamplesDuration( demux_t *p_demux, mp4_track_t *p_track,
unsigned i_nb_samples )
{
VLC_UNUSED( p_demux );
const mp4_chunk_t *p_chunk = &p_track->chunk[p_track->i_chunk];
stime_t i_duration = 0;
/* Forward to right index, and set remaining count in that index */
unsigned i_index = 0;
unsigned i_remain = 0;
for( unsigned i = p_chunk->i_sample_first;
i<p_track->i_sample && i_index < p_chunk->i_entries_dts; )
{
if( p_track->i_sample - i >= p_chunk->p_sample_count_dts[i_index] )
{
i += p_chunk->p_sample_count_dts[i_index];
i_index++;
}
else
{
i_remain = p_track->i_sample - i;
break;
}
}
/* Compute total duration from all samples from index */
while( i_nb_samples > 0 && i_index < p_chunk->i_entries_dts )
{
if( i_nb_samples >= p_chunk->p_sample_count_dts[i_index] - i_remain )
{
i_duration += (p_chunk->p_sample_count_dts[i_index] - i_remain) *
(int64_t) p_chunk->p_sample_delta_dts[i_index];
i_nb_samples -= (p_chunk->p_sample_count_dts[i_index] - i_remain);
i_index++;
i_remain = 0;
}
else
{
i_duration += i_nb_samples * p_chunk->p_sample_delta_dts[i_index];
break;
}
}
return MP4_rescale_mtime( i_duration, p_track->i_timescale );
}
static inline vlc_tick_t MP4_GetMoviePTS(demux_sys_t *p_sys )
{
return p_sys->i_nztime;
}
......@@ -544,7 +601,7 @@ static uint32_t MP4_TrackGetRunSeq( mp4_track_t *p_track )
/* Analyzes chunks to find max interleave length
* sets flat flag if no interleaving is in use */
static void MP4_GetInterleaving( demux_t *p_demux, uint64_t *pi_max_contiguous, bool *pb_flat )
static void MP4_GetInterleaving( demux_t *p_demux, vlc_tick_t *pi_max_contiguous, bool *pb_flat )
{
demux_sys_t *p_sys = p_demux->p_sys;
*pi_max_contiguous = 0;
......@@ -588,9 +645,9 @@ static void MP4_GetInterleaving( demux_t *p_demux, uint64_t *pi_max_contiguous,
if( tk != nexttk )
{
i_duration = MP4_rescale( i_duration, tk->i_timescale, CLOCK_FREQ );
if( i_duration > *pi_max_contiguous )
*pi_max_contiguous = i_duration;
vlc_tick_t i_dur = MP4_rescale_mtime( i_duration, tk->i_timescale );
if( i_dur > *pi_max_contiguous )
*pi_max_contiguous = i_dur;
i_duration = 0;
if( tk->i_chunk != tk->i_chunk_count )
......@@ -1067,7 +1124,7 @@ static int Open( vlc_object_t * p_this )
if( p_sys->i_tracks > 1 && !p_sys->b_fastseekable )
{
uint64_t i_max_continuity;
vlc_tick_t i_max_continuity;
bool b_flat;
MP4_GetInterleaving( p_demux, &i_max_continuity, &b_flat );
if( b_flat )
......@@ -1292,7 +1349,7 @@ static int DemuxTrack( demux_t *p_demux, mp4_track_t *tk, uint64_t i_readpos,
if( i_samplessize > 0 )
{
block_t *p_block;
int64_t i_delta;
vlc_tick_t i_delta;
if( vlc_stream_Tell( p_demux->s ) != i_readpos )
{
......@@ -1335,6 +1392,8 @@ static int DemuxTrack( demux_t *p_demux, mp4_track_t *tk, uint64_t i_readpos,
else
p_block->i_pts = VLC_TICK_INVALID;
p_block->i_length = MP4_GetSamplesDuration( p_demux, tk, i_nb_samples );
MP4_Block_Send( p_demux, tk, p_block );
}
......@@ -1592,8 +1651,8 @@ static vlc_tick_t FragGetDemuxTimeFromTracksTime( demux_sys_t *p_sys )
{
if( p_sys->track[i].context.runs.i_count == 0 )
continue;
vlc_tick_t i_ttime = MP4_rescale( p_sys->track[i].i_time,
p_sys->track[i].i_timescale, CLOCK_FREQ );
vlc_tick_t i_ttime = MP4_rescale_mtime( p_sys->track[i].i_time,
p_sys->track[i].i_timescale );
i_time = __MIN( i_time, i_ttime );
}
return i_time;
......@@ -1741,7 +1800,7 @@ static int FragSeekToTime( demux_t *p_demux, vlc_tick_t i_nztime, bool b_accurat
const unsigned i_seek_track_index = GetSeekTrackIndex( p_sys );
const unsigned i_seek_track_ID = p_sys->track[i_seek_track_index].i_track_ID;
if( MP4_rescale( i_nztime, CLOCK_FREQ, p_sys->i_timescale )
if( MP4_rescale_qtime( i_nztime, p_sys->i_timescale )
< GetMoovTrackDuration( p_sys, i_seek_track_ID ) )
{
i64 = p_sys->p_moov->i_pos;
......@@ -1750,7 +1809,7 @@ static int FragSeekToTime( demux_t *p_demux, vlc_tick_t i_nztime, bool b_accurat
else if( FragGetMoofBySidxIndex( p_demux, i_nztime, &i64, &i_sync_time ) == VLC_SUCCESS )
{
/* provides base offset */
i_segment_time = MP4_rescale( i_sync_time, CLOCK_FREQ, p_sys->i_timescale );
i_segment_time = MP4_rescale_qtime( i_sync_time, p_sys->i_timescale );
msg_Dbg( p_demux, "seeking to sidx moof pos %" PRId64 " %" PRId64, i64, i_sync_time );
}
else
......@@ -1769,14 +1828,14 @@ static int FragSeekToTime( demux_t *p_demux, vlc_tick_t i_nztime, bool b_accurat
if( p_sys->b_fragments_probed && p_sys->p_fragsindex )
{
stime_t i_basetime = MP4_rescale( i_sync_time, CLOCK_FREQ, p_sys->i_timescale );
stime_t i_basetime = MP4_rescale_qtime( i_sync_time, p_sys->i_timescale );
if( !MP4_Fragments_Index_Lookup( p_sys->p_fragsindex, &i_basetime, &i64, i_seek_track_index ) )
{
p_sys->b_error = (vlc_stream_Seek( p_demux->s, i_backup_pos ) != VLC_SUCCESS);
return VLC_EGENERIC;
}
msg_Dbg( p_demux, "seeking to fragment index pos %" PRId64 " %" PRId64, i64,
MP4_rescale( i_basetime, p_sys->i_timescale, CLOCK_FREQ ) );
MP4_rescale_mtime( i_basetime, p_sys->i_timescale ) );
}
}
......@@ -1814,7 +1873,7 @@ static int FragSeekToTime( demux_t *p_demux, vlc_tick_t i_nztime, bool b_accurat
}
else
{
stime_t i_tst = MP4_rescale( i_sync_time, CLOCK_FREQ, p_sys->track[i].i_timescale );
stime_t i_tst = MP4_rescale_qtime( i_sync_time, p_sys->track[i].i_timescale );
FragTrunSeekToTime( &p_sys->track[i], i_tst );
p_sys->track[i].i_next_block_flags |= BLOCK_FLAG_DISCONTINUITY;
}
......@@ -1847,7 +1906,7 @@ static int FragSeekToPos( demux_t *p_demux, double f, bool b_accurate )
return VLC_EGENERIC;
return FragSeekToTime( p_demux, (vlc_tick_t)( f *
MP4_rescale( i_duration, p_sys->i_timescale, CLOCK_FREQ ) ), b_accurate );
MP4_rescale_mtime( i_duration, p_sys->i_timescale ) ), b_accurate );
}
static bool imageTypeCompatible( const MP4_Box_data_data_t *p_data )
......@@ -1937,7 +1996,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
if( i_duration > 0 )
{
*pf = (double)p_sys->i_nztime /
MP4_rescale( i_duration, p_sys->i_timescale, CLOCK_FREQ );
MP4_rescale_mtime( i_duration, p_sys->i_timescale );
}
else
{
......@@ -1952,8 +2011,8 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
return FragSeekToPos( p_demux, f, b );
else if( p_sys->i_timescale > 0 )
{
i64 = (int64_t)( f * MP4_rescale( p_sys->i_duration,
p_sys->i_timescale, CLOCK_FREQ ) );
i64 = (int64_t)( f * MP4_rescale_mtime( p_sys->i_duration,
p_sys->i_timescale ) );
return Seek( p_demux, i64, b );
}
else return VLC_EGENERIC;
......@@ -1978,8 +2037,8 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
pi64 = va_arg( args, int64_t * );
if( p_sys->i_timescale > 0 )
{
*pi64 = MP4_rescale( i_duration,
p_sys->i_timescale, CLOCK_FREQ );
*pi64 = MP4_rescale_mtime( i_duration,
p_sys->i_timescale );
}
else *pi64 = 0;
return VLC_SUCCESS;
......@@ -2155,8 +2214,8 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
BOXDATA(p_load)->i_duration > 0 )
{
*va_arg(args, int64_t *) =
MP4_rescale( BOXDATA(p_load)->i_duration,
p_sys->track[i].i_timescale, CLOCK_FREQ );
MP4_rescale_mtime( BOXDATA(p_load)->i_duration,
p_sys->track[i].i_timescale );
return VLC_SUCCESS;
}
}
......@@ -2258,8 +2317,8 @@ static void LoadChapterApple( demux_t *p_demux, mp4_track_t *tk )
for( tk->i_sample = 0; tk->i_sample < tk->i_sample_count; tk->i_sample++ )
{
const int64_t i_dts = MP4_TrackGetDTS( p_demux, tk );
int64_t i_pts_delta;
const vlc_tick_t i_dts = MP4_TrackGetDTS( p_demux, tk );
vlc_tick_t i_pts_delta;
if ( !MP4_TrackGetPTSDelta( p_demux, tk, &i_pts_delta ) )
i_pts_delta = 0;
uint32_t i_nb_samples = 0;
......@@ -2346,8 +2405,7 @@ static void LoadChapter( demux_t *p_demux )
{
const uint64_t i_duration = __MAX(p_sys->i_duration, p_sys->i_cumulated_duration);
p_sys->p_title->i_length =
MP4_rescale( i_duration,
p_sys->i_timescale, CLOCK_FREQ );
MP4_rescale_mtime( i_duration, p_sys->i_timescale );
}
}
......@@ -3032,7 +3090,7 @@ static int TrackGetNearestSeekPoint( demux_t *p_demux, mp4_track_t *p_track,
* it also update elst field of the track
*/
static int TrackTimeToSampleChunk( demux_t *p_demux, mp4_track_t *p_track,
int64_t i_start, uint32_t *pi_chunk,
vlc_tick_t i_start, uint32_t *pi_chunk,
uint32_t *pi_sample )
{
demux_sys_t *p_sys = p_demux->p_sys;
......@@ -3050,12 +3108,11 @@ static int TrackTimeToSampleChunk( demux_t *p_demux, mp4_track_t *p_track,
if( p_track->p_elst && p_track->BOXDATA(p_elst)->i_entry_count > 0 )
{
MP4_Box_data_elst_t *elst = p_track->BOXDATA(p_elst);
int64_t i_mvt= MP4_rescale( i_start, CLOCK_FREQ, p_sys->i_timescale );
int64_t i_mvt= MP4_rescale_qtime( i_start, p_sys->i_timescale );
/* now calculate i_start for this elst */
/* offset */
i_start -= MP4_rescale( p_track->i_elst_time, p_sys->i_timescale, CLOCK_FREQ );
if( i_start < 0 )
if( i_start < MP4_rescale_mtime( p_track->i_elst_time, p_sys->i_timescale ) )
{
*pi_chunk = 0;
*pi_sample= 0;
......@@ -3063,7 +3120,7 @@ static int TrackTimeToSampleChunk( demux_t *p_demux, mp4_track_t *p_track,
return VLC_SUCCESS;
}
/* to track time scale */
i_start = MP4_rescale( i_start, CLOCK_FREQ, p_track->i_timescale );
i_start = MP4_rescale_qtime( i_start, p_track->i_timescale );
/* add elst offset */
if( ( elst->i_media_rate_integer[p_track->i_elst] > 0 ||
elst->i_media_rate_fraction[p_track->i_elst] > 0 ) &&
......@@ -3080,7 +3137,7 @@ static int TrackTimeToSampleChunk( demux_t *p_demux, mp4_track_t *p_track,
else
{
/* convert absolute time to in timescale unit */
i_start = MP4_rescale( i_start, CLOCK_FREQ, p_track->i_timescale );
i_start = MP4_rescale_qtime( i_start, p_track->i_timescale );
}
/* we start from sample 0/chunk 0, hope it won't take too much time */
......@@ -3940,8 +3997,8 @@ static int MP4_TrackNextSample( demux_t *p_demux, mp4_track_t *p_track, uint32_t
{
demux_sys_t *p_sys = p_demux->p_sys;
MP4_Box_data_elst_t *elst = p_track->BOXDATA(p_elst);
uint64_t i_mvt = MP4_rescale( MP4_TrackGetDTS( p_demux, p_track ),
CLOCK_FREQ, p_sys->i_timescale );
uint64_t i_mvt = MP4_rescale_qtime( MP4_TrackGetDTS( p_demux, p_track ),
p_sys->i_timescale );
if( (unsigned int)p_track->i_elst < elst->i_entry_count &&
i_mvt >= p_track->i_elst_time +
elst->i_segment_duration[p_track->i_elst] )
......@@ -3966,7 +4023,7 @@ static void MP4_TrackSetELST( demux_t *p_demux, mp4_track_t *tk,
if( tk->p_elst && tk->BOXDATA(p_elst)->i_entry_count > 0 )
{
MP4_Box_data_elst_t *elst = tk->BOXDATA(p_elst);
int64_t i_mvt= MP4_rescale( i_time, CLOCK_FREQ, p_sys->i_timescale );
int64_t i_mvt= MP4_rescale_qtime( i_time, p_sys->i_timescale );
for( tk->i_elst = 0; (unsigned int)tk->i_elst < elst->i_entry_count; tk->i_elst++ )
{
......@@ -4383,7 +4440,7 @@ static int FragDemuxTrack( demux_t *p_demux, mp4_track_t *p_track,
return VLC_DEMUXER_EOF;
const stime_t i_demux_max_dts = (i_max_preload < UINT_MAX) ?
p_track->i_time + MP4_rescale( i_max_preload, CLOCK_FREQ, p_track->i_timescale ) :
p_track->i_time + MP4_rescale_qtime( i_max_preload, p_track->i_timescale ) :
INT64_MAX;
for( uint32_t i = p_track->context.i_trun_sample; i < p_trun->i_sample_count; i++ )
......@@ -4433,18 +4490,18 @@ static int FragDemuxTrack( demux_t *p_demux, mp4_track_t *p_track,
#if 0
msg_Dbg( p_demux, "tk(%i)=%"PRId64" mv=%"PRId64" pos=%"PRIu64, p_track->i_track_ID,
VLC_TICK_0 + MP4_rescale( i_dts, p_track->i_timescale, CLOCK_FREQ ),
VLC_TICK_0 + MP4_rescale( i_pts, p_track->i_timescale, CLOCK_FREQ ),
VLC_TICK_0 + MP4_rescale_mtime( i_dts, p_track->i_timescale ),
VLC_TICK_0 + MP4_rescale_mtime( i_pts, p_track->i_timescale ),
p_track->context.i_trun_sample_pos - i_read );
#endif
if ( p_track->p_es )
{
p_block->i_dts = VLC_TICK_0 + MP4_rescale( i_dts, p_track->i_timescale, CLOCK_FREQ );
p_block->i_dts = VLC_TICK_0 + MP4_rescale_mtime( i_dts, p_track->i_timescale );
if( p_track->fmt.i_cat == VIDEO_ES && !( p_trun->i_flags & MP4_TRUN_SAMPLE_TIME_OFFSET ) )
p_block->i_pts = VLC_TICK_INVALID;
else
p_block->i_pts = VLC_TICK_0 + MP4_rescale( i_pts, p_track->i_timescale, CLOCK_FREQ );
p_block->i_length = MP4_rescale( dur, p_track->i_timescale, CLOCK_FREQ );
p_block->i_pts = VLC_TICK_0 + MP4_rescale_mtime( i_pts, p_track->i_timescale );
p_block->i_length = MP4_rescale_mtime( dur, p_track->i_timescale );
MP4_Block_Send( p_demux, p_track, p_block );
}
else block_Release( p_block );
......@@ -4500,7 +4557,7 @@ static int DemuxMoof( demux_t *p_demux )
/* At least still have data to demux on this or next turns */
i_status = VLC_DEMUXER_SUCCESS;
if( MP4_rescale( tk_tmp->i_time, tk_tmp->i_timescale, CLOCK_FREQ ) <= i_nztime + DEMUX_INCREMENT )
if( MP4_rescale_mtime( tk_tmp->i_time, tk_tmp->i_timescale ) <= i_nztime + DEMUX_INCREMENT )
{
if( tk == NULL || tk_tmp->context.i_trun_sample_pos < tk->context.i_trun_sample_pos )
tk = tk_tmp;
......@@ -4522,7 +4579,7 @@ static int DemuxMoof( demux_t *p_demux )
tk_tmp->context.i_temp != VLC_DEMUXER_SUCCESS )
continue;
vlc_tick_t i_nzdts = MP4_rescale( tk_tmp->i_time, tk_tmp->i_timescale, CLOCK_FREQ );
vlc_tick_t i_nzdts = MP4_rescale_mtime( tk_tmp->i_time, tk_tmp->i_timescale );
if ( i_nzdts <= i_nztime + DEMUX_TRACK_MAX_PRELOAD )
{
/* Found a better candidate to avoid seeking */
......@@ -4560,7 +4617,7 @@ static int DemuxMoof( demux_t *p_demux )
if( tk->b_ok || tk->b_chapters_source ||
(!tk->b_selected && !p_sys->b_seekable) )
continue;
vlc_tick_t i_track_end = MP4_rescale( tk->i_time, tk->i_timescale, CLOCK_FREQ );
vlc_tick_t i_track_end = MP4_rescale_mtime( tk->i_time, tk->i_timescale );
if( i_track_end < i_segment_end )
i_segment_end = i_track_end;
}
......@@ -4690,7 +4747,7 @@ static int FragCreateTrunIndex( demux_t *p_demux, MP4_Box_t *p_moof,
if( i_moof_time != INT64_MAX )
i_traf_start_time = MP4_rescale( i_moof_time, p_sys->i_timescale, p_track->i_timescale );
else /* That should not happen */
i_traf_start_time = MP4_rescale( p_sys->i_nztime, CLOCK_FREQ, p_track->i_timescale );
i_traf_start_time = MP4_rescale_qtime( p_sys->i_nztime, p_track->i_timescale );
}
}
......@@ -4762,7 +4819,7 @@ static int FragCreateTrunIndex( demux_t *p_demux, MP4_Box_t *p_moof,
p_track->context.runs.i_count,
i_track_defaultsampleduration,
i_track_defaultsamplesize,
MP4_rescale( i_trun_dts, p_track->i_timescale, CLOCK_FREQ ), i_trun_data_offset );
MP4_rescale_mtime( i_trun_dts, p_track->i_timescale ), i_trun_data_offset );
#endif
//************
mp4_run_t *p_run = &p_track->context.runs.p_array[p_track->context.runs.i_count++];
......@@ -4804,7 +4861,7 @@ static int FragCreateTrunIndex( demux_t *p_demux, MP4_Box_t *p_moof,
return VLC_SUCCESS;
}
static int FragGetMoofBySidxIndex( demux_t *p_demux, vlc_tick_t i_target_time,
static int FragGetMoofBySidxIndex( demux_t *p_demux, vlc_tick_t target_time,
uint64_t *pi_moof_pos, vlc_tick_t *pi_sampletime )
{
const MP4_Box_t *p_sidx = MP4_BoxGet( p_demux->p_sys->p_root, "sidx" );
......@@ -4812,7 +4869,7 @@ static int FragGetMoofBySidxIndex( demux_t *p_demux, vlc_tick_t i_target_time,
if( !p_sidx || !((p_data = BOXDATA(p_sidx))) || !p_data->i_timescale )
return VLC_EGENERIC;
i_target_time = MP4_rescale( i_target_time, CLOCK_FREQ, p_data->i_timescale );
stime_t i_target_time = MP4_rescale_qtime( target_time, p_data->i_timescale );
/* sidx refers to offsets from end of sidx pos in the file + first offset */
uint64_t i_pos = p_data->i_first_offset + p_sidx->i_pos + p_sidx->i_size;
......@@ -4823,7 +4880,7 @@ static int FragGetMoofBySidxIndex( demux_t *p_demux, vlc_tick_t i_target_time,
continue;
if( i_time + p_data->p_items[i].i_subsegment_duration > i_target_time )
{
*pi_sampletime = MP4_rescale( i_time, p_data->i_timescale, CLOCK_FREQ );
*pi_sampletime = MP4_rescale_mtime( i_time, p_data->i_timescale );
*pi_moof_pos = i_pos;
return VLC_SUCCESS;
}
......@@ -4850,7 +4907,7 @@ static int FragGetMoofByTfraIndex( demux_t *p_demux, const vlc_tick_t i_target_t
mp4_track_t *p_track = MP4_GetTrackByTrackID( p_demux, p_data->i_track_ID );
if ( p_track )
{
stime_t i_track_target_time = MP4_rescale( i_target_time, CLOCK_FREQ, p_track->i_timescale );
stime_t i_track_target_time = MP4_rescale_qtime( i_target_time, p_track->i_timescale );
for ( uint32_t i = 0; i<p_data->i_number_of_entries; i += ( p_data->i_version == 1 ) ? 2 : 1 )
{
vlc_tick_t i_time;
......@@ -4872,7 +4929,7 @@ static int FragGetMoofByTfraIndex( demux_t *p_demux, const vlc_tick_t i_target_t
break;
*pi_moof_pos = i_pos;
*pi_sampletime = MP4_rescale( i_time, p_track->i_timescale, CLOCK_FREQ );
*pi_sampletime = MP4_rescale_mtime( i_time, p_track->i_timescale );
return VLC_SUCCESS;
}
else
......@@ -5078,7 +5135,7 @@ end:
for( unsigned i = 0; i < p_sys->i_tracks; i++ )
{
const mp4_track_t *tk = &p_sys->track[i];
vlc_tick_t i_track_end = MP4_rescale( tk->i_time, tk->i_timescale, CLOCK_FREQ );
vlc_tick_t i_track_end = MP4_rescale_mtime( tk->i_time, tk->i_timescale );
if( i_track_end > i_demux_end )
i_demux_end = i_track_end;
}
......