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 (5)
......@@ -34,6 +34,7 @@ struct vlc_clock_main_t
vlc_cond_t cond;
vlc_clock_t *master;
vlc_clock_t *input_master;
unsigned rc;
......@@ -367,7 +368,7 @@ vlc_clock_main_t *vlc_clock_main_New(void)
vlc_mutex_init(&main_clock->lock);
vlc_cond_init(&main_clock->cond);
main_clock->master = NULL;
main_clock->input_master = main_clock->master = NULL;
main_clock->rc = 1;
main_clock->coeff = 1.0f;
......@@ -567,7 +568,11 @@ vlc_clock_t *vlc_clock_main_CreateMaster(vlc_clock_main_t *main_clock,
vlc_mutex_lock(&main_clock->lock);
assert(main_clock->master == NULL);
vlc_clock_set_master_callbacks(clock);
if (main_clock->input_master == NULL)
vlc_clock_set_master_callbacks(clock);
else
vlc_clock_set_slave_callbacks(clock);
main_clock->master = clock;
main_clock->rc++;
vlc_mutex_unlock(&main_clock->lock);
......@@ -575,6 +580,32 @@ vlc_clock_t *vlc_clock_main_CreateMaster(vlc_clock_main_t *main_clock,
return clock;
}
vlc_clock_t *vlc_clock_main_CreateInputMaster(vlc_clock_main_t *main_clock)
{
/* The master has always the 0 priority */
vlc_clock_t *clock = vlc_clock_main_Create(main_clock, 0, NULL, NULL);
if (!clock)
return NULL;
vlc_mutex_lock(&main_clock->lock);
assert(main_clock->input_master == NULL);
/* Even if the master ES clock has already been created, it should not
* have updated any points */
assert(main_clock->offset == VLC_TICK_INVALID);
/* Override the master ES clock if it exists */
if (main_clock->master != NULL)
vlc_clock_set_slave_callbacks(main_clock->master);
vlc_clock_set_master_callbacks(clock);
main_clock->input_master = clock;
main_clock->rc++;
vlc_mutex_unlock(&main_clock->lock);
return clock;
}
vlc_clock_t *vlc_clock_main_CreateSlave(vlc_clock_main_t *main_clock,
enum es_format_category_e cat,
const struct vlc_clock_cbs *cbs,
......@@ -620,9 +651,17 @@ void vlc_clock_Delete(vlc_clock_t *clock)
{
vlc_clock_main_t *main_clock = clock->owner;
vlc_mutex_lock(&main_clock->lock);
if (clock == main_clock->master)
if (clock == main_clock->input_master)
{
/* The input master must be the last clock to be deleted */
assert(main_clock->rc == 2);
}
else if (clock == main_clock->master)
{
vlc_clock_main_reset(main_clock);
/* Don't reset the main clock if the master has been overridden by the
* input master */
if (main_clock->input_master != NULL)
vlc_clock_main_reset(main_clock);
main_clock->master = NULL;
}
main_clock->rc--;
......
......@@ -105,6 +105,18 @@ vlc_clock_t *vlc_clock_main_CreateMaster(vlc_clock_main_t *main_clock,
const struct vlc_clock_cbs *cbs,
void *cbs_data);
/**
* This function creates a new input master vlc_clock_t interface
*
* Once the input master is created, the current or future master clock created
* from vlc_clock_main_CreateMaster() will be demoted as slave.
*
* @warning There can be only one input master at a given time.
*
* You must use vlc_clock_Delete to free it.
*/
vlc_clock_t *vlc_clock_main_CreateInputMaster(vlc_clock_main_t *main_clock);
/**
* This function creates a new slave vlc_clock_t interface
*
......
......@@ -159,17 +159,12 @@ static void UpdateListener( input_clock_t *cl )
/*****************************************************************************
* input_clock_New: create a new clock
*****************************************************************************/
input_clock_t *input_clock_New( vlc_clock_t *clock_listener, float rate )
input_clock_t *input_clock_New( float rate )
{
input_clock_t *cl = malloc( sizeof(*cl) );
if( !cl )
{
if( cl->clock_listener )
vlc_clock_Delete( cl->clock_listener );
return NULL;
}
cl->clock_listener = clock_listener;
cl->clock_listener = NULL;
cl->b_has_reference = false;
cl->ref = clock_point_Create( VLC_TICK_INVALID, VLC_TICK_INVALID );
......@@ -205,6 +200,14 @@ void input_clock_Delete( input_clock_t *cl )
free( cl );
}
void input_clock_AttachListener( input_clock_t *cl, vlc_clock_t *clock_listener )
{
assert( clock_listener && cl->clock_listener == NULL );
assert( !cl->b_has_reference );
cl->clock_listener = clock_listener;
}
/*****************************************************************************
* input_clock_Update: manages a clock reference
*
......
......@@ -38,12 +38,21 @@ typedef struct input_clock_t input_clock_t;
/**
* This function creates a new input_clock_t.
*
* \param clock_listener clock created with vlc_clock_main_CreateMaster(). If
* valid, the input_clock_t will take ownership of this clock and drive the
* main clock.
* You must use input_clock_Delete to delete it once unused.
*/
input_clock_t *input_clock_New( vlc_clock_t *clock_listener, float rate );
input_clock_t *input_clock_New( float rate );
/**
* This function attach a clock listener to the input clock
*
* It can be called only one time, with a valid clock, before the first update
* (input_clock_Update()).
*
* \param clock_listener clock created with vlc_clock_main_CreateInputMaster().
* The input_clock_t will take ownership of this clock and drive the main
* clock.
*/
void input_clock_AttachListener( input_clock_t *, vlc_clock_t *clock_listener );
/**
* This function destroys a input_clock_t created by input_clock_New.
......
......@@ -77,7 +77,7 @@ typedef struct
/* Clock for this program */
input_clock_t *p_input_clock;
vlc_clock_main_t *p_main_clock;
const vlc_clock_t *p_master_clock;
enum vlc_clock_master_source active_clock_source;
vlc_tick_t i_last_pcr;
......@@ -1274,6 +1274,49 @@ static void EsOutSendEsEvent(es_out_t *out, es_out_id_t *es, int action,
});
}
static void EsOutProgramHandleClockSource( es_out_t *out, es_out_pgrm_t *p_pgrm )
{
es_out_sys_t *p_sys = container_of(out, es_out_sys_t, out);
input_thread_t *p_input = p_sys->p_input;
input_thread_private_t *priv = input_priv(p_input);
/* XXX: The clock source selection depends on priv->b_can_pace_control but
* this variable is only initialized from the input_thread_t after the
* demux is opened. Programs and ES tracks can be created from the demux
* open callback or midstream (from the demux callback). Therefore, we
* can't handle the clock source selection after the program is created
* since priv->b_can_pace_control might not be initialized. To fix this
* issue, handle clock source selection when the first PCR is sent (from
* ES_OUT_SET_PCR). */
assert( p_sys->b_active );
switch( p_sys->clock_source )
{
case VLC_CLOCK_MASTER_AUTO:
if (priv->b_can_pace_control)
{
p_pgrm->active_clock_source = VLC_CLOCK_MASTER_AUDIO;
break;
}
msg_Dbg( p_input, "The input can't pace, selecting the input (PCR) as the "
"clock source" );
/* Fall-through */
case VLC_CLOCK_MASTER_INPUT:
{
vlc_clock_t *p_master_clock =
vlc_clock_main_CreateInputMaster( p_pgrm->p_main_clock );
if( p_master_clock != NULL )
input_clock_AttachListener( p_pgrm->p_input_clock, p_master_clock );
p_pgrm->active_clock_source = VLC_CLOCK_MASTER_INPUT;
break;
}
default:
p_pgrm->active_clock_source = p_sys->clock_source;
break;
}
}
/* EsOutIsGroupSticky
*
* A sticky group can be attached to any other programs. This is the case for
......@@ -1393,7 +1436,6 @@ static es_out_pgrm_t *EsOutProgramAdd( es_out_t *out, input_source_t *source, in
{
es_out_sys_t *p_sys = container_of(out, es_out_sys_t, out);
input_thread_t *p_input = p_sys->p_input;
input_thread_private_t *priv = input_priv(p_input);
/* Sticky groups will be attached to any existing programs, no need to
* create one. */
......@@ -1412,8 +1454,7 @@ static es_out_pgrm_t *EsOutProgramAdd( es_out_t *out, input_source_t *source, in
p_pgrm->b_scrambled = false;
p_pgrm->i_last_pcr = VLC_TICK_INVALID;
p_pgrm->p_meta = NULL;
p_pgrm->p_master_clock = NULL;
p_pgrm->active_clock_source = VLC_CLOCK_MASTER_AUTO;
p_pgrm->p_main_clock = vlc_clock_main_New();
if( !p_pgrm->p_main_clock )
......@@ -1422,24 +1463,7 @@ static es_out_pgrm_t *EsOutProgramAdd( es_out_t *out, input_source_t *source, in
return NULL;
}
vlc_clock_t *p_master_clock = NULL;
switch( p_sys->clock_source )
{
case VLC_CLOCK_MASTER_AUTO:
if (priv->b_can_pace_control)
break;
msg_Dbg( p_input, "The input can't pace, selecting the input (PCR) as the "
"clock source" );
/* Fall-through */
case VLC_CLOCK_MASTER_INPUT:
p_pgrm->p_master_clock = p_master_clock =
vlc_clock_main_CreateMaster( p_pgrm->p_main_clock, NULL, NULL );
break;
default:
break;
}
p_pgrm->p_input_clock = input_clock_New( p_master_clock, p_sys->rate );
p_pgrm->p_input_clock = input_clock_New( p_sys->rate );
if( !p_pgrm->p_input_clock )
{
vlc_clock_main_Delete( p_pgrm->p_main_clock );
......@@ -2236,11 +2260,10 @@ static void EsOutCreateDecoder( es_out_t *out, es_out_id_t *p_es )
}
if( p_es->fmt.i_cat != UNKNOWN_ES
&& p_es->fmt.i_cat == clock_source_cat
&& p_es->p_pgrm->p_master_clock == NULL )
&& p_es->fmt.i_cat == clock_source_cat )
{
p_es->master = true;
p_es->p_pgrm->p_master_clock = p_es->p_clock =
p_es->p_clock =
vlc_clock_main_CreateMaster( p_es->p_pgrm->p_main_clock,
&clock_cbs, p_es );
}
......@@ -2303,8 +2326,6 @@ static void EsOutDestroyDecoder( es_out_t *out, es_out_id_t *p_es )
vlc_input_decoder_Delete( p_es->p_dec );
p_es->p_dec = NULL;
if( p_es->p_pgrm->p_master_clock == p_es->p_clock )
p_es->p_pgrm->p_master_clock = NULL;
vlc_clock_Delete( p_es->p_clock );
p_es->p_clock = NULL;
......@@ -3257,6 +3278,12 @@ static int EsOutVaControlLocked( es_out_t *out, input_source_t *source,
if( !p_pgrm )
return VLC_EGENERIC;
if( p_pgrm->active_clock_source == VLC_CLOCK_MASTER_AUTO )
{
EsOutProgramHandleClockSource( out, p_pgrm );
assert( p_pgrm->active_clock_source != VLC_CLOCK_MASTER_AUTO );
}
i_pcr = va_arg( args, vlc_tick_t );
if( i_pcr == VLC_TICK_INVALID )
{
......