[vlc-devel] [PATCH 00/10] Item browsing system

Rémi Denis-Courmont remi at remlab.net
Mon May 26 12:09:05 CEST 2014

Le 2014-05-26 17:41, Julien 'Lta' BALLET a écrit :
> What do i mean by 'browsing system' ? There's two things:
>   - A new type of module: 'browse' module, whose job is to take an
>     input_item_t (and optionnaly a stream) as an input and to fill an
>     input_item_node_t as its output. Basically it's meant to read
>     folders, playlists, discovery protocol and APIs.

Unfortunately, that seems to assume that the directory object can be 
serialized. Typically, it is not, and often cannot be, e.g. a directory 
file handle coming from the filesystem access, or a node object from the 
UPnP library.

Note that input_item_t is purely (serializable) data.

>   - A (very) lightweigt clone of the input_thread_t to handle the
>     browse modules: browser_thread_t. The browser thread is 
> integrated
>     to the playlist loop, to have a consistent behavior with what
>     happens with input.

I don't see why that needs a thread in the core. It sounds like 
reproducing the design bug of the input/demux loop, which often causes 
the input thread to lock up, e.g. on Stop.

> How it works ?
>   - Browse modules have a very simple API: They expose only a
>     pf_browse function. They receive an input_item_t item to browse,
>     optionnaly a stream_t and a input_item_node_t to fill.

See above.

>   - There are two kind of browse module. access_browser and browser.
>     - access_browser are for browsing folders at a low
>       (system/protocol) level (local, ftp, smb folders).

Same problem.

>     - browser requires a stream_t and handle files/streams (API,
>       playlist files).
>   - Browsing thread looks like input_thread_t. While it carries most
>     of its looks and behavior (events, state, API), it is much much
>     simpler. He runs on it's own thread but will soon gain a
>     synchronous and simpler API for usage in UIs.
>   - Item gets a few flags (browsable/alread browsed) to handle node
>     going back and forth between input and browsing.

That seems naive. In reality, the content can change asynchronously. I 
don't think a boolean is sufficient state.

>   - When the playlist tries to play an item with the browsable flag
>     it starts a browser thread instead of an input one.

Typically, it is not not known whether a URI points to a directory or a 
file at the time the playlist starts, so that cannot work. Besides, 
there is a corner case where an URI changes from directory to file or 
vice versa.

And no, we cannot restart; that would be a massive performance 
regression (for filesystem or regular playlist files) and introduce 
functional problems.

>   - input modules (especially access) have the opportunity to mark
>     item as browsable, making the playlist retry them in the browser

See above.

>   - A rewrite of access/directory.c is included to demonstrate this.
>     A browser version of wpl playlist module is working, but needs 
> some
>     cleaning before submission.

I don't think it can work properly that way; see above.

Rémi Denis-Courmont

More information about the vlc-devel mailing list