[vlc-devel] [PATCH 1/4] medialibrary: Use va_list for Get parameters
Hugo Beauzée-Luyssen
hugo at beauzee.fr
Tue Jun 25 16:04:52 CEST 2019
Since we soon will need something else than int64
---
include/vlc_media_library.h | 6 +++---
modules/misc/medialibrary/medialib.cpp | 13 ++++++++++---
modules/misc/medialibrary/medialibrary.h | 2 +-
src/misc/medialibrary.c | 8 ++++++--
4 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/include/vlc_media_library.h b/include/vlc_media_library.h
index 1abbf5049d..b9e7c96c24 100644
--- a/include/vlc_media_library.h
+++ b/include/vlc_media_library.h
@@ -688,13 +688,13 @@ struct vlc_medialibrary_module_t
const vlc_ml_query_params_t* p_params, va_list args );
/**
- * Get a specific entity by its id.
+ * Get a specific entity by its id or another unique value
*
* \return The required entity, or a NULL pointer if couldn't be found.
*
* Refer to the list of queries for the specific return type
*/
- void* (*pf_get)( struct vlc_medialibrary_module_t* p_ml, int i_query, int64_t i_id );
+ void* (*pf_get)( struct vlc_medialibrary_module_t* p_ml, int i_query, va_list args );
const vlc_medialibrary_callbacks_t* cbs;
};
@@ -705,7 +705,7 @@ void libvlc_MlRelease( vlc_medialibrary_t* p_ml );
VLC_API vlc_medialibrary_t* vlc_ml_instance_get( vlc_object_t* p_obj ) VLC_USED;
#define vlc_ml_instance_get(x) vlc_ml_instance_get( VLC_OBJECT(x) )
-VLC_API void* vlc_ml_get( vlc_medialibrary_t* p_ml, int i_query, int64_t i_id ) VLC_USED;
+VLC_API void* vlc_ml_get( vlc_medialibrary_t* p_ml, int i_query, ... ) VLC_USED;
VLC_API int vlc_ml_control( vlc_medialibrary_t* p_ml, int i_query, ... ) VLC_USED;
VLC_API int vlc_ml_list( vlc_medialibrary_t* p_ml, int i_query,
const vlc_ml_query_params_t* p_params, ... );
diff --git a/modules/misc/medialibrary/medialib.cpp b/modules/misc/medialibrary/medialib.cpp
index a66c0e1f09..cc96da7f82 100644
--- a/modules/misc/medialibrary/medialib.cpp
+++ b/modules/misc/medialibrary/medialib.cpp
@@ -762,7 +762,7 @@ int MediaLibrary::List( int listQuery, const vlc_ml_query_params_t* params, va_l
return VLC_SUCCESS;
}
-void* MediaLibrary::Get( int query, int64_t id )
+void* MediaLibrary::Get( int query, va_list args )
{
if ( Start() == false )
return nullptr;
@@ -771,36 +771,43 @@ void* MediaLibrary::Get( int query, int64_t id )
{
case VLC_ML_GET_MEDIA:
{
+ auto id = va_arg( args, int64_t );
auto media = m_ml->media( id );
return CreateAndConvert<vlc_ml_media_t>( media.get() );
}
case VLC_ML_GET_INPUT_ITEM:
{
+ auto id = va_arg( args, int64_t );
auto media = m_ml->media( id );
return MediaToInputItem( media.get() );
}
case VLC_ML_GET_ALBUM:
{
+ auto id = va_arg( args, int64_t );
auto album = m_ml->album( id );
return CreateAndConvert<vlc_ml_album_t>( album.get() );
}
case VLC_ML_GET_ARTIST:
{
+ auto id = va_arg( args, int64_t );
auto artist = m_ml->artist( id );
return CreateAndConvert<vlc_ml_artist_t>( artist.get() );
}
case VLC_ML_GET_GENRE:
{
+ auto id = va_arg( args, int64_t );
auto genre = m_ml->genre( id );
return CreateAndConvert<vlc_ml_genre_t>( genre.get() );
}
case VLC_ML_GET_SHOW:
{
+ auto id = va_arg( args, int64_t );
auto show = m_ml->show( id );
return CreateAndConvert<vlc_ml_show_t>( show.get() );
}
case VLC_ML_GET_PLAYLIST:
{
+ auto id = va_arg( args, int64_t );
auto playlist = m_ml->playlist( id );
return CreateAndConvert<vlc_ml_playlist_t>( playlist.get() );
}
@@ -1332,10 +1339,10 @@ int MediaLibrary::listPlaylist( int listQuery, const medialibrary::QueryParamete
}
}
-static void* Get( vlc_medialibrary_module_t* module, int query, int64_t id )
+static void* Get( vlc_medialibrary_module_t* module, int query, va_list args )
{
auto ml = static_cast<MediaLibrary*>( module->p_sys );
- return ml->Get( query, id );
+ return ml->Get( query, args );
}
static int List( vlc_medialibrary_module_t* module, int query,
diff --git a/modules/misc/medialibrary/medialibrary.h b/modules/misc/medialibrary/medialibrary.h
index ce3462874d..42cda31c35 100644
--- a/modules/misc/medialibrary/medialibrary.h
+++ b/modules/misc/medialibrary/medialibrary.h
@@ -116,7 +116,7 @@ public:
bool Start();
int Control( int query, va_list args );
int List( int query, const vlc_ml_query_params_t* params, va_list args );
- void* Get( int query, int64_t id );
+ void* Get( int query, va_list args );
private:
int controlMedia( int query, va_list args );
diff --git a/src/misc/medialibrary.c b/src/misc/medialibrary.c
index 45c86782d1..436a5b226f 100644
--- a/src/misc/medialibrary.c
+++ b/src/misc/medialibrary.c
@@ -333,10 +333,14 @@ void vlc_ml_entry_point_list_release( vlc_ml_entry_point_list_t* p_list )
free( p_list );
}
-void* vlc_ml_get( vlc_medialibrary_t* p_ml, int i_query, int64_t i_id )
+void* vlc_ml_get( vlc_medialibrary_t* p_ml, int i_query, ... )
{
assert( p_ml != NULL );
- return p_ml->m.pf_get( &p_ml->m, i_query, i_id );
+ va_list args;
+ va_start( args, i_query );
+ void* res = p_ml->m.pf_get( &p_ml->m, i_query, args );
+ va_end( args );
+ return res;
}
int vlc_ml_control( vlc_medialibrary_t* p_ml, int i_query, ... )
--
2.20.1
More information about the vlc-devel
mailing list