[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