[vlc-devel] [V1 PATCH] RFC: add vlc_player_t (input manager)

Thomas Guillem thomas at gllm.fr
Mon Sep 3 09:53:43 CEST 2018



On Mon, Sep 3, 2018, at 09:53, Thomas Guillem wrote:
> 
> 
> On Sat, Sep 1, 2018, at 11:11, Rémi Denis-Courmont wrote:
> > Le perjantaina 31. elokuuta 2018, 18.53.07 EEST Thomas Guillem a écrit :
> > > All controls of the player are asynchronous, even vlc_player_Stop(). I saw
> > > too many hacks in VLC ports for stopping the player, they generally spawn a
> > > detached thread that will stop it.
> > 
> > There should be a way to request stop without blocking the UI thread, in other 
> > words without actually waiting for stop. You can add an asynchronous 
> > libvlc_media_player_stop_request() if you want.
> 
> In that case, is the the next start delayed until the stop is done ? I 
> guess yes.
> 
> > 
> > But the application will still need to wait eventually, not only when it 
> > destroys the player, but also if it changes player settings or backing 
> > resources. If it creates a detached thread to side step the issue, the 
> > application is broken, and LibVLC is not in a position to fix it.
> > 
> > Designing for broken-by-design applications does not strike me as a good idea.
> > 
> > > Indeed, input_Close() is blocking, it
> > > wait for the input thread to be terminated. This should be instantaneous
> > > for basic remote accesses that handle vlc_interrupt. But what do we do for
> > > remote accesses that need a teardown of local accesses (yes, it's really
> > > easy to block on a USB drive) ?
> > 
> > We wait because the next input might contend for the same resources as the 
> > current one, and thus needs to be opened after the current one is closed.
> > 
> > The case of a stuck filesystem is not something you can fix in VLC. It is an 
> > OS issue that your application can do literally nothing about.
> 
> I know that, that's why I proposed the asynchronous stop.
> 
> > 
> > Currently, the playlist thread waits between inputs, and going forward the 
> > input manager will still have to strictly sequence input threads. Otherwise, 
> > there will be no ends of use-after-free, resource contention and/or other race 
> > condition bugs.
> 
> Good point
> 
> > 
> > > My proposal is the destructor struct from player.c. When the user need to
> > > stop a playback, the player will prevent input events forwarding, call
> > > input_Stop() and won't wait for the input thread termination. Instead, when
> > > the INPUT_EVENT_DEAD event will be received, the input_thread_t instance
> > > will be passed to the destructor thread that will join it.
> > 
> > libvlc_media_player_stop() has to wait for stop to complete, since that is the 
> > documented and only supported way to release underlying media player resources 
> > in orderly fashion. So there must be a way to support 
> > libvlc_media_player_stop() releasing resources without destroying the media 
> > player.
> 
> libvlc_media_player can't play several medias, and chain start/stop. 
> That's what I want to do for the code player too.

Typo: It *can*

> 
> To sum up, I'll add vlc_player_StopAsync().
> I guess that the next Start (that is always asynchronous) will wait for 
> the stop to finish.
> 
> > 
> > -- 
> > Реми Дёни-Курмон
> > http://www.remlab.net/
> > 
> > 
> > 
> > _______________________________________________
> > vlc-devel mailing list
> > To unsubscribe or modify your subscription options:
> > https://mailman.videolan.org/listinfo/vlc-devel
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list