[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
THREADED
branch. 

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
should
be ported to the new API. This includes writing a list of
add/removed/changed
functions.

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
beginning
of april the HEAD branch should be functional again and be usable to
build
applications on.

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

Some of the subsystems are not completely finished yet, the ideas for
trigger 
based scheduling, event based capsnego, state changes and scheduling
selection,
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
in 
HEAD so we can start working on the remaining issues in the HEAD branch
ASAP.

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
the
    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.

  changes:
    - 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
function
      can be moved to a separate gstutils lib. This is important for
embedded
      systems.
       * _many
       * _element_link*, _element_unlink*
       * ..

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

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

  docs:
    - 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
will
  mainly be the addition of new objects.

  changes:
    - Add GstMessage, a structure to report info the the application
using the
      mainloop.
       + 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.
       * 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 

  tests:
    - All objects have a test

  docs:
    - 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.

  changes:
    - 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


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

  docs:
    - 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