[vlc-devel] [PATCHv2 01/13] access: re-refactor pf_readdir

Thomas Guillem thomas at gllm.fr
Fri May 13 10:14:59 CEST 2016



On Thu, May 5, 2016, at 12:04, Rémi Denis-Courmont wrote:
> On Tuesday 03 May 2016 19:02:28 Thomas Guillem wrote:
> > This commit changes pf_readdir callback to its original behavior. Accesses
> > and streams now add items to a node.
> > 
> > Archive stream_filters will now be able to add nodes to a node (when an
> > archive has directory). This was not possible before.
> > 
> > This commit also adds an access_fsdir helper to help fs accesses (file, smb,
> > nfs, ftp, sftp) adding items to a node. These accesses need the same
> > treatment that is now done by this helper:
> >  - hide hidden files or not (depending on "show-hiddenfiles" option)
> >  - skip some file extensions (depending on "ignore-filetypes" option)
> >  - sort items by type and alphabetically (depending on "directory-sort"
> >    option).
> >  - For a next commit: attach slaves to items
> > 
> > The directory demux won't do these operations anymore for every
> > access/stream.
> > 
> > This commit doesn't change the interruptible state of the pf_readdir
> > function, accesses/streams are still interruptible in the middle of a
> > pf_readdir call.
> > 
> > This partially reverts commit 88ffe1587824c27f35705ee28e607f80ca335b46.
> > ---
> >  include/vlc_access.h                |  57 +++++++++++++--
> >  include/vlc_stream.h                |   6 +-
> >  modules/access/archive/stream.c     |  25 ++++---
> >  modules/access/directory.c          |  39 ++++++----
> >  modules/access/dsm/access.c         | 119 +++++++++++++++---------------
> >  modules/access/fs.h                 |   3 +-
> >  modules/access/ftp.c                |  57 ++++++++-------
> >  modules/access/nfs.c                |  71 ++++++++++--------
> >  modules/access/sftp.c               |  38 +++++-----
> >  modules/access/smb.c                |  31 ++++----
> >  modules/demux/playlist/directory.c  | 137
> > ++--------------------------------- modules/services_discovery/upnp.cpp |
> > 112 ++++++++++++----------------- modules/services_discovery/upnp.hpp |  14
> > ++--
> >  modules/stream_filter/inflate.c     |   6 +-
> >  modules/stream_filter/prefetch.c    |   6 +-
> >  src/input/access.c                  | 140
> > ++++++++++++++++++++++++++++++++++-- src/input/stream.c                  | 
> >  9 ++-
> >  src/input/stream_filter.c           |   4 +-
> >  src/libvlccore.sym                  |   3 +
> >  19 files changed, 469 insertions(+), 408 deletions(-)
> > 
> > diff --git a/include/vlc_access.h b/include/vlc_access.h
> > index 4578734..ff734eb 100644
> > --- a/include/vlc_access.h
> > +++ b/include/vlc_access.h
> > @@ -88,11 +88,7 @@ struct access_t
> >       * XXX A access should set one and only one of them */
> >      ssize_t     (*pf_read)   ( access_t *, uint8_t *, size_t );  /* Return
> > -1 if no data yet, 0 if no more data, else real data read */ block_t   
> > *(*pf_block)  ( access_t * );                     /* Return a block of data
> > in his 'natural' size, NULL if not yet data or eof */ -
> > -    /* pf_readdir: Read the next input_item_t from the directory stream. It
> > -     * returns the next input item on success or NULL in case of error or
> > end -     * of stream. The item must be released with input_item_Release.
> > */ -    input_item_t *(*pf_readdir)( access_t * );
> > +    int         (*pf_readdir)( access_t *, input_item_node_t * );/* Fills
> > the provided item_node, see doc/browsing.txt for details */
> > 
> >      /* Called for each seek.
> >       * XXX can be null */
> > @@ -239,6 +235,11 @@ static inline void access_InitFields( access_t *p_a )
> >  }
> > 
> >  /**
> > + * \defgroup access_helper Access Helpers
> > + * @{
> > + */
> > +
> > +/**
> >   * Default pf_control callback for directory accesses.
> >   */
> >  VLC_API int access_vaDirectoryControlHelper( access_t *p_access, int
> > i_query, va_list args ); @@ -268,7 +269,51 @@ VLC_API int
> > access_vaDirectoryControlHelper( access_t *p_access, int i_query, va }
> > while(0);
> > 
> >  /**
> > - * @}
> > + * Access pf_readdir helper struct
> > + * \see access_fsdir_init()
> > + * \see access_fsdir_additem()
> > + * \see access_fsdir_finish()
> > + */
> > +struct access_fsdir
> > +{
> > +    access_t *p_access;
> 
> Do you need this pointer? It limits the re-usability of the code, IMO.

Just for Vars. I could also use a vlc_object_t or get all var at init.

> 
> -- 
> Rémi Denis-Courmont
> http://www.remlab.net/
> 
> _______________________________________________
> 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