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
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
405 results
Show changes
Commits on Source (5)
......@@ -110,6 +110,7 @@ typedef struct
uint64_t i_cumulated_duration; /* Same as above, but not from probing, (movie time scale) */
uint32_t i_timescale; /* movie time scale */
vlc_tick_t i_nztime; /* time position of the presentation (CLOCK_FREQ timescale) */
vlc_tick_t i_max_pts_offset;
unsigned int i_tracks; /* number of tracks */
mp4_track_t *track; /* array of track */
float f_fps; /* number of frame per seconds */
......@@ -167,7 +168,7 @@ typedef struct
/*****************************************************************************
* Declaration of local function
*****************************************************************************/
static void MP4_TrackSetup( demux_t *, mp4_track_t *, MP4_Box_t *, bool, bool );
static void MP4_TrackSetup( demux_t *, mp4_track_t *, const MP4_Box_t *, bool, bool );
static void MP4_TrackInit( mp4_track_t *, const MP4_Box_t * );
static void MP4_TrackClean( es_out_t *, mp4_track_t * );
......@@ -485,20 +486,6 @@ static void MP4_ChunkDestroy( mp4_chunk_t *ck )
free( ck->p_sample_count_pts );
}
static const mp4_chunk_t * MP4_TrackChunkForSample( const mp4_track_t *p_track,
uint32_t i_sample )
{
if( i_sample >= p_track->i_sample_count )
return NULL;
for( uint32_t i=0; i<p_track->i_chunk_count; i++ )
{
if( i_sample >= p_track->chunk[i].i_sample_first &&
i_sample - p_track->chunk[i].i_sample_first < p_track->chunk[i].i_sample_count )
return &p_track->chunk[i];
}
return NULL;
}
static stime_t MP4_MapTrackTimeIntoTimeline( const mp4_track_t *p_track,
uint32_t i_movie_timescale,
stime_t i_time )
......@@ -611,6 +598,13 @@ static vlc_tick_t MP4_TrackGetDTSPTS( demux_t *p_demux, const mp4_track_t *p_tra
else *pi_nzpts = i_dts;
}
if( p_track->i_pts_offset )
{
if( pi_nzpts && *pi_nzpts != INVALID_PTS )
*pi_nzpts += p_track->i_pts_offset;
i_dts += p_track->i_pts_offset;
}
return i_dts;
}
......@@ -1272,13 +1266,14 @@ static int Open( vlc_object_t * p_this )
/* now process each track and extract all useful information */
for( unsigned i = 0; i < p_sys->i_tracks; i++ )
{
MP4_Box_t *p_trak = MP4_BoxGet( p_sys->p_root, "/moov/trak[%u]", i );
MP4_TrackSetup( p_demux, &p_sys->track[i], p_trak, true, !b_enabled_es );
const MP4_Box_t *p_trakbox = MP4_BoxGet( p_sys->p_root, "/moov/trak[%u]", i );
MP4_TrackSetup( p_demux, &p_sys->track[i], p_trakbox, true, !b_enabled_es );
mp4_track_t *p_track = &p_sys->track[i];
if( p_sys->track[i].b_ok && ! MP4_isMetadata(&p_sys->track[i]) )
if( p_track->b_ok && ! MP4_isMetadata(p_track) )
{
const char *psz_cat;
switch( p_sys->track[i].fmt.i_cat )
switch( p_track->fmt.i_cat )
{
case( VIDEO_ES ):
psz_cat = "video";
......@@ -1296,25 +1291,41 @@ static int Open( vlc_object_t * p_this )
}
msg_Dbg( p_demux, "adding track[Id 0x%x] %s (%s) language %s",
p_sys->track[i].i_track_ID, psz_cat,
p_sys->track[i].b_enable ? "enable":"disable",
p_sys->track[i].fmt.psz_language ?
p_sys->track[i].fmt.psz_language : "undef" );
p_track->i_track_ID, psz_cat,
p_track->b_enable ? "enable":"disable",
p_track->fmt.psz_language ?
p_track->fmt.psz_language : "undef" );
}
else if( p_sys->track[i].b_ok && (p_sys->track[i].i_use_flags & USEAS_CHAPTERS) )
else if( p_track->b_ok && (p_track->i_use_flags & USEAS_CHAPTERS) )
{
msg_Dbg( p_demux, "using track[Id 0x%x] for chapter language %s",
p_sys->track[i].i_track_ID,
p_sys->track[i].fmt.psz_language ?
p_sys->track[i].fmt.psz_language : "undef" );
p_track->i_track_ID,
p_track->fmt.psz_language ?
p_track->fmt.psz_language : "undef" );
}
else
{
msg_Dbg( p_demux, "ignoring track[Id 0x%x] %d refs %x",
p_sys->track[i].i_track_ID, p_sys->track[i].b_ok, p_sys->track[i].i_use_flags );
p_track->i_track_ID, p_track->b_ok, p_track->i_use_flags );
}
if( p_track->b_ok && p_track->i_cts_shift ) /* PTS shift handling pass 1 */
{
p_track->i_pts_offset = MP4_rescale_mtime( p_track->i_cts_shift,
p_track->i_timescale );
if( p_track->i_pts_offset > p_sys->i_max_pts_offset )
p_sys->i_max_pts_offset = p_track->i_pts_offset;
}
}
for( unsigned i = 0; i < p_sys->i_tracks; i++ ) /* PTS shift handling pass 2 */
{
mp4_track_t *p_track = &p_sys->track[i];
if( !p_track->b_ok )
continue;
p_track->i_pts_offset = p_sys->i_max_pts_offset - p_track->i_pts_offset;
}
p_mvex = MP4_BoxGet( p_sys->p_moov, "mvex" );
if( p_mvex != NULL )
{
......@@ -2229,7 +2240,8 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
else return VLC_EGENERIC;
case DEMUX_GET_TIME:
*va_arg( args, vlc_tick_t * ) = p_sys->i_timescale > 0 ? p_sys->i_nztime : 0;
*va_arg( args, vlc_tick_t * ) = (p_sys->i_max_pts_offset < p_sys->i_nztime)
? p_sys->i_nztime - p_sys->i_max_pts_offset : 0;
return VLC_SUCCESS;
case DEMUX_SET_TIME:
......@@ -2902,6 +2914,7 @@ static int TrackCreateSamplesIndex( demux_t *p_demux,
i_cts_shift = -ctts->pi_sample_offset[i];
}
}
p_demux_track->i_cts_shift = i_cts_shift;
/* Create pts-dts table per chunk */
uint32_t i_index = 0;
......@@ -3519,28 +3532,38 @@ static void TrackUpdateStarttimes( mp4_track_t *p_track )
p_track->i_start_delta = p_track->i_next_delta;
/* Probe the 16 first B frames */
const mp4_chunk_t *p_chunk = &p_track->chunk[p_track->i_chunk];
if( p_chunk->i_entries_pts )
uint32_t i_chunk = p_track->i_chunk;
if( !p_track->chunk[i_chunk].i_entries_pts )
return;
stime_t lowest = p_track->i_start_dts;
if( p_track->i_start_delta != UNKNOWN_DELTA )
lowest += p_track->i_start_delta;
for( uint32_t i=1; i<16; i++ )
{
for( uint32_t i=1; i<16; i++ )
uint32_t i_nextsample = p_track->i_sample + i;
if( i_nextsample >= p_track->i_sample_count )
break;
const mp4_chunk_t *ck = NULL;
for( ; i_chunk < p_track->i_chunk_count; i_chunk++ )
{
uint32_t i_nextsample = p_track->i_sample + i;
const mp4_chunk_t *ck = MP4_TrackChunkForSample( p_track, i_nextsample );
if(!ck)
ck = &p_track->chunk[i_chunk];
if( i_nextsample < ck->i_sample_first + ck->i_sample_count )
break;
stime_t pts;
stime_t dts = pts = MP4_ChunkGetSampleDTS( ck, i_nextsample - ck->i_sample_first );
stime_t delta = UNKNOWN_DELTA;
if( MP4_ChunkGetSampleCTSDelta( ck, i_nextsample - ck->i_sample_first, &delta ) )
pts += delta;
stime_t lowest = p_track->i_start_dts;
if( p_track->i_start_delta != UNKNOWN_DELTA )
lowest += p_track->i_start_delta;
if( pts < lowest )
{
p_track->i_start_dts = dts;
p_track->i_start_delta = delta;
}
}
if( !ck )
break;
assert(i_nextsample >= ck->i_sample_first);
stime_t pts;
stime_t dts = pts = MP4_ChunkGetSampleDTS( ck, i_nextsample - ck->i_sample_first );
stime_t delta = UNKNOWN_DELTA;
if( MP4_ChunkGetSampleCTSDelta( ck, i_nextsample - ck->i_sample_first, &delta ) )
pts += delta;
if( pts < lowest )
{
p_track->i_start_dts = dts;
p_track->i_start_delta = delta;
}
}
}
......@@ -3566,7 +3589,7 @@ static void TrackUpdateSampleAndTimes( mp4_track_t *p_track )
* If it succeed b_ok is set to 1 else to 0
****************************************************************************/
static void MP4_TrackSetup( demux_t *p_demux, mp4_track_t *p_track,
MP4_Box_t *p_box_trak,
const MP4_Box_t *p_box_trak,
bool b_create_es, bool b_force_enable )
{
demux_sys_t *p_sys = p_demux->p_sys;
......
......@@ -135,6 +135,8 @@ typedef struct
uint32_t i_next_delta;
stime_t i_start_dts;
stime_t i_next_dts;
int64_t i_cts_shift;
vlc_tick_t i_pts_offset;
/* give the next sample to read, i_chunk is to find quickly where
the sample is located */
uint32_t i_sample; /* next sample to read */
......