Original commit message from CVS:
This patch (nearly) completes the removal of vertical events from the
core.
What it does:
- removal of the EVENT signal of GstElement (to be replaced by
g_object_notify)
- changing of the ERROR signal to allow recursive notification (like
deep_notify)
- implementing recursive notification with error events.
- removal of some functions in gstbin.c that are not used anymore.
- The function gst_element_info and gst_element_send_event now do
nothing but printing a warning, that these functions are gone. This is
done to allow plugins to catch up.
- Some bugfixes in XML saving are included, they simply were in the
file.
Original commit message from CVS:
Added a first stab at a better clocking system.
It still needs more infrastructure for async notification and custom clock
implementors.
This thing can still deadlock the pipeline.
Original commit message from CVS:
Delay pad negotiation until the element is in READY or higher. this will
gice the element a chance to open its devices before we start calling the
connect functions.
Make sure we use the real pad in the negotiation.
Some other small cleanups.
Original commit message from CVS:
Landed the new improved capsnegotiation system.
The main idea is to keep track of the possible data types that can
pass through a connection. plugins can at any time inspect, adjust and
refine these caps. plugins also get notified when something changes to
the types so that they can reconfigure themselves.
Look at the updated plugins and the soon to be finished doc.
Original commit message from CVS:
summary: fix xml in gstreamer
1) make clear distinction between loading xml that actually creates objects and loading xml that just
synchronizes properties with objects. moved most of gst_element_restore_thyself functionality to
gst_xml_make_element. this new function name can change if it sucks.
2) many various fixes. createxml and runxml work now.
3) doc updates.
4) GstSignalObject is stil broken. i have no idea what it's supposed to do.
Original commit message from CVS:
- Removed deprecated buffer flags.
- removed gst_element_signal_eos, replaced with gst_element_set_eos
to set the object to PAUSED, signal an eos event etc..
- small updates to documentation
- repair some plugins
Original commit message from CVS:
- Added a function to get the currently executing cothread
- Removed some useless includes
- _interrupt now returns a boolean so the behaviour after the interrupt
can be controlled by the scheduler.
- Added a better way to set/get the default scheduler.
- make thread and pipeline get the default scheduler.
Original commit message from CVS:
Tee Fixes.
added cothread_stop (not used)
improved the pad event dispatcher.
added an event_received signal on the pad.
do less state changes in the autoplugger.
small scheduler fix.
Original commit message from CVS:
This is an attempt at not segfaulting on errors but reporting some
usefull info instead.
- bin changes so errors can propagate.
- changed the _FAST macros to _CAST because that is what they do.
- removed all references to cothreads out of the core, they are
really a scheduler issue, handler with a sched_private gpointer.
- added a live buffer count, for debugging buffer leaks.
- added error checking in gst_scheduler_state_transition this solves the
"out of cothreads" problem.
- GST_ELEMENT_NO_ENTRY == GST_ELEMENT_INFINITE_LOOP
- added 2 private element flasg for use by the scheduler
(_COTHREAD_STOPPING) is now
- added scheduler entry points:
- _yield : to create possible scheduling points.
- _interrupt: to stop execution of an element.
- _error: to signal en error condition to the scheduler.
- improved error messages for pads.
- signal gst_element_error where appropriate.
- added the a new bin to the parent before entering it so one can reference
its children.
- queue memleak fixes on dispose.
- added possible deadlock detection in queue (turned off be default)
- GstBasicScheduler is a real class of its own now, hiding its internal
variables.
- GST_ELEMENT_IS_COTHREAD_STOPPING is gone. either call explicit _yield
operations, or make a sane loop.
- Better state change handling in filesrc. Better error reporting/recovery
too.
- updated core plugins.
- detect non decoupled elements on scheduler boundries and error.
Original commit message from CVS:
- Reclaim cothread state even if the cothread was never activated after
the free.
- fix the bin state change when there are no more children.
- use a real method to signal the parent bin of a state change.
- move the state change policy in the scheduler.
- remove the unused and ridiculous state change event
- don't free the cothread state when the element is disabled. only free it
when the element is removed from the scheduler.
Original commit message from CVS:
cothread cleanup.
- removed some old code.
- ran the thing through indent
- rename cothread_init/free to cothread_context_init/free
- implement cothread_free/destroy to clear the cothread_state slot
- make cothread_init reuse empty slots.
minor cleanups in error reporting (gstpad, gstelement)
code cleanup in gstthread
make unexpected state changes in gstthread less fatal
free the cothread_state in the scheduler.
This one passes all the current cvs testcases including dynamic-pipeline.
Original commit message from CVS:
- Elements can now send events to their parent.
- remove the g_signals from the core for parent<->child communication
- the application can easily get element info by listening for an event
signal from the toplevel bin.
- added gst_element_info()/_error().
- fakesrc and fakesink use the info event instead of g_print.
- GST_TYPE_* causes segfaults with elect fence, rever to G_TYPE_POINTER
until we know what's wrong.
- various leaks fixed wrt element destroy.
- The object that created the event is now stored as GST_EVENT_SRC
Original commit message from CVS:
2001-12-14 Michael Meeks <michael@ximian.com>
* gst/gst.c (gst_main, gst_main_quit): upd.
* gst/gstutils.c (gst_util_has_arg): impl.
(gst_util_get_int64_arg): impl.
* plugins/mpeg2/video/gstmpeg2play.c
(gst_mpeg2play_class_init): min frames per sec = 0.
* plugins/mikmod/gstmikmod.c (gst_mikmod_class_init):
s/16bit/use16bit/ properties can't begin with a non
alpha.
* tools/gstreamer-guilaunch.c: fresh from the ministy
of nasty hacks.
* tools/Makefile.am: enable gstreamer-guilaunch for
Gnome 2.0
* tools/gstreamer-launch.c (main): upd.
(idle_func): quit the mainloop.
Original commit message from CVS:
- added playondemand plugin by Leif Morgan Johnson <lmjohns3@eos.ncsu.edu>
- some fixes to int2float
- aplied a patch from wrobell <wrobell@ite.pl> that is a first attempt at
making automake 1.5 happy (gst now requires automake1.5). It's still not
perfect but it builds.
- Made the schedulers plugable. The default scheduler now lives inside a
plugin.
- Added a new mpeg1/2 parser/demuxer.
- Fixed some compiler warnings in the core libs.
- substantial work to GstThread (hopefully less race conditions). simplified
the code in GstThread a bit. A state change can now also happen in the
thread context.
- reworked the state semantics of a bin. it'll now automatically get the
highest state of its children.
- the autoplugger now nests the threads so that a state change failure of
one thread doesn't make its upstream thread lock.
- GstQueue refuses to go to PLAYING if the sinkpad is not connected. This
way the queue will not wedge in the _get lock.
- GstQueue unlocks its mutexes when going to PAUSED.
- make sure that when all elements in a bin/thread go to PAUSED, the bin
is set to PAUSED too.
- make a parent bin wait for its children to PAUSE before ending the
iteration with FALSE (EOS)
- Some changes to GstPlay to deal with EOS.
- aplied the latest patch from Zeenix to gstrtp.
end result: GstPlay doesn't crash on EOS and the pipeline is now shut down
properly.
Original commit message from CVS:
API docs.
revived _buffer_ref_by_count
fast types for scheduler and bin.
error checking on plugin features;
removed some prototypes that were not implemented (gst_pipeline_iterate
comes to mind)
remove gst_pad_event until we know what it's supposed to do.
remove sinesrc, it wasn't compiles anymore, so...
updates to various elements that used the old event API.
Original commit message from CVS:
1. Add more warnings for the gst core only. Various trival fixes
to quiet the warnings.
2. Fix GstBufferCopyFunc prototype.
3. Re-apply the reverted type!=0 assertion in gst_elementfactory_new.
Original commit message from CVS:
Lots of modifications to the plugin system.
- Added a GstPluginfeature object that serves as a base class for all
plugin contents.
- changed the plugin API, everyhting is now added with
gst_plugin_add_feature
- typefactories are named now so that they can be located easily and filled
in at plugin load.
- mime types like "video/raw image/raw" are gone for now.
- lots of plugin updates (style and API changes)
- tested with an without registry.
- updates to various tools.
- added a little testsuite to test/show how you can load plugins (4 modes)
Test this one, Almost everything has changed :-)
Original commit message from CVS:
Aplied the patch from Andy Wingo <apwingo@eos.ncsu.edu> add padtemplates
to element classes without using an elementfactory.
The gst_element_add_padtemplate_to_class method was renamed to
gst_element_class_add_padtemplate to better match glib/gtk conventions.
Original commit message from CVS:
gobject2gtk.h: added g2g_object_get_type() prototype
gst.c: fixed gst_add_paths_func() prototype
gstelement.c: changed some prototypes, added a cast
Original commit message from CVS:
Reworked the arguments for DEBUG and INFO. Removed -debug-verbose.
Renamed GST_DISABLE_XML to GST_DISABLE_LOADSAVE and added --disable flag.
Original commit message from CVS:
Changed a stupid assert in request_pad.
Some fixes for pullregion and EOS conditions.
Remove an unneeded check in the scheduler (check for NULL buffer)
some EOS fixes for pullregion in disksrc.
Removed the macro in the gstparse.h header 'cause it's internal to gstparse.c
Added a check in gstparse for NULL element.
Original commit message from CVS:
Added a utility function in gstutils to set an object argument as a
string. gstparse.c and gstelement.c now use this function.
Original commit message from CVS:
Added a first attempt for XML embedding in the main core XML.
Objects will emit a signal that a user app can connect to in order to
insert its XML into the tree.
You can catch the object_loaded signal in GstXML to parse the user
supplied XML data in the stream. The object_loaded signal is implemented
with a custom made class signal. All GstObject classes now automatically
create a GstSignalObject that serves as a proxy to the user app when an
object is loaded. All objects are currently responsible to emit the
class signal themselves.
runxml and createxml serve as an example how the XML hooks can be used to
insert and retrieve custom XML tags.
Original commit message from CVS:
This is a megapatch with the following changes:
- moved the gchar *name to GstObject, removed the ones in GstElement and
GstPad.
- moved the parent handling completely into GstObject. This cause *all* of
the plugins to fail (except those that used gst_pad_get_parent)
- rearanged the XML save handling.
- GstObject now has a class function save/restore_thyself.
- GstObject has a generic method gst_object_save_thyself, this makes it
possible to fire a signal wehever a new object is loaded. This is needed
so we can add XML save hooks.
- GstXML API has changed slightly. You now have to create a GstXML object
first before you can actually load something. This makes it possible to
attach a signal to GstXML whenever an object is loaded. I'm not sure we
will keep this interface.
- GstObject can now print the path_string without knowing about the GstPad and
GstElement types.
- Added gst_bin_get_by_name_recurse_up to lookup an element in the current
element hierarchy.
- added XML namespaces to the saved pipelines the namespace is:
http://gstreamer.net/gst-core/1.0/
namespaces are needed to distinguish user generated XML from the core XML.
Note that the plugins still contain a macro GST_OBJECT_PARENT that will be
replaced with gst_pad_get_parent shortly.
Original commit message from CVS:
Add gst_element_request_compatible_pad and remove gst_element_request_pad.
Implemented something reasonable for gst_element_request_compatible_pad,
but havn't tested much: it won't work for tee because the pad templates
have no caps, and negotiation is not yet written, so it is assumed that the
tee pads can't connect to anything.
Original commit message from CVS:
More EOS changes.
When a bin2 is found inside a bin1, we add the bin2 to the EOS providers
of the bin1. When there is nothing more to schedule in bin1 and bin2 has
fired EOS, bin1 is in EOS.
The queue overrides the EOS notification and calls EOS on the src pad
when the queue is empty and the sink pad is in EOS.
Original commit message from CVS:
A very small change to make eos somewhat work. no inner bins are checked.
When an element fires EOS, the chain with that element is removed from
the scheduler (marked inactive). If all chains are inactive, the bin
fires EOS.
Original commit message from CVS:
Added mthodes to request an element to create pads: gst_element_request_pad*
This can be used to construct a tee and a muxer/mixer/aggregator element.
Moved the tee element to elements/ because it can now be handled with the
new pad request features.
The padfactory also has some changes: a pad can now be of presence REQUEST,
which means that the pad can be requested from this plugin (doh).
Original commit message from CVS:
Updated the manual and the docs.
Removed the esdsink in gst/elements/ we have a real one not in the
plugins dir.
Added more APIs to query the plugins, types and caps. more fields now
have a getter and a setter. This is needed to make gstreamer wrapper
fiendly.
Added gst_element_disconnect beacuse we also have a gst_element_connect
Original commit message from CVS:
Mega update of INFO, DEBUG, and ERROR subsystems, renamed with GST_ prefix.
GST_DEBUG now takes a category parameter, which is the same as GST_INFO
system. They are now called GST_CAT_*. All the GST_DEBUGs are set to 0
for now, we need to go and fix all these eventually.
Original commit message from CVS:
Started work on better ghostpad management, and started to build the low-
level EOS mechanism.
Also removed a couple of printouts that aren't needed any more.
Original commit message from CVS:
Docs updates: remove sink, src, filter, connection
added gstinfo to docs.
Updated some core files for the docs
gsttypefind did not include gst_private
Added CFlags to Makefile.am in gst/elements
Original commit message from CVS:
Added DEBUG, INFO, and ERROR systems. Very little code is converted yet.
Policy decisions need to be made as to what kinds of cases get what kind
of response, and what the default ERROR response should be. Right now it
will print out all the information, then have gdb spew a stack trace.
Original commit message from CVS:
Reparented everything to GstElement, removing GstSrc, GstSink, GstFilter,
and GstConnection. Also fixed a bug in gst_bin_iterate_func.
Original commit message from CVS:
Added handoff signals to fakesrc and fakesink
Added scheduling property to identity
Added GST_STATE_TRANSITION macro to check for state changes.
Modified gstbin and gstthread to the new state change macros
Original commit message from CVS:
Massive scheduling changes (again). Not entirely complete, but getting
closer. Need to think about various scheduling plans that we might want
to produce, and figure out the rules for what is legal, and how to get
the results we need as far as the plan.
Original commit message from CVS:
Header cleanup: try to include as little as possible; this will probably
speed up compilation a bit.
changed the .c files to use #include "..."
Fix for the 'plugins are loaded twice' bug.
Fix 22186: GstObject flags are now used everywhere. Added *_FLAG_LAST so
elements do not use the same flags. Added some padding in the flag enum
for future expansion.
Original commit message from CVS:
Implemented the hybrid scheduling system for sources and connections
outside the current Bin. Is a bit hackish in one place, but I'll work out
a way to make that cleaner soon. queue.c in tests now works nicely in all
cases. More to come later.
Original commit message from CVS:
Snapshot of work-in-progress do deal with out-of-bin elements. Current
system is very likely going to be ditched due to its complexity and the
fact that it doesn't work right now. More than that, it's generating some
really odd results in my test program, which aren't readily explainable.
If you want to keep a working copy of your working copy (heh), don't update
until this is replaced with a hybrid approach. This approach will be the
beginning of a plan generator that can construct full hybrid schedules
given hints from various places.
Hybrid means that cothreads are used, but there are chunks of the pipeline
that are actually dealt with by chaining. This can improve speed by
reducing cothread switches (which are much cheaper than thread switches,
but still far from free, about 570 cycles on my PIII), but does carry a
complexity burden. Luckily, the structure of GStreamer allows that burden
to live entirely in create_plan. Luck? I think not ;-)
Original commit message from CVS:
Another big set of changes. Connections are now also pullfunc based.
gstqueue has been updated, I don't know of any other connections offhand.
There are still a few things that need doing, specifically the concept
of a source or connection with connections to multiple thread contexts is
not dealt with. This may force us to move the threadstate from the
element to the pad, maybe keeping the element's copy for simple cases.
Then the Bin would create a structure to pass to the cothreaded _wrappers
of any such elements, which would detail the pads that are to be dealt with
by this particular cothread context.
That will speed things up to, since we don't have to look through the list
of all pads for every Src or Connection element for every iteration, we can
simply step through the list provided by the plan. Special case might even
have a single pad pointer sitting there to trump the list, if there's only
one (the common case anyway).
Task 23098 is tracking these changes. The main task 22588 depends on that
subtask, as well as 22240, which is a consistency check on PAD_DISABLED.
Original commit message from CVS:
Fixed a dumb mistake: in gst_element_set_loop_function, it was forcing
the cothread's entry function to change. This is totally wrong, the
create_plan function in GstBin is responsible for setting that to its
own internal helper function. Code removed outright...
Original commit message from CVS:
Closed 22145 - gstelement.c: support hotswapping of loopfunc
Added a flag GST_ELEMENT_NEW_LOOPFUNC that's set when a new loopfunc is set,
which needs to be obeyed by the loopfuncs themselves. The assumption is
that only a loopfunc or an element that knows what it's doing will ever
change the loopfunc pointer, so they can be responsible for exitting
the loopfunc itself appropriately.
The loopfunc_wrapper function has been changed to call the loopfunc
pointer itself in a loop. If the loopfunc changes, the current loop is
supposed to exit, which causes the loopfunc_wrapper to start up the new
loopfunc.
Original commit message from CVS:
Closed task 22143 - gstelemnt.c: complete gst_element_connect
SImple matter of cleaning up the conflicting checks and actually
connecting the pads in question.
Original commit message from CVS:
gstbin.c: modified so create_plan occurs after the state change of all the
child elements.
gstelement.c: set_state now loops such that each element only deals with
one state change at a time, i.e. NULL->READY,READY->PLAYING,
instead of a single NULL->PLAYING.
Original commit message from CVS:
Docs updates.
Added LICENSE info to headers/code where missing in gst directory
Added a bonobo wrapper for the media player (it shows up in gshell but
locks up when activating the component, anyone?)
Fixed some XML save/load problems with arguments.
Original commit message from CVS:
More Docs updates.
Added plugin documentation. I fear we need a gstdoc implementation
that loads plugins and does introspection on them. I think we should
automatically create the docs for the pads and mime types the plugins
provide. Does anyone have enough perl knowledge to add these features? I
allready changed the C code to output the pad definitions but my perl
knowledge is too limited, for now, to implement the rest of the needed
functionality...