[gst-devel] starting 0.9

Wim Taymans wim at fluendo.com
Fri Mar 4 02:53:36 CET 2005

This is the current plan for merging back the changes made in the

The idea is to merge small subsystems together with testcases and docs.
It is
also important to write down a list of what changed and how old code
be ported to the new API. This includes writing a list of

Major breakage is to be expected while these patches are merged. The
goal is
to have the HEAD branch non-functional for AT MOST 4 weeks. By the
of april the HEAD branch should be functional again and be usable to
applications on.

A new week starts on a monday. Most of the planned patches for that week
be commited on the monday, smaller parts, fixes or leftovers might be
during the week.

Some of the subsystems are not completely finished yet, the ideas for
based scheduling, event based capsnego, state changes and scheduling
some minor stack unwinding policy,... We are not going to wait for them
to be completely finished but focus on getting the current THREADED code
HEAD so we can start working on the remaining issues in the HEAD branch

An overview of the changes follows: 

  + means additions and should not break anything
  * means a change in a subsystem and might break stuff
  - means removal of a feature and will certainly cause breakage until
    replacement has landed.

Week 1: (monday 7 march)

  A fairly big patch but without any architectural changes. Applications
  might or might not run, it's rather unclear now. Expect breakage.

    - add locking in core objects to protect from multithreaded access.
       * GstObject (name, parenting, refcounting, ...)
       * GstElement (pads, templates..)
       * GstPad (caps, peer, ghostpads, ...)
       * GstBin (children, ...)
       * GstPipeline (clocks, ...)

    - Change API to support multithreaded access mainly for lists.
       + GstIterator
       * GstBin
       * GstElement
       * GstFormat
       * GstQuery
       * GstParse/GstUtils

    - Move non-essential core API to gstutils.c The functions will not
      disappear but will be moved to a neutral zone. The idea is to make
      a very small set of essential core methods, where the utility
      can be moved to a separate gstutils lib. This is important for
       * _many
       * _element_link*, _element_unlink*
       * ..

    - Add refcounting to GstCaps. Extra caps checking will be
      using the refcount for making sure the structure is writable.
       * GstCaps
       * GstStructure

    - all objects should have a testcase
    - tests for iterators
    - tests for caps refcounting

    - docs describing the locking for the objects
    - docs describing parent/child relations

Week 2: (monday 21 march, not 14, taking a week off)

  While the dust after week 1 settles, new subsystems are added. This
  mainly be the addition of new objects.

    - Add GstMessage, a structure to report info the the application
using the
       + GstMessage
    - Add GstBus, a system for mainloop integration.
       + GstBus
    - Add GstTask, a wrapper around a threading library
       + GstTask

    - Remove state changes caused by ERROR/EOS
       * GstElement
    - Make objects use the new bus. Implement EOS collection in
       * GstPipeline
       * GstObject
       * GstElement
       * GstBin
    - Remove caps nego from state changes.
       * GstElement
       * GstPad

    - implement pull_region, remove pull
       * GstPad
    - Add return values to push/pull
       * GstPad

    - Add async notify code the GstClock.
       * GstClock 

    - All objects have a test

    - docs describing new subsystems.

Week 3: (monday 28 march)

  Removal of leftover old subsystems and integration of new subsystems
in core
  and plugins. This patch makes things work again.

    - Removal of scheduler implementations.
      - GstOptScheduler...
    - Removal of GstThread
      - GstThread

    - Implementation of state changes/preroll
      * GstElement
      * GstBin 
      * GstPad
      * plugin updates

    - Addition of base classes
      + gst/base/GstBaseSink
      + gst/base/GstBaseFilter
      + ...

    - Implementation of caps nego.
      * GstPad
      * plugin updates

    - Implementation of EOS handling
      * GstPipeline
      * plugin updates

    - Implementaion of ERROR cases
      * plugin updates

    - Implementation of FLUSH
      * plugin updates

    - Implementation of SEEKING
      * GstPipeline
      * plugin updates
    - Implementation of SYNC
      * GstPipeline
      * plugin updates

    - gst-launch should work again
    - state change tests
    - scheduling tests

    - state-change docs
    - scheduling docs
    - caps nego docs
    - EOS docs
    - ERROR docs
    - FLUSH/SEEKING docs
    - SYNC docs

Wim Taymans <wim at fluendo.com>

More information about the gstreamer-devel mailing list