API: - MAKE A DOCUMENT THAT LISTS ALL API CHANGES AND HOW TO DEAL WITH THEM - GstElementState should be a real enum, not something that looks like flags changing state can be done with ++ and -- instead of >> and << - replace object/structure set/get macros with actual functions. - events should all use GstStructure - reorganize headers (split app headers vs plugin headers maybe) while at it also make sure to only allow including of the main headers like glib, so we can freely shuffle stuff around - make GstPadLinkReturn internal (to either plugins+core or just core) and return gboolean to apps. - rewrite GstIndex (it's gross) - gst_init() et al. need to work correctly when called multiple times and from libraries, etc. - gst_pad_get_pad_template_caps -> gst_pad_get_template_caps() - make templates mandatory for pads. - force pads to use a pad template from the element they belong to. - s/PadTemplate/PadFactory/ to describe better what it is and be more in line with the rest of the API? - add ways for autopluggers to manage negotiation of their children. This would allow autopluggers to no longer need helper identities. (Though the main reason for identities atm is to be able to connect without plugging - Company) - remove float support from dparams - dparams: should be converted into some kind of special pad and object property combination. - remove gst_element_yield() - read/write locks on buffers - be able to send events to unlinked pads (bug #114442) - caps should have a flag on fields to indicate that the field is optional - remove gst_pad_select() and add gst_pad_pull_many(), which pulls one buffer from one of many pads - deprecate gst_buffer_merge() and replace with a function that takes ownership of the buffers. (bug #136408) - fakesrc handoff should be changed to return a GstData * or carry a GstData **, wo the user can provide own buffers and events. - remove GST_OBJECT_DESTROYED() - fix plugin code to load plugins with RTLD_LOCAL - don't install gstmarshal.h - make GstPad and friends a real class heirarchy - make GstBuffer/GstData a real class heirarchy, although maybe not as a subclass of GObject. - remove unnecessary headers from gst.h (gstqueue.h in particular) - make sure GstClockTime is used wherever it should (e.g. gstplay) - make gst_bin_get_list virtual so subclasses can override it (e.g. gst-play which contains an internal thread not inside the bin that is gstplay) - make gst_bin_get_by_interface search on the list provided by this get_list so that you can search a GstPlay for an element implementing the interface (right now gstplay has added a gst_play_get_by_interface) - make multichannel properties on audio caps manditory - talk to vektor about various wierdness with NTSC video (combinations of 24 fps pulled down to 60 and straight video, etc) and make sure our video stream descriptions make sense. - rename GST_TYPE_FIXED_LIST to GST_TYPE_ARRAY - remove GstMemChunk - remove GST_FORMATS_FUNCTION(). It doesn't work with non-c99 compilers. caps: (Company:) "An idea I had once was to force registration of mimetypes and then only allow caps with a registered mimetype - like it's done now with caps. You could then add functions to those registrations like - gchar *get_human_readable_string (caps); should be kinda selfexplanatory. Would return stuff like "16bit signed integer audio", "MPEG2 video" or "video format in RGB colorspace" (for unfixed RGB) - GstCaps *default_fixate (const GstCaps *caps); A default fixation function, so we don't fixate to minimum integer anymore but have the ability to fixate to 320x240 for video or 44100 for audio rates - gboolean validate (const GstCaps *caps); check if the given caps are ok for this mimetype - debugging only function I'd _really_ like to have - especially during gst_register. But that's 0.10 material." (Thaytan) - Add rowstride as a property so that video frames don't have to have rowstride == width. For example, gdkpixbufdec would prefer to pad rowstrides to multiples of 4 bytes. negotiation: - autopluggers would be easier to write if there was a core method to do what plugidentities do. - there should be a way to hook into negotiation and be able to do something if negotiation fails. Autopluggers would need that for exchanging elements when they can't link. bugs with interesting info: XML descriptions of plugin information: http://bugzilla.gnome.org/show_bug.cgi?id=114216 object hierarchy: - state_change in GstElementClass should be renamed to state_changed, since it's a signal triggered after state has changed - a method for elements to know when downstream elements are ignoring the data stream. This would allow automatic shutoff of pipelines whose processing is being dumped. - object properties: - all bitrates should be bits per second, since they're specified as integers - categorization of plugins: - categories were intended from the start as a list of keywords, instead of an implicit tree. - this makes a lot more sense and probably fixes our constant discussion about categorizing - make this explicit by having a list of keywords instead of a fixed string with slashes - fix the editor/el browser to display this nicely - optimization: - delay parsing caps from the registry until after startup (until they're first requested or maybe an idle handler for the main loop)