Browse Source

demux: adaptive: start buffering on demux only

Because of race condition in Init(), the es_out isn't set up
between demux pf_open() & pf_demux() calls and ES selection is
then totally impossible.
Randomly broke streams depending on thread speed & buffering.
pull/91/head
Francois Cartegnie 7 years ago
parent
commit
e0d303ebbb
  1. 17
      modules/demux/adaptive/PlaylistManager.cpp
  2. 2
      modules/demux/adaptive/PlaylistManager.h
  3. 2
      modules/demux/adaptive/adaptive.cpp

17
modules/demux/adaptive/PlaylistManager.cpp

@ -142,7 +142,7 @@ bool PlaylistManager::setupPeriod()
return true;
}
bool PlaylistManager::start()
bool PlaylistManager::init()
{
if(!conManager &&
!(conManager =
@ -160,6 +160,14 @@ bool PlaylistManager::start()
updateControlsContentType();
updateControlsPosition();
return true;
}
bool PlaylistManager::start()
{
if(b_thread || !conManager)
return false;
b_thread = !vlc_clone(&thread, managerThread,
static_cast<void *>(this), VLC_THREAD_PRIORITY_INPUT);
if(!b_thread)
@ -170,6 +178,11 @@ bool PlaylistManager::start()
return true;
}
bool PlaylistManager::started() const
{
return b_thread;
}
void PlaylistManager::stop()
{
if(b_thread)
@ -401,6 +414,8 @@ bool PlaylistManager::reactivateStream(AbstractStream *stream)
int PlaylistManager::demux_callback(demux_t *p_demux)
{
PlaylistManager *manager = reinterpret_cast<PlaylistManager *>(p_demux->p_sys);
if(!manager->started() && !manager->start())
return VLC_DEMUXER_EOF;
return manager->doDemux(DEMUX_INCREMENT);
}

2
modules/demux/adaptive/PlaylistManager.h

@ -52,7 +52,9 @@ namespace adaptive
AbstractAdaptationLogic::LogicType type );
virtual ~PlaylistManager ();
bool init();
bool start();
bool started() const;
void stop();
AbstractStream::buffering_status bufferize(vlc_tick_t, vlc_tick_t, vlc_tick_t);

2
modules/demux/adaptive/adaptive.cpp

@ -223,7 +223,7 @@ static int Open(vlc_object_t *p_obj)
}
}
if(!p_manager || !p_manager->start())
if(!p_manager || !p_manager->init())
{
delete p_manager;
return VLC_EGENERIC;

Loading…
Cancel
Save