added some thoughts about scheduler doing a little profiling on elements
[platform/upstream/gstreamer.git] / docs / random / ensonic / interfaces.txt
1 $Id$
2
3 * existing gstreamer interfaces
4   ./gstreamer/gst/gsttaginterface.c
5   ./gstreamer/gst/gstinterface.c
6   ./gstreamer/gst/gsturi.c
7   ./gst-plugins/gst-libs/gst/propertyprobe/propertyprobe.c
8   ./gst-plugins/gst-libs/gst/mixer/mixer.c
9   ./gst-plugins/gst-libs/gst/tuner/tuner.c
10   ./gst-plugins/gst-libs/gst/xoverlay/xoverlay.c
11   ./gst-plugins/gst-libs/gst/colorbalance/colorbalance.c
12   ./gst-plugins/gst-libs/gst/navigation/navigation.c
13 * new general interfaces
14   * GST_TYPE_PRESET_MANAGER
15     - add preset managment
16     - API:
17       GList *get_presets();
18       void activate_preset_by_index(glong index);
19       void activate_preset_by_name(const gchar *name);
20       void add_current(const gchar *name);
21       void remove_preset_by_index(glong index);
22       void remove_preset_by_name(const gchar *name);
23     - features
24       - there should always be a default preset
25     - questions
26       - were and how do we store the presets?
27
28   * GST_TYPE_UI_HINT
29     - add hints to generate 'good' looking interfaces to elements
30     - API:
31       GList *get_group_list();
32       struct ui_hint_group {
33         gchar *label;
34         gachr *role;
35         GList *entries;
36       }
37       struct ui_hint_group_entry {
38         enum UiHintGroupEntryType type={PARAM,DPARAM};
39         gchar *name;
40       }
41       roles {
42         /* graphics */
43         "color_selection/rgb",
44         "color_selection/hsv",
45         "aspect_ratio",
46         /* audio */
47         "envelope/adsr",
48       }
49     - features
50       - grouping of parameters, each group has:
51         - a label: giving a title to the group
52         - a role:
53           - this can give the UI a hint about the purpose of the controls
54           - this only makes sense, if we dont make this a thousand templates
55         - a list of dparams or properties
56     - question
57       - should this be aware of instruments (voice-groups)
58         - no, instruments should auto-generate those
59   * GST_TYPE_QUALITY_VS_SPEED
60     - get the name of a property that can be used to switch between
61       - a fast version for e.g. realtime usage
62       - a slower version with higher precission that can be used for off-line
63         rendering
64 * new interfaces for audio applications
65   * GST_TYPE_MULTI_VOICE
66     - control interface for elements that support multiple voices (in one output-pad)
67     - API:
68       gulong number_of_voices;
69       void add_voice();
70       void remove_last_voice();
71       gulong get_number_of_voices();
72     - features
73       - plugin will initially have one voice and that one can not be deleted
74   * GST_TYPE_MUSIC_GENERATOR
75     - add hints so that application can use a element as an instrument
76     - API:
77       // param types
78       DParam *get_note_dparam();
79       GList *get_trigger_dparams();
80       // -- or
81       DParamType get_dparam_type(DParam *);
82       dparamtype = { NOTE, TRIGGER, OTHER }
83       // voices
84       char *get_number_of_voices_property();
85       GList *get_global_param_names();
86       GList *get_voice_param_names();
87     - features
88       - find out which params to use to play notes/trigger sounds
89         - these params will not appear in a control-ui
90         - notes involve a key to frequency translation
91       - find out if the element has a number_of_voices property
92         - if yes, we can find out about the max by looking at the gparamspec
93         - setting the property, adds/removes voices
94         - if the element supports it, it needs to:
95           - register voice-dparams as e.g. note_XXX, where XXX is the voice-number
96           - run the voice-loop in the chain/loop function
97             each voice processes the same input, if at all
98             the outputs of all voices are mixed together
99