1 /* GSequencer - Advanced GTK Sequencer 2 * Copyright (C) 2005-2019 Joël Krähemann 3 * 4 * This file is part of GSequencer. 5 * 6 * GSequencer is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * GSequencer is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with GSequencer. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 #ifndef __AGS_LV2_OPTION_MANAGER_H__ 21 #define __AGS_LV2_OPTION_MANAGER_H__ 22 23 #include <glib.h> 24 #include <glib-object.h> 25 26 #include <ags/libags.h> 27 28 #include <lv2.h> 29 #include <lv2/lv2plug.in/ns/ext/options/options.h> 30 31 G_BEGIN_DECLS 32 33 #define AGS_TYPE_LV2_OPTION_MANAGER (ags_lv2_option_manager_get_type()) 34 #define AGS_LV2_OPTION_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_LV2_OPTION_MANAGER, AgsLv2OptionManager)) 35 #define AGS_LV2_OPTION_MANAGER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_LV2_OPTION_MANAGER, AgsLv2OptionManagerClass)) 36 #define AGS_IS_LV2_OPTION_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_LV2_OPTION_MANAGER)) 37 #define AGS_IS_LV2_OPTION_MANAGER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_LV2_OPTION_MANAGER)) 38 #define AGS_LV2_OPTION_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_LV2_OPTION_MANAGER, AgsLv2OptionManagerClass)) 39 40 #define AGS_LV2_OPTION_MANAGER_GET_OBJ_MUTEX(obj) (&(((AgsLv2OptionManager *) obj)->obj_mutex)) 41 42 #define AGS_LV2_OPTION_RESSOURCE(ptr) ((AgsLv2OptionRessource *)(ptr)) 43 #define AGS_LV2_OPTIONS_OPTION(ptr) ((LV2_Options_Option *)(ptr)) 44 45 typedef struct _AgsLv2OptionManager AgsLv2OptionManager; 46 typedef struct _AgsLv2OptionManagerClass AgsLv2OptionManagerClass; 47 typedef struct _AgsLv2OptionRessource AgsLv2OptionRessource; 48 49 struct _AgsLv2OptionManager 50 { 51 GObject gobject; 52 53 GRecMutex obj_mutex; 54 55 GHashTable *ressource; 56 }; 57 58 struct _AgsLv2OptionManagerClass 59 { 60 GObjectClass gobject; 61 62 void (*get_option)(AgsLv2OptionManager *lv2_option_manager, 63 gpointer instance, 64 gpointer option, 65 gpointer retval); 66 void (*set_option)(AgsLv2OptionManager *lv2_option_manager, 67 gpointer instance, 68 gpointer option, 69 gpointer retval); 70 }; 71 72 struct _AgsLv2OptionRessource{ 73 LV2_Handle instance; 74 LV2_Options_Option *option; 75 }; 76 77 GType ags_lv2_option_manager_get_type(void); 78 79 /* option ressource */ 80 AgsLv2OptionRessource* ags_lv2_option_ressource_alloc(); 81 82 gboolean ags_lv2_option_manager_ressource_insert(AgsLv2OptionManager *lv2_option_manager, 83 AgsLv2OptionRessource *lv2_option_ressource, gpointer data); 84 gboolean ags_lv2_option_manager_ressource_remove(AgsLv2OptionManager *lv2_option_manager, 85 AgsLv2OptionRessource *lv2_option_ressource); 86 87 gpointer ags_lv2_option_manager_ressource_lookup(AgsLv2OptionManager *lv2_option_manager, 88 AgsLv2OptionRessource *lv2_option_ressource); 89 gboolean ags_lv2_option_manager_ressource_lookup_extended(AgsLv2OptionManager *lv2_option_manager, 90 AgsLv2OptionRessource *lv2_option_ressource, 91 gpointer *orig_key, gpointer *value); 92 93 /* get and set option */ 94 void ags_lv2_option_manager_get_option(AgsLv2OptionManager *lv2_option_manager, 95 gpointer instance, 96 gpointer option, 97 gpointer retval); 98 void ags_lv2_option_manager_set_option(AgsLv2OptionManager *lv2_option_manager, 99 gpointer instance, 100 gpointer option, 101 gpointer retval); 102 103 /* the lv2 interface */ 104 uint32_t ags_lv2_option_manager_lv2_options_get(LV2_Handle instance, 105 LV2_Options_Option *options); 106 uint32_t ags_lv2_option_manager_lv2_options_set(LV2_Handle instance, 107 LV2_Options_Option *options); 108 109 /* */ 110 AgsLv2OptionManager* ags_lv2_option_manager_get_instance(); 111 AgsLv2OptionManager* ags_lv2_option_manager_new(); 112 113 G_END_DECLS 114 115 #endif /*__AGS_LV2_OPTION_MANAGER_H__*/ 116