[vlc-devel] [PATCH] access: add a default pf_control for directory accesses

Rémi Denis-Courmont remi at remlab.net
Wed Jun 3 19:28:26 CEST 2015


Why inline? demux_vaControlHelper() is not inline.

(Not a huge fan of the macro either)

Le mercredi 03 juin 2015, 12:00:21 Thomas Guillem a écrit :
> ---
>  include/vlc_access.h                | 28 ++++++++++++++++++++++++++++
>  modules/access/directory.c          |  2 +-
>  modules/access/dsm/access.c         |  4 ++--
>  modules/access/ftp.c                |  2 +-
>  modules/access/sftp.c               |  2 +-
>  modules/access/smb.c                |  2 +-
>  modules/services_discovery/upnp.cpp |  2 +-
>  7 files changed, 35 insertions(+), 7 deletions(-)
> 
> diff --git a/include/vlc_access.h b/include/vlc_access.h
> index 1adf669..94c1e70 100644
> --- a/include/vlc_access.h
> +++ b/include/vlc_access.h
> @@ -186,6 +186,34 @@ VLC_API input_thread_t * access_GetParentInput(
> access_t *p_access ) VLC_USED; if( !p_sys ) return VLC_ENOMEM; \
>      } while(0);
> 
> +static inline int DirectoryControl( access_t *p_access, int i_query,
> +                                    va_list args )
> +{
> +    VLC_UNUSED( p_access );
> +
> +    switch( i_query )
> +    {
> +        case ACCESS_CAN_SEEK:
> +        case ACCESS_CAN_FASTSEEK:
> +        case ACCESS_CAN_PAUSE:
> +        case ACCESS_CAN_CONTROL_PACE:
> +            *va_arg( args, bool* ) = false;
> +            break;
> +        case ACCESS_GET_PTS_DELAY:
> +            *va_arg( args, int64_t * ) = 0;
> +            break;
> +        default:
> +            return VLC_EGENERIC;
> +     }
> +     return VLC_SUCCESS;
> +}
> +
> +#define ACCESS_SET_DIRECTORY_CALLBACK( readdir ) \
> +    do { \
> +        p_access->pf_readdir = readdir; \
> +        p_access->pf_control = DirectoryControl; \
> +    } while(0)
> +
>  /**
>   * @}
>   */
> diff --git a/modules/access/directory.c b/modules/access/directory.c
> index 87b5b33..5814b78 100644
> --- a/modules/access/directory.c
> +++ b/modules/access/directory.c
> @@ -92,7 +92,7 @@ int DirOpen (vlc_object_t *p_this)
>      }
>      p_access->p_sys->p_dir = p_dir;
>      p_access->p_sys->psz_base_uri = psz_base_uri;
> -    p_access->pf_readdir = DirRead;
> +    ACCESS_SET_DIRECTORY_CALLBACK( DirRead );
> 
>      return VLC_SUCCESS;
>  }
> diff --git a/modules/access/dsm/access.c b/modules/access/dsm/access.c
> index 8e7fcdd..1b2d6ce 100644
> --- a/modules/access/dsm/access.c
> +++ b/modules/access/dsm/access.c
> @@ -699,10 +699,10 @@ static int BrowserInit( access_t *p_access )
>      access_sys_t *p_sys = p_access->p_sys;
> 
>      if( p_sys->psz_share == NULL )
> -        p_access->pf_readdir = BrowseShare;
> +        ACCESS_SET_DIRECTORY_CALLBACK( BrowseShare );
>      else
>      {
> -        p_access->pf_readdir = BrowseDirectory;
> +        ACCESS_SET_DIRECTORY_CALLBACK( BrowseDirectory );
>          p_access->info.b_dir_can_loop = true;
>      }
> 
> diff --git a/modules/access/ftp.c b/modules/access/ftp.c
> index 096d54c..9642a06 100644
> --- a/modules/access/ftp.c
> +++ b/modules/access/ftp.c
> @@ -667,7 +667,7 @@ static int InOpen( vlc_object_t *p_this )
> 
>      if( b_directory )
>      {
> -        p_access->pf_readdir = DirRead;
> +        ACCESS_SET_DIRECTORY_CALLBACK( DirRead );
>          p_access->info.b_dir_can_loop = true;
>      } else
>          ACCESS_SET_CALLBACKS( Read, NULL, Control, Seek ); \
> diff --git a/modules/access/sftp.c b/modules/access/sftp.c
> index 740da6b..7d2e913 100644
> --- a/modules/access/sftp.c
> +++ b/modules/access/sftp.c
> @@ -295,7 +295,7 @@ static int Open( vlc_object_t* p_this )
>          /* Open the given directory */
>          p_sys->file = libssh2_sftp_opendir( p_sys->sftp_session, psz_path
> );
> 
> -        p_access->pf_readdir = DirRead;
> +        ACCESS_SET_DIRECTORY_CALLBACK( DirRead );
>          p_access->info.b_dir_can_loop = true;
> 
>          if( p_sys->file )
> diff --git a/modules/access/smb.c b/modules/access/smb.c
> index 3aa9902..e3cca52 100644
> --- a/modules/access/smb.c
> +++ b/modules/access/smb.c
> @@ -252,7 +252,7 @@ static int Open( vlc_object_t *p_this )
>  #ifdef _WIN32
>          return VLC_EGENERIC;
>  #else
> -        p_access->pf_readdir = DirRead;
> +        ACCESS_SET_DIRECTORY_CALLBACK( DirRead );
>          p_access->info.b_dir_can_loop = true;
>          i_smb = smbc_opendir( psz_uri );
>          i_size = 0;
> diff --git a/modules/services_discovery/upnp.cpp
> b/modules/services_discovery/upnp.cpp index 4f5aaf8..4dbd619 100644
> --- a/modules/services_discovery/upnp.cpp
> +++ b/modules/services_discovery/upnp.cpp
> @@ -838,7 +838,7 @@ static int Open( vlc_object_t *p_this )
>          return VLC_EGENERIC;
>      }
> 
> -    p_access->pf_readdir = ReadDirectory;
> +    ACCESS_SET_DIRECTORY_CALLBACK( ReadDirectory );
>      p_access->info.b_dir_sorted = true;
>      p_access->info.b_dir_can_loop = true;

-- 
Rémi Denis-Courmont
Remlab T:mi
http://www.remlab.net/




More information about the vlc-devel mailing list