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 (7)
  • Alexandre Janniaux's avatar
    input: decoder: fix flushing when deleting decoder · 23a0ea4b
    Alexandre Janniaux authored and Steve Lhomme's avatar Steve Lhomme committed
    An input_decoder instance can be deleted while its DecoderThread, the
    thread calling decoder_t::pf_decode, is still running, meaning that
    the deletion request happens asynchronously to the decoding process.
    
    In particular, when the input_decoder instance is being deleted, an
    aborting state is signalled to the DecoderThread and the input decoder
    joins the thread afterwards.
    
    In order to return and be joined, the DecoderThread needs to finish what
    it was doing. In the case of a decoder, where input is paced by output
    availability, it's likely that the decoder will get paced and will be
    waiting on the decoder_t::pf_decode call. To finalize this call, the
    decoder must be provided pictures back from the output, so that the
    block from decoder_t::pf_decode can be queued.
    
    At the beginning of the deletion, by setting p_owner->flushing to true,
    we also prevent the decoder implementation to queue blocks into the
    output (from commit 34a548cc). When
    flushing the input decoder, the output was also correctly flushed
    (tested by 91aabbf0) which matches with
    how the decoder implementation can be unblocked.
    
    But in the case of closing, output flushing was only happening when the
    output was paused, meaning that a deadlock could happen if every
    pictures were queued to the output when the decoder would be deleted
    while it was decoding another new block.
    
    This issue was reproduced with the Videotoolbox decoder.
    23a0ea4b
  • Alexandre Janniaux's avatar
    stream out: display: add explicit input decoder flush · 13ffce30
    Alexandre Janniaux authored and Steve Lhomme's avatar Steve Lhomme committed
    Ensure the input_decoder is flushed before deletion, so that it's not
    stuck waiting on the decoder implementation or the output for the ES.
    
    The end goal is to simplify vlc_input_decoder_Delete to ensure it is
    either flushed or drained before being deleted, so that the wanted
    behaviour is written in the code and frames are neither dropped when
    they should have been played, nor drained during interruption, resulting
    in increased response time.
    13ffce30
  • Alexandre Janniaux's avatar
    input: es_out: add explicit input decoder flush · eb34fd0a
    Alexandre Janniaux authored and Steve Lhomme's avatar Steve Lhomme committed
    Ensure the input_decoder is flushed before deletion, so that it's not
    stuck waiting on the decoder implementation or the output for the ES.
    
    The end goal is to simplify vlc_input_decoder_Delete to ensure it is
    either flushed or drained before being deleted, so that the wanted
    behaviour is written in the code and frames are neither dropped when
    they should have been played, nor drained during interruption, resulting
    in increased response time.
    eb34fd0a
  • Alexandre Janniaux's avatar
    input: decoder: add explicit input decoder flush · cef87510
    Alexandre Janniaux authored and Steve Lhomme's avatar Steve Lhomme committed
    Ensure the input_decoder is flushed before deletion, so that it's not
    stuck waiting on the decoder implementation or the output for the ES.
    
    The end goal is to simplify vlc_input_decoder_Delete to ensure it is
    either flushed or drained before being deleted, so that the wanted
    behaviour is written in the code and frames are neither dropped when
    they should have been played, nor drained during interruption, resulting
    in increased response time.
    cef87510
  • Alexandre Janniaux's avatar
    vlc_decoder.h: document vlc_input_decoder_Delete · 5f000b28
    Alexandre Janniaux authored and Steve Lhomme's avatar Steve Lhomme committed
    Add documentation for the vlc_input_decoder_Delete function to enforce
    usage of vlc_input_decoder_Flush or vlc_input_decoder_Drain before
    destruction.
    5f000b28
  • Alexandre Janniaux's avatar
    input: decoder: separate flushing and aborting · c9d874e7
    Alexandre Janniaux authored and Steve Lhomme's avatar Steve Lhomme committed
    No pictures should be queued when aborting the input_decoder via
    `vlc_input_decoder_Delete` since it should have been either drained or
    queued, but for now the behaviour was conservatively setting flushing to
    true in the destructor to ensure the decoder implementation would not
    queue anything from there to the output.
    
    Change the check to account for this in release. Future commits will
    probably add a debug check to ensure decoder implementations are
    conformant to this behaviour and won't queue data from their close
    function.
    c9d874e7
  • Alexandre Janniaux's avatar
    input: decoder: remove flush workaround on Delete · 69abb520
    Alexandre Janniaux authored and Steve Lhomme's avatar Steve Lhomme committed
    Now that flush or drain is done before `vlc_input_decoder_Delete` and
    that it has become mandatory, there is no need to flush during delete
    preventively.
    69abb520
......@@ -43,7 +43,21 @@ struct vlc_clock_t;
VLC_API vlc_input_decoder_t *
vlc_input_decoder_Create( vlc_object_t *, const es_format_t *,
struct vlc_clock_t *, input_resource_t * ) VLC_USED;
VLC_API void vlc_input_decoder_Delete( vlc_input_decoder_t * );
/**
* Delete an existing vlc_input_decoder_t instance.
*
* Close the decoder implementation and delete the vlc_input_decoder_t
* instance.
* The instance must have been drained using vlc_input_decoder_Drain() or
* flushed using vlc_input_decoder_Flush() after any previous call to
* vlc_input_decoder_Decode() before calling the destructor.
*
* @param decoder The vlc_input_decoder_t to delete, created from
* vlc_input_decoder_Create().
*/
VLC_API void vlc_input_decoder_Delete( vlc_input_decoder_t * decoder);
VLC_API void vlc_input_decoder_Decode( vlc_input_decoder_t *, block_t *, bool b_do_pace );
VLC_API void vlc_input_decoder_Drain( vlc_input_decoder_t * );
VLC_API void vlc_input_decoder_Flush( vlc_input_decoder_t * );
......
......@@ -136,6 +136,7 @@ static void Del( sout_stream_t *p_stream, void *id )
(void) p_stream;
sout_stream_id_sys_t *id_sys = id;
vlc_input_decoder_Flush(id_sys->dec);
vlc_input_decoder_Delete( id_sys->dec );
sout_ClockDelete( id_sys->clock );
free( id_sys );
......
......@@ -1159,7 +1159,7 @@ static void DecoderPlayCc( vlc_input_decoder_t *p_owner, vlc_frame_t *p_cc,
const decoder_cc_desc_t *p_desc )
{
vlc_fifo_Lock(p_owner->p_fifo);
if (p_owner->flushing)
if (p_owner->flushing || p_owner->aborting)
{
vlc_fifo_Unlock(p_owner->p_fifo);
vlc_frame_Release(p_cc);
......@@ -1242,7 +1242,7 @@ static int ModuleThread_PlayVideo( vlc_input_decoder_t *p_owner, picture_t *p_pi
return VLC_EGENERIC;
}
if (p_owner->flushing)
if (p_owner->flushing || p_owner->aborting)
{
picture_Release(p_picture);
return VLC_SUCCESS;
......@@ -1392,7 +1392,7 @@ static int ModuleThread_PlayAudio( vlc_input_decoder_t *p_owner, vlc_frame_t *p_
return VLC_EGENERIC;
}
if (p_owner->flushing)
if (p_owner->flushing || p_owner->aborting)
{
block_Release(p_audio);
return VLC_SUCCESS;
......@@ -2216,44 +2216,15 @@ void vlc_input_decoder_Delete( vlc_input_decoder_t *p_owner )
vlc_fifo_Lock( p_owner->p_fifo );
p_owner->aborting = true;
p_owner->flushing = true;
p_owner->b_waiting = false;
vlc_fifo_Signal( p_owner->p_fifo );
/* Make sure we aren't waiting/decoding anymore */
vlc_cond_signal( &p_owner->wait_request );
/* If the video output is paused or slow, or if the picture pool size was
* under-estimated (e.g. greedy video filter, buggy decoder...), the
* the picture pool may be empty, and the decoder thread or any decoder
* module worker threads may be stuck waiting for free picture buffers.
*
* This unblocks the thread, allowing the decoder module to join all its
* worker threads (if any) and the decoder thread to terminate. */
if( p_dec->fmt_in->i_cat == VIDEO_ES && p_owner->p_vout != NULL
&& p_owner->vout_started )
{
if( p_owner->paused )
{
/* The DecoderThread could be stuck in pf_decode(). This is likely the
* case with paused asynchronous decoder modules that have a limited
* input and output pool size. Indeed, with such decoders, you have to
* release an output buffer to get an input buffer. So, when paused and
* flushed, the DecoderThread could be waiting for an output buffer to
* be released (or rendered). In that case, the DecoderThread will
* never be flushed since it be never leave pf_decode(). To fix this
* issue, pre-flush the vout from here. The vout will have to be
* flushed again since the module could be outputting more buffers just
* after being unstuck. */
vout_FlushAll( p_owner->p_vout );
}
}
vlc_fifo_Unlock( p_owner->p_fifo );
if( !vlc_input_decoder_IsSynchronous( p_owner ) )
vlc_join( p_owner->thread, NULL );
/* */
if( p_owner->cc.b_supported )
{
......@@ -2494,6 +2465,7 @@ int vlc_input_decoder_SetCcState( vlc_input_decoder_t *p_owner, vlc_fourcc_t cod
else if( !p_ccowner->dec.p_module )
{
DecoderUnsupportedCodec( p_dec, &fmt, true );
vlc_input_decoder_Flush(p_ccowner);
vlc_input_decoder_Delete(p_ccowner);
vlc_mutex_unlock(&p_owner->cc.lock);
return VLC_EGENERIC;
......@@ -2510,7 +2482,11 @@ int vlc_input_decoder_SetCcState( vlc_input_decoder_t *p_owner, vlc_fourcc_t cod
p_owner->cc.pp_decoder[i_channel] = NULL;
if( p_cc )
{
vlc_input_decoder_Flush(p_cc);
vlc_input_decoder_Delete(p_cc);
}
}
vlc_mutex_unlock(&p_owner->cc.lock);
return VLC_SUCCESS;
......
......@@ -631,7 +631,10 @@ static void EsOutTerminate( es_out_t *out )
foreach_es_then_es_slaves(es)
{
if (es->p_dec != NULL)
{
vlc_input_decoder_Flush(es->p_dec);
vlc_input_decoder_Delete(es->p_dec);
}
EsTerminate(es);
EsRelease(es);
......@@ -832,6 +835,7 @@ static int EsOutSetRecord( es_out_t *out, bool b_record, const char *dir_path )
if( !p_es->p_dec_record )
continue;
vlc_input_decoder_Flush(p_es->p_dec_record);
vlc_input_decoder_Delete( p_es->p_dec_record );
p_es->p_dec_record = NULL;
}
......@@ -2355,6 +2359,7 @@ static void EsOutDestroyDecoder( es_out_t *out, es_out_id_t *p_es )
assert( p_es->p_pgrm );
vlc_input_decoder_Flush(p_es->p_dec);
vlc_input_decoder_Delete( p_es->p_dec );
p_es->p_dec = NULL;
if( p_es->p_pgrm->p_master_es_clock == p_es->p_clock )
......@@ -2364,6 +2369,7 @@ static void EsOutDestroyDecoder( es_out_t *out, es_out_id_t *p_es )
if( p_es->p_dec_record )
{
vlc_input_decoder_Flush(p_es->p_dec_record);
vlc_input_decoder_Delete( p_es->p_dec_record );
p_es->p_dec_record = NULL;
}
......