[gst-devel] HEAD merging

Wim Taymans wim at fluendo.com
Thu Mar 10 07:57:27 CET 2005

Hi guys,

The week is not over yet but here is already an overview of the current
status of HEAD wrt merging of THREADED.


Week1 summary

  First week THREADED->HEAD porting is focussing on making the API
  threadsafe. This has implications for application programmers as
  returned objects and strings need to be freed after usage (see
  docs/design/part-standards.txt). Some functions are replaced with
  threadsafe equivalents, mostly using GstIterator.

  Second focus in on removing functions/flags/macros marked as 
  deprecated in the 0.8.x stable series. Also a general cleanup of the
  header files and flags was performed.

  Some additions had to be made (mostly GstStructure) to make the API

  GstClock was backported from THREADED directly and supports all
  features now.

  Threadsafe properties are removed, simplifying stuff a lot. Elements
  should protect their properties using mutexes themselves.

 - Move testcases to check framework

 - Documentation updates 
    - threadsafe API guidelines
    - object locking
    - object relations
    - clock design

 - general

   - updated headers with info about accessing properties and locks.
   - rearranged headers, grouping functions according to functionality
   - updated functions to use locking for TS access.
   - updated function documentation
   - GstCaps is refcounted again.
   - GstStructure has parent field to check for mutability
   - GstClock can do async notifications

 - HEAD status

   - compiles.
   - testcases in check directory work
   - pad linking not thread safe (planned in week2 when we replace
   - running a pipeline does not work because the _bin_add/remove()
     do not add the element to the scheduler anymore.
   - plugin/pluginfeatures/elementfactory etc still expose Glists in the
     and are generally not threadsafe.

 - removed function

   - gst_use_threads(), gst_has_threads() : deprecated
   - gst_main(), gst_main_quit()          : use GMainLoop directly

     and clock selection moved to gstpipeline
   - gst_bin_use_clock(), gst_bin_get_clock(), gst_bin_auto_clock()
     clock selection is handled by the pipeline. 

   - GST_BUFFER_KEY_UNIT: all buffers are key unit by default, the ones
        marked with GST_BUFFER_DELTA_UNIT are delta units.
   - GST_BUFFER_DONTKEEP: no idea what this was

   - gst_caps_is_chained(), gst_caps_is_equal_fixed(),
     removed deprecated functions.

   - gst_clock_set/get_speed(): deprecated
   - gst_clock_set_active(), gst_clock_is_active(), gst_clock_reset(),
     gst_clock_handle_discont(): clock simplification
   - gst_clock_get_event_time(), gst_clock_get_event_time_delay():
     clock simplification.
   - gst_clock_get_next_id(): internal API, not usefull.
   - gst_clock_id_unlock(), gst_clock_id_free(): ClockID is refcounted.
   - GstClockEntryStatus enum: moved clock status codes into one enum.

   - gstcompat.h: removed deprecated functions, mostly _connect_*()

   - GST_ELEMENT_USE_THREADSAFE_PROPERTIES, gst_element_se/gett(),
     gst_element_set/get_valist(), gst_element_set/get_property(),
     gst_element_set_pending_properties() : elements should lock
     their properties themselves.
   - gst_element_remove_ghost_pad(): deprecated, use _remove_pad()

   - gst_pad_set_active_recursive(): internal use
   - gst_pad_add_ghost_pad(), gst_pad_remove_ghost_pad(), 
     gst_pad_get_ghost_pad_list(): internal functions made static.
   - gst_pad_proxy_link(), gst_pad_perform_negotiate(): deprecated
   - gst_pad_select*(): deprecated
   - gst_pad_template_get_caps_by_name(): deprecated

 - changed functions

   - gst_bin_add(), gst_bin_remove() returns gboolean as the operation
     could fail.

   - gst_element_set_locked_state() returns gboolean to indicate

   - gst_object_set_name() returns gboolean as the operation could fail
     the object has a parent.
   - gst_object_set_parent() returns gboolean as the operation could
     if the object has a parent.

   - gst_pad_set_active(): returns boolean as the operation could fail.

 - replaced functions

   - gst_bin_get_list()             -> gst_bin_iterate_elements()
   - gst_bin_get_all_by_interface() ->

   - gst_caps_split_one(), gst_caps_copy_1() -> gst_caps_copy_nth()
   - gst_caps_free()    -> gst_caps_unref()

   - gst_element_get_pad_list() -> gst_element_iterate_pads()

   - gst_format_get_definitions() -> gst_format_iterate_definitions()

   - GST_PAD_DISABLED -> GST_PAD_ACTIVE: for additional sanity in
     gst_pad_is_active() etc.

   - gst_query_type_get_definitions() ->

   - gst_structure_foreach(): takes const GstStructure as you cannot
     the structure. see gst_structure_map_in_place() for modifying the

 - new functions

   - gst_clock_set_time_adjust(): for subclasses that need to adjust the
   - gst_clock_adjust_unlocked(): for subclasses.
   - GST_TIMESPEC_TO_TIME(): to convert a timespec to GstClockTime

   - gst_object_set/get_name_prefix(): for debugging purposes.

   - gst_pad_realize(): threadsafe realize function.

   - gst_pipeline_use_clock(), gst_pipeline_set/get_clock(), 
     gst_pipeline_auto_clock(): move clock selection to gstpipeline.
   - GST_PIPELINE_FLAG_FIXED_CLOCK, for fixed clock in a pipeline.

   - gst_structure_set_parent_refcount(): for GstStructure writability
   - gst_structure_map_in_place(): new function to modify the structure.

Wim Taymans <wim at fluendo.com>

More information about the gstreamer-devel mailing list