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 (3)
......@@ -2132,8 +2132,7 @@ static int MP4_ReadBox_ASF( stream_t *p_stream, MP4_Box_t *p_box )
static void MP4_FreeBox_sbgp( MP4_Box_t *p_box )
{
MP4_Box_data_sbgp_t *p_sbgp = p_box->data.p_sbgp;
free( p_sbgp->entries.pi_sample_count );
free( p_sbgp->entries.pi_group_description_index );
free( p_sbgp->p_entries );
}
static int MP4_ReadBox_sbgp( stream_t *p_stream, MP4_Box_t *p_box )
......@@ -2163,10 +2162,8 @@ static int MP4_ReadBox_sbgp( stream_t *p_stream, MP4_Box_t *p_box )
if( p_sbgp->i_entry_count > i_read / (4 + 4) )
p_sbgp->i_entry_count = i_read / (4 + 4);
p_sbgp->entries.pi_sample_count = vlc_alloc( p_sbgp->i_entry_count, sizeof(uint32_t) );
p_sbgp->entries.pi_group_description_index = vlc_alloc( p_sbgp->i_entry_count, sizeof(uint32_t) );
if( !p_sbgp->entries.pi_sample_count || !p_sbgp->entries.pi_group_description_index )
p_sbgp->p_entries = vlc_alloc( p_sbgp->i_entry_count, sizeof(*p_sbgp->p_entries) );
if( !p_sbgp->p_entries )
{
MP4_FreeBox_sbgp( p_box );
MP4_READBOX_EXIT( 0 );
......@@ -2174,8 +2171,8 @@ static int MP4_ReadBox_sbgp( stream_t *p_stream, MP4_Box_t *p_box )
for( uint32_t i=0; i<p_sbgp->i_entry_count; i++ )
{
MP4_GET4BYTES( p_sbgp->entries.pi_sample_count[i] );
MP4_GET4BYTES( p_sbgp->entries.pi_group_description_index[i] );
MP4_GET4BYTES( p_sbgp->p_entries[i].i_sample_count );
MP4_GET4BYTES( p_sbgp->p_entries[i].i_group_description_index );
}
#ifdef MP4_VERBOSE
......@@ -2184,8 +2181,8 @@ static int MP4_ReadBox_sbgp( stream_t *p_stream, MP4_Box_t *p_box )
#ifdef MP4_ULTRA_VERBOSE
for (uint32_t i = 0; i < p_sbgp->i_entry_count; i++)
msg_Dbg( p_stream, "\t samples %" PRIu32 " group %" PRIu32,
p_sbgp->entries.pi_sample_count[i],
p_sbgp->entries.pi_group_description_index[i] );
p_sbgp->entries[i].i_sample_count,
p_sbgp->entries[i].i_group_description_index );
#endif
#endif
......
......@@ -1358,33 +1358,41 @@ typedef struct
uint8_t i_stream_number;
} MP4_Box_data_ASF_t;
typedef union
{
struct
{
uint8_t i_num_leading_samples_known;
uint8_t i_num_leading_samples;
} rap;
struct
{
int16_t i_roll_distance;
} roll;
} MP4_Box_data_sgpd_entry_t;
typedef struct
{
uint8_t i_version;
uint32_t i_grouping_type;
uint32_t i_default_sample_description_index;
uint32_t i_entry_count;
union
{
struct
{
uint8_t i_num_leading_samples_known;
uint8_t i_num_leading_samples;
} rap;
} *p_entries;
MP4_Box_data_sgpd_entry_t *p_entries;
} MP4_Box_data_sgpd_t;
typedef struct
{
uint32_t i_sample_count;
uint32_t i_group_description_index;
} MP4_Box_data_sbgp_entry_t;
typedef struct
{
uint8_t i_version;
uint32_t i_grouping_type;
uint32_t i_grouping_type_parameter;
uint32_t i_entry_count;
struct
{
uint32_t *pi_sample_count;
uint32_t *pi_group_description_index;
} entries;
MP4_Box_data_sbgp_entry_t *p_entries;
} MP4_Box_data_sbgp_t;
typedef struct
......
......@@ -336,6 +336,111 @@ static MP4_Box_t * MP4_GetTrafByTrackID( MP4_Box_t *p_moof, const uint32_t i_id
return p_traf;
}
static const MP4_Box_t * MP4_GroupDescriptionByType( const MP4_Box_t *p_node,
uint32_t i_grouping_type )
{
for( const MP4_Box_t *p_sgpd = MP4_BoxGet( p_node, "sgpd" );
p_sgpd; p_sgpd = p_sgpd->p_next )
{
const MP4_Box_data_sgpd_t *p_sgpd_data = BOXDATA(p_sgpd);
if( p_sgpd->i_type != ATOM_sgpd || !p_sgpd_data ||
p_sgpd_data->i_grouping_type != i_grouping_type )
continue;
return p_sgpd;
}
return NULL;
}
enum SampleGroupMatch
{
SAMPLE_GROUP_MATCH_EXACT = 0,
SAMPLE_GROUP_MATCH_LAST_VALID = 1,
};
static const MP4_Box_data_sbgp_entry_t *
MP4_SampleToGroupInfo( const MP4_Box_t *p_node, uint32_t i_sample,
uint32_t i_grouping_type,
uint32_t i_grouping_type_parameter,
uint32_t *pi_group_sample,
enum SampleGroupMatch match,
const MP4_Box_data_sgpd_entry_t **pp_descentry )
{
const MP4_Box_t *p_sbgp = MP4_BoxGet( p_node, "sbgp" );
const MP4_Box_data_sbgp_t *p_sbgp_data;
for( ; p_sbgp; p_sbgp = p_sbgp->p_next )
{
p_sbgp_data = BOXDATA(p_sbgp);
if( p_sbgp->i_type == ATOM_sbgp && p_sbgp_data &&
p_sbgp_data->i_grouping_type == i_grouping_type &&
(i_grouping_type_parameter == 0 ||
p_sbgp_data->i_grouping_type_parameter == i_grouping_type_parameter) )
break;
}
if( !p_sbgp )
return NULL;
const MP4_Box_data_sbgp_entry_t *p_sampleentry = NULL;
uint32_t i_entry_start_sample = 0;
for ( uint32_t i=0; i<p_sbgp_data->i_entry_count; i++ )
{
const uint32_t next_entry_start_sample = i_entry_start_sample +
p_sbgp_data->p_entries[i].i_sample_count;
if( i_sample >= next_entry_start_sample )
{
if( match == SAMPLE_GROUP_MATCH_LAST_VALID &&
p_sbgp_data->p_entries[i].i_group_description_index != 0 )
{
p_sampleentry = &p_sbgp_data->p_entries[i];
if( pi_group_sample )
*pi_group_sample = i_entry_start_sample;
}
i_entry_start_sample = next_entry_start_sample;
continue;
}
/* Sample has meaning for group */
if( p_sbgp_data->p_entries[i].i_group_description_index != 0 )
{
p_sampleentry = &p_sbgp_data->p_entries[i];
if( pi_group_sample )
*pi_group_sample = i_entry_start_sample;
}
break;
}
/* No meaning found for sample */
if( p_sampleentry == NULL )
return NULL;
/* We have a sample entry in the group and maybe a description */
if( pp_descentry == NULL )
return p_sampleentry;
/* Lookup designated group description */
const MP4_Box_t *p_sgpd = MP4_GroupDescriptionByType( p_node, i_grouping_type );
if( p_sgpd )
{
const MP4_Box_data_sgpd_t *p_descdata = BOXDATA(p_sgpd);
if( p_sampleentry &&
p_sampleentry->i_group_description_index <= p_descdata->i_entry_count )
{
*pp_descentry = &p_descdata->
p_entries[p_sampleentry->i_group_description_index - 1];
}
else if( p_sampleentry == NULL &&
p_descdata->i_version >= 2 &&
p_descdata->i_default_sample_description_index &&
p_descdata->i_default_sample_description_index <= p_descdata->i_entry_count )
{
*pp_descentry = &p_descdata->
p_entries[p_descdata->i_default_sample_description_index - 1];
}
}
return p_sampleentry;
}
static es_out_id_t * MP4_CreateES( es_out_t *out, const es_format_t *p_fmt,
bool b_forced_spu )
{
......@@ -3065,9 +3170,10 @@ static int TrackGetNearestSeekPoint( demux_t *p_demux, mp4_track_t *p_track,
uint32_t i_sample, uint32_t *pi_sync_sample )
{
int i_ret = VLC_EGENERIC;
*pi_sync_sample = 0;
*pi_sync_sample = i_sample;
const MP4_Box_t *p_stss;
/* try sync points without recovery roll */
if( ( p_stss = MP4_BoxGet( p_track->p_stbl, "stss" ) ) )
{
const MP4_Box_data_stss_t *p_stss_data = BOXDATA(p_stss);
......@@ -3087,44 +3193,17 @@ static int TrackGetNearestSeekPoint( demux_t *p_demux, mp4_track_t *p_track,
}
}
/* try rap samples groups */
const MP4_Box_t *p_sbgp = MP4_BoxGet( p_track->p_stbl, "sbgp" );
for( ; p_sbgp; p_sbgp = p_sbgp->p_next )
/* try or refine using RAP with recovery roll info */
uint32_t i_alternative_sync_sample = i_sample;
if( MP4_SampleToGroupInfo( p_track->p_stbl, i_sample, SAMPLEGROUP_rap,
0, &i_alternative_sync_sample, true, NULL ) )
{
const MP4_Box_data_sbgp_t *p_sbgp_data = BOXDATA(p_sbgp);
if( p_sbgp->i_type != ATOM_sbgp || !p_sbgp_data )
continue;
if( p_sbgp_data->i_grouping_type == SAMPLEGROUP_rap )
{
uint32_t i_group_sample = 0;
for ( uint32_t i=0; i<p_sbgp_data->i_entry_count; i++ )
{
/* Sample belongs to rap group ? */
if( p_sbgp_data->entries.pi_group_description_index[i] != 0 )
{
if( i_sample < i_group_sample )
{
msg_Dbg( p_demux, "sbgp lookup failed %" PRIu32 " (sample number)",
i_sample );
break;
}
else if ( i_sample >= i_group_sample &&
*pi_sync_sample < i_group_sample )
{
*pi_sync_sample = i_group_sample;
i_ret = VLC_SUCCESS;
}
}
i_group_sample += p_sbgp_data->entries.pi_sample_count[i];
}
if( i_ret == VLC_SUCCESS && *pi_sync_sample )
{
msg_Dbg( p_demux, "sbgp gives %d --> %" PRIu32 " (sample number)",
i_sample, *pi_sync_sample );
}
}
i_ret = VLC_SUCCESS;
msg_Dbg( p_demux, "tk %u sbgp gives %d --> %" PRIu32 " (sample number)",
p_track->i_track_ID, i_sample, i_alternative_sync_sample );
if( i_alternative_sync_sample > *pi_sync_sample &&
i_alternative_sync_sample < i_sample )
*pi_sync_sample = i_alternative_sync_sample;
}
return i_ret;
......