GStreamer multimedia framework
Go to file
Andy Wingo 3f5a8814d5 gst/gstelement.c (gst_element_dispose): Protect against multiple invocations.
Original commit message from CVS:
2004-02-24  Andy Wingo  <wingo@pobox.com>

* gst/gstelement.c (gst_element_dispose): Protect against multiple
invocations.

* gst/schedulers/gstoptimalscheduler.c
I added a mess of prototypes at the top of the file by way of
documentation. Some of the operations on chains and groups were
re-organized.

(create_group): Added a type argument so if the group is enabled,
the setup_group_scheduler knows what to do.
(group_elements): Added a type argument here, too, to be passed on
to create_group.
(group_element_set_enabled): If an unlinked PLAYING element is
added to a bin, we have to create a new group to hold the element,
and this function will be called before the group is added to the
chain. Thus we have a valid case for group->chain==NULL. Instead
of calling chain_group_set_enabled, just set the flag on the group
(the chain's status will be set when the group is added to it).
(gst_opt_scheduler_state_transition, chain_group_set_enabled):
Setup the group scheduler when the group is enabled, not
specifically when an element goes PAUSED->PLAYING. This means
PLAYING elements can be added, linked, and scheduled into a
PLAYING pipeline, as was intended.
(add_to_group): Don't ref the group twice. I don't know when this
double-ref got in here. Removing it has the potential to cause
segfaults if other parts of the scheduler are buggy. If you find
that the scheduler is segfaulting for you, put in an extra ref
here and see if that hacks over the underlying issue. Of course,
then find out what code is unreffing a group it doesn't own...
(create_group): Make the extra refcount floating, and remove it
after adding the element. This means that...
(unref_group): Destroy when the refcount reaches 0, not 1, like
every other refcounted object in the known universe.
(remove_from_group): When a group becomes empty, set it to be not
active, and remove it from its chain. Don't unref it again,
there's no floating reference any more.
(destroy_group): We have to remove the group from the chain in
remove_from_group (rather than here) to break refcounting cycles
(the chain always has a ref on the group). So assert that
group->chain==NULL.
(ref_group_by_count): Removed, it was commented out anyway.
(merge_chains): Use the remove_from_chain and add_to_chain
primitives to do the reparenting, instead of rolling our own
implementation.
(add_to_chain): The first non-disabled group in the chain's group
list will be the entry point for the chain. Because buffers can
accumulate in loop elements' peer bufpens, we preferentially
schedule loop groups before get groups to avoid unnecessary
execution of get-based groups when the bufpens are already full.
(gst_opt_scheduler_schedule_run_queue): Debug fixes.
(get_group_schedule_function): Ditto.
(loop_group_schedule_function): Ditto.
(gst_opt_scheduler_loop_wrapper): Ditto.
(gst_opt_scheduler_iterate): Ditto.

I understand the opt scheduler now, yippee!

* gst/gstpad.c: All throughout, added FIXMEs to look at for 0.9.
(gst_pad_get_name, gst_pad_set_chain_function)
(gst_pad_set_get_function, gst_pad_set_event_function)
(gst_pad_set_event_mask_function, gst_pad_get_event_masks)
(gst_pad_get_event_masks_default, gst_pad_set_convert_function)
(gst_pad_set_query_function, gst_pad_get_query_types)
(gst_pad_get_query_types_default)
(gst_pad_set_internal_link_function)
(gst_pad_set_formats_function, gst_pad_set_link_function)
(gst_pad_set_fixate_function, gst_pad_set_getcaps_function)
(gst_pad_set_bufferalloc_function, gst_pad_unlink)
(gst_pad_renegotiate, gst_pad_set_parent, gst_pad_get_parent)
(gst_pad_add_ghost_pad, gst_pad_proxy_getcaps)
(gst_pad_proxy_pad_link, gst_pad_proxy_fixate)
(gst_pad_get_pad_template_caps, gst_pad_check_compatibility)
(gst_pad_get_peer, gst_pad_get_allowed_caps)
(gst_pad_alloc_buffer, gst_pad_push, gst_pad_pull)
(gst_pad_selectv, gst_pad_select, gst_pad_template_get_caps)
(gst_pad_event_default_dispatch, gst_pad_event_default)
(gst_pad_dispatcher, gst_pad_send_event, gst_pad_convert_default)
(gst_pad_convert, gst_pad_query_default, gst_pad_query)
(gst_pad_get_formats_default, gst_pad_get_formats): Better
argument checks, and some doc fixes.

(gst_pad_custom_new_from_template): Um, does anyone
use these functions? Actually make a custom pad instead of a
normal one.
(gst_pad_try_set_caps): Transpose some checks.
(gst_pad_try_set_caps_nonfixed): Same, and use a macro to check if
the pad is in negotiation.
(gst_pad_try_relink_filtered): Use pad_link_prepare.

* gst/gstelement.c: Remove prototypes also defined in gstclock.h.

* gst/gstelement.h:
* gst/gstclock.h: Un-deprecate the old clocking API, as discussed
on the list.
2004-02-25 13:16:12 +00:00
common@0945c85c4c autogen.sh: replace test -e with test -x for mkinstalldirs to be more portable. 2004-02-22 15:55:29 +00:00
components changed libgst -> libgstreamer to comply with namespace issues with gnu smalltalk various other fixes 2002-02-10 17:09:53 +00:00
debian more trademark fixing 2003-12-05 12:32:06 +00:00
docs gst/gstelement.c (gst_element_dispose): Protect against multiple invocations. 2004-02-25 13:16:12 +00:00
examples parts of the patch submitted in bug #113913 2004-01-30 20:48:13 +00:00
gst gst/gstelement.c (gst_element_dispose): Protect against multiple invocations. 2004-02-25 13:16:12 +00:00
include removal of //-style comments don't link plugins to core libs -- the versioning is done internally to the plugins with... 2002-03-19 04:10:13 +00:00
libs make last change look nicer 2004-02-22 16:41:55 +00:00
pkgconfig merge in tagging 2003-11-24 02:09:23 +00:00
plugins fix errors 2004-02-22 14:07:55 +00:00
po update translations 2004-02-19 17:29:13 +00:00
scripts check out cvs code, autogen, make, make distcheck if you have spare machines at work sitting idly during the night, r... 2001-12-14 09:44:11 +00:00
tests Spelling fix 2004-02-16 18:13:21 +00:00
testsuite Spelling fix 2004-02-16 18:13:21 +00:00
tools some fixes from jdahlin 2004-02-19 10:36:06 +00:00
.gitignore cvsignore updates 2004-01-30 17:59:15 +00:00
.gitmodules Added a first stab at a better clocking system. 2002-02-03 20:07:09 +00:00
AUTHORS added myself 2001-12-12 23:45:40 +00:00
autogen.sh autogen.sh: replace test -e with test -x for mkinstalldirs to be more portable. 2004-02-22 15:55:29 +00:00
ChangeLog gst/gstelement.c (gst_element_dispose): Protect against multiple invocations. 2004-02-25 13:16:12 +00:00
configure.ac revert broken commit 2004-02-13 19:01:10 +00:00
COPYING initial checkin 2000-01-30 09:03:00 +00:00
COPYING.LIB initial checkin 2000-01-30 09:03:00 +00:00
DEVEL more registry fixes 2002-04-12 18:50:48 +00:00
DOCBUILDING more docbuilding notes 2002-04-12 09:43:11 +00:00
gst-element-check.m4 fixing automake warnings 2004-02-11 18:21:51 +00:00
gst-element-check.m4.in fixing automake warnings 2004-02-11 18:21:51 +00:00
gstreamer.spec.in bug fix 2004-02-24 12:46:55 +00:00
idiottest.mak idiottest was failing because of change of PLUGIN_USE_SRCDIR to 2001-06-19 12:53:05 +00:00
indent.pro This is an indent profile for the core coding style 2002-09-23 21:36:03 +00:00
INSTALL initial checkin 2000-01-30 09:03:00 +00:00
LICENSE Adding explicit license information, since quite a large number of source files don't have the LGPL header. This is ... 2000-08-05 03:53:00 +00:00
Makefile.am touch 2004-02-12 19:21:12 +00:00
NEWS docs changes 2001-12-11 22:55:55 +00:00
README Trigger build 2004-02-16 10:30:11 +00:00
REQUIREMENTS Automake-1.5 chokes on gst/Makefile.am, so updating requirement to 1.6. 2003-08-06 01:15:48 +00:00
stamp.h.in initial checkin 2000-01-30 09:03:00 +00:00
TODO update TODO 2003-02-12 23:33:55 +00:00

WHAT IT IS
----------
This is GStreamer, a framework for streaming media.  The
fundamental design comes from the video pipeline at Oregon Graduate
Institute, as well as some ideas from DirectMedia.  It's based on plug-ins
that will provide the various codec and other functionality.  The
interface hopefully is generic enough for various companies (ahem, Apple)
to release binary codecs for Linux, until such time as they get a clue and
release the source.

COMPILING FROM SOURCE
---------------------
- check output of ./configure --help to see if any options apply to you
- run
  ./configure
  make

  to build GStreamer.
- if you want to install it (not required), run
  make install
- You should create a registry for things to work.
  If you ran make install in the previous step, run
  gst-register
  as root.

  If you didn't install, run
  tools/gst-register
  as a normal user.

- try out a simple test:
  gst-launch fakesrc num_buffers=5 ! fakesink
  (If you didn't install GStreamer, again prefix gst-launch with tools/)

  If it outputs a bunch of messages from fakesrc and fakesink, everything is
  ok.

- After this, you're ready to install gst-plugins, which will provide the
  functionality you're probably looking for by now, so go on and read
  that README.

COMPILING FROM CVS
------------------
When building from CVS sources, you will need to run autogen.sh to generate 
the build system files.

GStreamer is cutting-edge stuff.  To be a CVS developer, you need 
what used to be considered cutting-edge tools.

ATM, most of us have at least these versions :

* autoconf	2.52	(NOT 2.52d)
* automake	1.5
* libtool	1.4     (NOT Gentoo's genetic failure 1.4.2)
* pkg-config    0.8.0

autogen.sh will check for these versions and complain if you don't have 
them.  You can also specify specific versions of automake and autoconf with
--with-automake and --with-autoconf

Check autogen.sh options by running autogen.sh --help

autogen.sh can pass on arguments to configure - you just need to separate them
from autogen.sh with -- between the two.
prefix has been added to autogen.sh but will be passed on to configure because
some build scripts like that.

When you have done this once, you can use autoregen.sh to re-autogen with
the last passed options as a handy shortcut.  Use it.

After the autogen.sh stage, you can follow the directions listed in
"COMPILING FROM SOURCE"