| GStreamer 0.10 to 1.0 porting guide |
| ----------------------------------- |
| |
| PREFACE |
| |
| * All deprecated methods were removed. Recompile against 0.10 with |
| DISABLE_DEPRECATED and fix issues before attempting to port to 1.0. |
| |
| * API changes are usually easy to spot, because the compiler will |
| generate a warning, at least if number of arguments or types differ |
| |
| * Other changes are a bit more subtle. See checklist at the bottom |
| for some "soft" changes which the compiler will not warn about. |
| |
| * python developers may find https://wiki.ubuntu.com/Novacut/GStreamer1.0 |
| useful |
| |
| * application developers may first want to have a look at the list of changes |
| affecting applications in the Application Development Manual: |
| http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-porting-1.0.html |
| |
| |
| CHANGES |
| |
| * GST_BOILERPLATE is gone, use G_DEFINE_TYPE instead (note that the variable |
| that used to be called parent_class is then called gst_foo_bar_parent_class) |
| |
| * various methods take a gsize instead of a guint when talking about memory |
| sizes. |
| |
| * multifdsink, tcpclientsink, tcpclientsrc, tcpserversrc the protocol property |
| is removed, use gdppay and gdpdepay. |
| |
| * Presets and plugins moved to $XDG_DATA_HOME/gstreamer-1.0/ root |
| directory. Registry moved to $XDG_CACHE_HOME/gstreamer-1.0/. |
| XDG_CACHE_HOME usually points to $HOME/.cache and XDG_DATA_HOME |
| usually is $HOME/.local/share/. |
| |
| * GstObject: |
| GST_OBJECT_DISPOSING flag removed |
| GST_OBJECT_IS_DISPOSING removed |
| GST_OBJECT_FLOATING flag remove, GstObject is now GInitiallyUnowned |
| GST_OBJECT_IS_FLOATING removed, use g_object_is_floating() |
| |
| GST_CLASS_GET_LOCK, GST_CLASS_LOCK, GST_CLASS_TRYLOCK, GST_CLASS_UNLOCK, |
| used to be a workaround for thread-unsafe glib < 2.8 |
| |
| gst_object_ref_sink() has gpointer as result to make it more like the |
| GObject version. |
| |
| gst_object_sink() removed, use gst_object_ref_sink() instead. |
| |
| gst_class_signal_connect() removed, was only used for XML |
| |
| parent-set and parent-unset signals removed. Use notify:parent. Currently |
| still disabled because of deep notify locking issues. |
| |
| * GstElement: |
| GstElementDetails is removed and replaced with more generic metadata. |
| |
| gst_element_class_set_details_simple() -> gst_element_class_set_metadata() |
| gst_element_class_set_documentation_uri -> gst_element_class_add_metadata |
| gst_element_class_set_icon_name -> gst_element_class_add_metadata |
| also gst_element_class_get_metadata() |
| |
| gst_element_factory_get_longname -> gst_element_factory_get_metadata |
| gst_element_factory_get_klass -> gst_element_factory_get_metadata |
| gst_element_factory_get_description -> gst_element_factory_get_metadata |
| gst_element_factory_get_author -> gst_element_factory_get_metadata |
| gst_element_factory_get_documentation_uri -> gst_element_factory_get_metadata |
| gst_element_factory_get_icon_name -> gst_element_factory_get_metadata |
| |
| gstelementmetadata.h contains the keys for all standard metadata. |
| |
| gst_element_factory_can_{src,sink}_caps() => gst_element_factory_can_{src,sink}_{any,all}_caps() |
| |
| Element metadata and pad templates are inherited from parent classes and |
| should be added in class_init instead of base_init. |
| |
| gst_element_class_add_pad_template() takes ownership of the template |
| |
| gst_element_class_add_static_pad_template (element_class, &src_template) |
| => gst_element_class_add_pad_template (element_class, |
| gst_static_pad_template_get (&src_template)); |
| |
| Elements that change the duration must post DURATION messages on the |
| bus when the duration changes in PAUSED or PLAYING. |
| |
| gst_element_lost_state_full() -> gst_element_lost_state() |
| gst_element_lost_state() -> gst_element_lost_state(, TRUE) |
| |
| request_new_pad_full() -> request_new_pad() |
| |
| gst_element_found_tags() and gst_element_found_tags_for_pad() are gone, just |
| push the tag event. |
| |
| * GstPad: |
| gst_pad_get_caps() was replaced by gst_pad_query_caps(), it |
| does not return writable caps anymore and an explicit |
| gst_caps_make_writable() needs to be performed. This was the functionality |
| of gst_pad_get_caps_reffed(), which is removed now. |
| |
| A similar change was done for gst_pad_peer_get_caps() and |
| gst_pad_peer_get_caps_reffed() |
| |
| gst_pad_set_bufferalloc_function(), gst_pad_alloc_buffer() and |
| gst_pad_alloc_buffer_and_set_caps() are removed. Use the ALLOCATION query |
| now when negotiating formats to obtain a reference to a bufferpool object |
| that can be used to allocate buffers using gst_buffer_pool_acquire_buffer(). |
| |
| gst_pad_set_setcaps_function() => GST_EVENT_CAPS in event handler |
| |
| gst_pad_set_getcaps_function() => GST_QUERY_CAPS in query handler |
| |
| gst_pad_set_acceptcaps_function() => GST_QUERY_ACCEPT_CAPS in query handler |
| |
| removed sched_private, it should not be used, use g_object_set_qdata() or |
| use element_private. |
| |
| Removed GST_PAD_CAPS() use gst_pad_get_current_caps() to get a handle to the |
| currently configured caps. |
| |
| gst_pad_get_pad_template_caps() and gst_pad_get_pad_template() |
| return a new reference of the caps or template now and the return |
| value needs to be unreffed after usage. |
| |
| gst_pad_set_caps() now pushes a CAPS event for backward compatibility. |
| Consider sending the CAPS event yourself. It is not possible anymore to set |
| NULL caps. |
| |
| gst_pad_set_checkgetrange_function() and gst_pad_check_pull_range() are |
| gone, use the SCHEDULING query now. |
| |
| gst_pad_set_blocked(), gst_pad_set_blocked_async(), |
| gst_pad_set_blocked_async_full() are removed, use the gst_pad_add_probe() |
| method with the GST_PAD_PROBE_TYPE_BLOCK to get the same result as the async |
| blocking version. There is no more sync version of blocking, this is in |
| general dangerous and can be implemented using the callbacks if needed. |
| |
| gst_pad_add_data_probe(), gst_pad_add_data_probe_full(), |
| gst_pad_remove_data_probe(), gst_pad_add_event_probe(), |
| gst_pad_add_event_probe_full(), gst_pad_remove_event_probe(), |
| gst_pad_add_buffer_probe(), gst_pad_add_buffer_probe_full(), |
| gst_pad_remove_buffer_probe() are removed. Use gst_pad_add_probe() and |
| gst_pad_remove_probe() for equivalent functionality. |
| |
| The have-data signal was removed from pads, it was never supposed to be used |
| without calling the _add_.*_probe() methods. |
| |
| The request-link signal was removed. It was never used. |
| |
| gst_pad_get_negotiated_caps() -> gst_pad_get_current_caps() |
| |
| GST_FLOW_UNEXPECTED -> GST_FLOW_EOS |
| |
| GST_FLOW_WRONG_STATE -> GST_FLOW_FLUSHING |
| |
| GstActivateMode -> GstPadMode, GST_ACTIVATE_* -> GST_PAD_MODE_* |
| gst_pad_activate_{pull,push}() -> gst_pad_activate_mode() |
| |
| The GstPadAcceptCapsFunction was removed and replaced with a |
| GST_QUERY_ACCEPT_CAPS query. |
| |
| The GstPadFixateCapsFunction was removed. It has no replacement, you can |
| simply do the fixation in the element or use a vmethod from the base class |
| if appropriate. |
| |
| The GstPadGetCapsFunction was removed and replaced with a GST_QUERY_CAPS |
| query. The query takes a GstCaps* parameter to inform the other side about |
| the possible caps and preferences. |
| |
| gst_pad_proxy_getcaps() -> gst_pad_proxy_query_caps() |
| gst_pad_get_caps() -> gst_pad_query_caps() |
| gst_pad_peer_get_caps() -> gst_pad_peer_query_caps() |
| gst_pad_accept_caps() -> gst_pad_query_accept_caps() |
| gst_pad_peer_accept_caps() -> gst_pad_peer_query_accept_caps() |
| gst_pad_query_peer_*() -> gst_pad_peer_query_*() |
| |
| GstPadFlags: GST_PAD_* -> GST_PAD_FLAG_* |
| |
| * GstPadTemplate |
| gst_pad_template_get_caps() returns a new reference of the caps |
| and the return value needs to be unreffed after usage. |
| |
| gst_pad_template_new() does not take ownership of the caps anymore. |
| |
| GstPadTemplate is now created with a floating ref and |
| gst_element_class_add_pad_template() takes ownership of this floating ref. |
| |
| GstPadTemplate instances are considered immutable and must not be |
| changed. |
| |
| * GstMiniObject |
| A miniobject is now a simple refcounted structure holding the information |
| common to buffers, events, messages, queries and caps. |
| |
| There is no more GST_TYPE_MINIOBJECT as the type for subclasses. |
| G_TYPE_BOXED can be used as the type of all GstMiniObject based types such |
| as buffers, events, messages, caps, etc. Signals, for example, would use the |
| boxed type if the argument include GstMiniObject derived types. |
| |
| gst_mini_object_new() is removed. You would allocate memory with the |
| methods specific for the derived type. |
| |
| GstParamSpecMiniObject is removed, use boxed param spec now with the GType |
| of the specific GstMiniObject derived type. Also |
| gst_param_spec_mini_object(). |
| |
| gst_param_spec_mini_object() -> g_param_spec_boxed() |
| |
| The specific gst_value_*_mini_object() methods are removed, used the generic |
| boxed methods instead. |
| |
| gst_value_set_mini_object() -> g_value_set_boxed() |
| gst_value_take_mini_object() -> g_value_take_boxed() |
| gst_value_take_get_object() -> g_value_get_boxed() |
| gst_value_take_dup_object() -> g_value_dup_boxed() |
| |
| GST_VALUE_HOLDS_MINI_OBJECT() was removed, use G_VALUE_HOLDS_BOXED() or |
| type-specific GST_VALUE_HOLDS_{BUFFER,CAPS,etc.}() instead. |
| |
| The GST_MINI_OBJECT_READONLY flag was removed as it used to mark the |
| memory in buffers as READONLY. Marking memory READONLY can now be done |
| with the GstMemory API. Writability of miniobjects is now either done |
| by using the refcount or by using exclusive locking. |
| |
| * GstBuffer |
| A GstBuffer is now a simple boxed type this means that subclassing is not |
| possible anymore. |
| |
| To add data to the buffer you would now use gst_buffer_insert_memory() with |
| a GstMemory object containing the data. Multiple memory blocks can added to |
| a GstBuffer that can then be retrieved with gst_buffer_peek_memory(). |
| |
| GST_BUFFER_DATA(), GST_BUFFER_MALLOCDATA(), GST_BUFFER_FREE_FUNC() and |
| GST_BUFFER_SIZE() are gone, along with the fields in GstBuffer. |
| |
| The most common way to access all the data in a buffer is by using |
| gst_buffer_map() and gst_buffer_unmap(). These calls require you to specify |
| the access mode required to the data and will automatically merge and return |
| a writable copy of the data. |
| |
| GST_BUFFER_SIZE() can be replaced with gst_buffer_get_size() but if also |
| access to the data is required, gst_buffer_map() can return both the size |
| and data in one go. |
| |
| The buffer must be writable (gst_buffer_is_writable()) in order to modify |
| the fields, metadata or buffer memory. gst_buffer_make_writable() will not |
| automatically make a writable copy of the memory but will instead increase |
| the refcount of the memory. The _map() and _peek_memory() methods will |
| automatically create writable copies when needed. |
| |
| gst_buffer_make_metadata_writable() is gone, you can replace this safely |
| with gst_buffer_make_writable(). |
| |
| gst_buffer_copy_metadata() is gone, use gst_buffer_copy_into() instead and |
| mind use GST_BUFFER_COPY_METADATA instead of the former GST_BUFFER_COPY_ALL. |
| |
| gst_buffer_create_sub() is gone and can be safely replaced with |
| gst_buffer_copy_region(). |
| |
| Changing the size of the buffer data can be done with gst_buffer_resize(), |
| which will also update the metadata fields correctly. gst_buffer_set_size() |
| is #defined to a special case of gst_buffer_resize() with a 0 offset. |
| |
| gst_buffer_try_new_and_alloc() is replaced with gst_buffer_new_and_alloc(), |
| which now returns NULL when memory allocation fails. |
| |
| GST_BUFFER_CAPS() is gone, caps are not set on buffers anymore but are set |
| on the pads where the buffer is pushed on. Likewise GST_BUFFER_COPY_CAPS is |
| not needed anymore. gst_buffer_get/set_caps() are gone too. |
| |
| GST_BUFFER_TIMESTAMP is gone, use GST_BUFFER_PTS or GST_BUFFER_DTS instead. |
| Likewise GST_BUFFER_TIMESTAMP_IS_VALID() was changed to |
| GST_BUFFER_PTS_IS_VALID and GST_BUFFER_DTS_IS_VALID |
| |
| gst_buffer_join() was renamed to gst_buffer_append() and the memory is not |
| directly merged but appended. |
| |
| gst_buffer_merge() was removed, it is the same as gst_buffer_join() but |
| without taking ownership of the arguments. Caller code should ref themselves |
| when needed. Note that the extra refs might force slower paths in |
| gst_buffer_join(). |
| |
| gst_buffer_is_span() and gst_buffer_span() are removed, use |
| gst_buffer_merge() and gst_buffer_resize() for the same effect. Merging and |
| spanning is delayed until the buffer is mapped and in some cases no merging |
| of memory is needed at all when the element can deal with individual memory |
| chunks. |
| |
| * GstBufferList |
| The GstBufferList object is much simplified because most of the |
| functionality in the groups is now part of the GstMemory in buffers. |
| |
| The object is reduced to encapsulating an array of buffers that you can send |
| with the regular gst_pad_push_list. The iterator is not needed anymore |
| because you can simply use gst_buffer_list_length() and gst_buffer_list_get() |
| to iterate the array. |
| |
| For dealing with the groups, it's now needed to add the memory blocks to |
| GstBuffer and use the normal buffer API to get and merge the groups. |
| |
| gst_buffer_list_sized_new() -> gst_buffer_list_new_sized() |
| gst_buffer_list_len() -> gst_buffer_list_length() |
| |
| * GstStructure |
| |
| The GArray of the structure fields are moved to private part and are not |
| accessible from the application anymore. Use the methods to retrieve and |
| modify fields from the array. |
| |
| gst_structure_empty_new() -> gst_structure_new_empty() |
| gst_structure_id_empty_new() -> gst_structure_new_id_empty() |
| gst_structure_id_new() -> gst_structure_new_id() |
| |
| * GstEvent |
| Boxed types derived from GstMiniObject. |
| |
| GST_EVENT_SRC is removed. Don't use this anymore. |
| |
| gst_event_new_qos_full() -> gst_event_new_qos() |
| gst_event_parse_qos_full() -> gst_event_parse_qos() |
| |
| The GstStructure is removed from the public API, use the getters to get |
| a handle to a GstStructure. |
| |
| GST_EVENT_NEWSEGMENT -> GST_EVENT_SEGMENT |
| |
| gst_event_new_new_segment () -> gst_event_new_segment() and it takes a |
| GstSegment structure as an argument. |
| gst_event_parse_new_segment() -> gst_event_parse_segment() to retrieve the |
| GstSegment structure from the event. |
| gst_event_copy_segment() to fill a GstSegment structure. |
| |
| gst_event_new_flush_stop() now takes a boolean, which in most cases should |
| be TRUE |
| |
| * GstQuery |
| Boxed types derived from GstMiniObject. |
| |
| The GstStructure is removed from the public API, use the getters to get |
| a handle to a GstStructure. |
| |
| gst_query_new_application() -> gst_query_new_custom() |
| |
| gst_query_parse_formats_length() -> gst_query_parse_n_formats() |
| gst_query_parse_formats_nth() -> gst_query_parse_nth_format() |
| |
| Some query utility functions no longer use an inout parameter for the |
| destination/query format: |
| |
| - gst_pad_query_position() |
| - gst_pad_query_duration() |
| - gst_pad_query_convert() |
| - gst_pad_query_peer_position() |
| - gst_pad_query_peer_duration() |
| - gst_pad_query_peer_convert() |
| - gst_element_query_position() |
| - gst_element_query_duration() |
| - gst_element_query_convert() |
| |
| gst_element_get_query_types() and gst_pad_get_query_types() with associated |
| functions were removed. |
| |
| * GstBufferList |
| Is now a boxed type derived from GstMiniObject. |
| |
| * GstMessage |
| Is now a boxed type derived from GstMiniObject |
| |
| The GstStructure is removed from the public API, use the getters to get |
| a handle to a GstStructure. |
| |
| GST_MESSAGE_DURATION -> GST_MESSAGE_DURATION_CHANGED |
| |
| gst_message_parse_duration() was removed (not needed any longer, do |
| a duration query to query the updated duration) |
| |
| * GstCaps |
| Is now a boxed type derived from GstMiniObject. |
| |
| GST_VIDEO_CAPS_xxx -> GST_VIDEO_CAPS_MAKE(xxx) |
| |
| Some caps functions now take ownership of the input argument, for |
| efficiency reasons (to avoid unnecessary copies to make them writable): |
| |
| gst_caps_normalize (caps) => caps = gst_caps_normalize (caps) |
| gst_caps_do_simplify (caps) => caps = gst_caps_simplify (caps) |
| gst_caps_merge (caps,caps2) => caps = gst_caps_merge (caps,caps2) |
| gst_caps_merge_structure (caps,st) => caps = gst_caps_merge_structure (caps,st) |
| gst_caps_truncate (caps) => caps = gst_caps_truncate (caps) |
| |
| The compiler should warn about unused return values from these functions, |
| which may help find the places that need to be updated. |
| |
| Removed functions: |
| |
| gst_caps_union() -> gst_caps_merge(): Be careful because _merge takes |
| ownership of the arguments. |
| |
| * GstClock |
| gst_clock_id_wait_async_full() was renamed to gst_clock_id_wait_async() and |
| the old gst_clock_id_wait_async() function was removed. |
| |
| * GstSegment |
| abs_rate was removed from the public fields, it can be trivially calculated |
| from the rate field. |
| |
| Also segment accumulation was removed from the segment event. This means |
| that now the source/demuxer/parser needs to add the elapsed time of the |
| previous segment themselves (this must be added to segment->base). If this |
| is not done, looped playback wont work. |
| |
| accum was renamed to base. last_stop was renamed to position. |
| |
| The segment info now contains all the information needed to convert buffer |
| timestamps to running_time and stream_time. There is no more segment |
| accumulation, the GstSegment is completely self contained. |
| |
| gst_segment_set_duration() and gst_segment_set_last_stop() are removed, |
| simply modify the structure members duration and position respectively. |
| |
| gst_segment_set_newsegment() is removed, it was used to accumulate segments |
| and is not needed anymore, use gst_segment_copy_into() or modify the segment |
| values directly. |
| |
| gst_segment_set_seek() -> gst_segment_do_seek(). Updates the segment values |
| with seek parameters. |
| |
| * GstPluginFeature |
| GST_PLUGIN_FEATURE_NAME() was removed, use GST_OBJECT_NAME() instead. |
| |
| * GstTypeFind |
| gst_type_find_peek() returns a const guint8 * now. |
| |
| * GstTask |
| gst_task_create() -> gst_task_new() |
| |
| * GstAudio |
| GstBaseAudioSink -> GstAudioBaseSink |
| GstBaseAudioSrc -> GstAudioBaseSrc |
| ... |
| |
| * GstAdapter |
| gst_adapter_peek() is removed, use gst_adapter_map() and gst_adapter_unmap() |
| to get access to raw data from the adapter. |
| |
| Arguments changed from guint to gsize. |
| |
| gst_adapter_prev_timestamp() is removed and should be replaced with |
| gst_adapter_prev_pts() and gst_adapter_prev_dts(). |
| |
| * GstBitReader, GstByteReader, GstByteWriter |
| gst_*_reader_new_from_buffer(), gst_*_reader_init_from_buffer() removed, get |
| access to the buffer data with _map() and then use the _new() functions. |
| |
| gst_byte_reader_new_from_buffer() and gst_byte_reader_init_from_buffer() |
| removed, get access to the buffer data and then use the _new() functions. |
| |
| * GstCollectPads |
| gst_collect_pads_read() removed, use _read_buffer() or _take_buffer() and |
| then use the memory API to get to the memory. |
| |
| * GstBaseSrc, GstBaseTransform, GstBaseSink |
| GstBaseSrc::get_caps(), GstBaseTransform::transform_caps() and |
| GstBaseSink::get_caps() now take a filter GstCaps* parameter to |
| filter the caps and allow better negotiation decisions. |
| |
| * GstBaseSrc |
| When overriding GstBaseTransform::fixate() one should chain up to the parent |
| implementation. |
| |
| * GstBaseTransform |
| GstBaseTransform::transform_caps() now gets the complete caps passed |
| instead of getting it passed structure by structure. |
| |
| GstBaseTransform::event() was renamed to sink_event(). The old function |
| uses the return value to determine if the event should be forwarded or not. |
| The new function has a default implementation that always forwards the event |
| and the return value is simply returned as a result from the event handler. |
| The semantics of the sink_event are thus the same as those for the src_event |
| function. |
| |
| * GstImplementsInterface |
| has been removed. Interfaces need to be updated to either have |
| is_ready/usable/available() methods, or have GError arguments |
| to their methods so we can return an appropriate error if a |
| particular interface isn't supported for a particular device. |
| |
| * GstIterator |
| uses a GValue based API now that is similar to the 0.10 API but |
| allows bindings to properly use GstIterator and prevents complex |
| return value ownership issues. |
| |
| * GstNavigationInterface |
| Now part of the video library in gst-plugins-base, and the interfaces |
| library no longer exists. |
| |
| * GstMixerInterface / GstTunerInterface |
| Removed - no replacement? |
| |
| * GstXOverlay interface |
| Renamed to GstVideoOverlay, and now part of the video library in |
| gst-plugins-base, as the interfaces library no longer exists. |
| |
| * GstPropertyProbe interface |
| Removed - no replacement in 1.0.x and 1.2.x, but since 1.4 there is |
| a more featureful replacement for device discovery and feature querying, |
| provided by GstDeviceMonitor, GstDevice, and friends. See the |
| "GStreamer Device Discovery and Device Probing" documentation at |
| http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-device-probing.html |
| |
| * GstURIHandler |
| gst_uri_handler_get_uri() and the get_uri vfunc now return a copy of |
| the URI string |
| |
| gst_uri_handler_set_uri() and the set_uri vfunc now take an additional |
| GError argument so the handler can notify the caller why it didn't |
| accept a particular URI. |
| |
| gst_uri_handler_set_uri() now checks if the protocol of the URI passed |
| is one of the protocols advertised by the uri handler, so set_uri vfunc |
| implementations no longer need to check that as well. |
| |
| * GstTagList |
| is now an opaque mini object instead of being typedefed to a GstStructure. |
| |
| While it was previously okay (and in some cases required because of |
| missing taglist API) to cast a GstTagList to a GstStructure or use |
| gst_structure_* API on taglists, you can no longer do that. Doing so will |
| cause crashes. |
| |
| Also, tag lists are refcounted now, and can therefore not be freely |
| modified any longer. Make sure to call |
| |
| taglist = gst_tag_list_make_writable (taglist); |
| |
| before adding, removing or changing tags in the taglist. |
| |
| gst_tag_list_new() has been renamed to gst_tag_list_new_empty(). |
| gst_tag_list_new_full*() have been renamed to gst_tag_list_new*(). |
| gst_tag_list_free() has been replaced by gst_tag_list_unref(). |
| |
| GST_TAG_IMAGE, GST_TAG_PREVIEW_IMAGE, GST_TAG_ATTACHMENT: many tags that |
| used to be of type GstBuffer are now of type GstSample (which is basically |
| a struct containing a buffer alongside caps and some other info). |
| |
| gst_tag_list_get_buffer() => gst_tag_list_get_sample() |
| |
| gst_is_tag_list() => GST_IS_TAG_LIST () |
| |
| * GstController: |
| has now been merged into GstObject. It does not exists as a individual |
| object anymore. In addition core contains a GstControlSource base class and |
| the GstControlBinding. The actual control sources are in the controller |
| library as before. The 2nd big change is that control sources generate |
| a sequence of gdouble values and those are mapped to the property type and |
| value range by GstControlBindings. |
| |
| For plugins the effect is that gst_controller_init() is gone and |
| gst_object_sync_values() is taking a GstObject * instead of GObject *. |
| |
| For applications the effect is larger. The whole gst_controller_* API is |
| gone and now available in simplified form under gst_object_*. ControlSources |
| are now attached via GstControlBinding to properties. There are no GValue |
| arguments used anymore when programming control sources. |
| |
| A simple way to attach a ControlSource to a property is: |
| gst_object_add_control_binding (object, |
| gst_direct_control_binding_new (object, property_name, control_source)); |
| |
| gst_controller_set_property_disabled -> |
| gst_object_set_control_binding_disabled |
| |
| gst_object_get_value_arrays has been removed. Loop over the controlled |
| properties fetch the value array. Also GstValueArray is gone. The fields of |
| GstValueArray are now passed directly to gst_object_get_value_array as |
| arguments. |
| |
| GstInterpolationControlSource has been split. There is a new |
| GstTimedValueControlSource baseclass and 2 sub classes: |
| GstInterpolationControlSource and GstTriggerControlSource. The API for setting |
| and getting the timestamps is in GstTimedValueControlSource. |
| |
| gst_interpolation_control_source_set_interpolation_mode() has been removed. |
| Set the "mode" gobject property on the control-source instead. The possible |
| enum values have been renamed from GST_INTERPOLATE_XXX to |
| GST_INTERPOLATION_MODE_XXX. |
| |
| * GstRegistry |
| |
| gst_registry_get_default() -> gst_registry_get() |
| gst_default_registry_*(...) -> gst_registry_*(gst_registry_get(), ...) |
| |
| * GstValue |
| |
| GST_TYPE_DATE -> G_TYPE_DATE |
| GST_VALUE_HOLDS_DATE(value) -> G_VALUE_HOLDS(value,G_TYPE_DATE) |
| gst_value_set_date() -> g_value_set_boxed() |
| gst_value_get_date() -> g_value_get_boxed() |
| |
| * GError/GstGError |
| |
| GstGError -> GError |
| GST_TYPE_G_ERROR / gst_g_error_get_type() -> G_TYPE_ERROR |
| |
| * GstVideo |
| |
| GstXOverlay interface -> renamed to GstVideoOverlay, and now part of |
| the video library in gst-plugins-base, as the interfaces library |
| no longer exists. |
| |
| gst_video_format_parse_caps() -> use gst_video_info_from_caps() and |
| then GstVideoInfo. |
| |
| * GstChildProxy |
| |
| gst_child_proxy_lookup() can no longer be called on GObjects that |
| do not implement the GstChildProxy interface. Use |
| g_object_class_find_property (G_OBJECT_GET_CLASS (obj), "foo") |
| instead for non-childproxy objects. |
| |
| * "codec-data" and "streamheader" field in GstCaps (not implemented yet!) |
| |
| codec-data and stream headers are no longer in GstCaps, but sent as |
| part of a STREAM CONFIG event (which should be sent after the initial |
| CAPS event if needed). |
| |
| ============================================================================= |
| Porting checklist - "soft" API changes |
| ============================================================================= |
| |
| * the "ffmpegcolorspace" element has been replaced by "videoconvert" |
| |
| * "playbin2" has been renamed to "playbin", with similar API |
| |
| * "decodebin2" has been renamed to "decodebin", with similar API. Note |
| that there is no longer a "new-decoded-pad" signal, just use GstElement's |
| "pad-added" signal instead (but don't forget to remove the 'gboolean last' |
| argument from your old signal callback function signature). |
| |
| * the names of some "formatted" pad templates has been changed from e.g. |
| "src%d" to "src%u" or "src_%u" or similar, since we don't want to see |
| negative numbers in pad names. This mostly affects applications that |
| create request pads from elements. |
| |
| * some elements that used to have a single dynamic source pad have a |
| static source pad now. Example: wavparse, id3demux, iceydemux, apedemux. |
| (This does not affect applications using decodebin or playbin). |
| |
| * the name of the GstXOverlay "prepare-xwindow-id" message has changed |
| to "prepare-window-handle" (and GstXOverlay has been renamed to |
| GstVideoOverlay). Code that checks for the string directly should be |
| changed to use gst_is_video_overlay_prepare_window_handle_message(message) |
| instead. |
| |
| * playbin now proxies the GstVideoOverlay (former GstXOverlay) interface, |
| so most applications can just remove the sync bus handler where they |
| would set the window ID, and instead just set the window ID on playbin |
| from the application thread before starting playback. |
| |
| * playbin also proxies the GstColorBalance and GstNavigation interfaces, |
| so applications that use this don't need to go fishing for elements |
| that may implement those any more, but can just use them unconditionally. |
| |
| * level sendy the per channel values as a GValueArray instead of a GstValueList |
| see gst-plugins-good/test/examples/level/level-example.c |
| |
| * media type / caps changes: |
| |
| audio/x-raw-int -> audio/x-raw |
| audio/x-raw-float -> audio/x-raw |
| |
| video/x-raw-rgb -> video/x-raw |
| video/x-raw-yuv -> video/x-raw |
| video/x-raw-bayer -> video/x-bayer |
| |
| video/x-dvd-subpicture -> subpicture/x-dvd |
| |
| application/ogg -> audio/ogg or video/ogg (or application/ogg) |
| |
| video/x-matroska -> audio/x-matroska or video/x-matroska or video/x-matroska-3d |
| |
| video/webm -> audio/webm or video/webm |
| |
| text/plain -> text/x-raw, format=utf8 |
| text/x-pango-markup -> text/x-raw, format=pango-markup |
| |
| * element name changes/replacements: |
| |
| playbin2 -> playbin |
| decodebin2 -> decodebin |
| camerabin2 -> camerabin |
| |
| ffmpegcolorspace -> videoconvert |
| |
| mp3parse -> mpegaudioparse |
| legacyh264parse -> h264parse (note: properties gone, use downstream caps) |
| lame -> lamemp3enc |
| jp2k{enc,dec} -> openjpeg{enc,dec} |
| |
| ffenc_* -> avenc_* |
| ffdec_* -> avdec_* |
| ffdemux_* -> avdemux_* |
| ffmux_* -> avmux_* |
| |
| * property type changes (very nasty for code using the C g_object_set/get API) |
| |
| - playbin2::connection-speed: |
| changed from a plain unsigned integer to an unsigned 64-bit integer |
| |
| * property default value changes |
| |
| - souphttpsrc now by default asks the server to send icecast metadata |
| if available (from internet radio streams usually). This has |
| implications for hand-rolled pipelines, which may require an icydemux |
| element now to parse that metadata (without that the data might be |
| garbled). Since 1.0.7 the "iradio-mode" property has been re-added |
| to allow users to switch off the default behaviour of requesting |
| icecast metadata. |
| - fakesink, identity and fakesrc's "silent" property default value |
| changed from FALSE to TRUE. This means that "gst-launch-1.0 -v" will |
| not show messages from any of these elements unless you explicitly |
| request them with "silent=false". This change was made for efficiency |
| reasons. |
| |
| * decoders now require parsers in front of them |
| |
| - in 1.0 many decoders require parsers in front of them in many |
| situation. This is to simplify decoders and move a lot of the |
| "intelligence" into the parser. This makes it easier to write |
| decoders and minimises behavioural differences between different |
| decoders (both for the same format and different formats). So e.g. |
| |
| filesrc ! flacdec ! audioconvert ! pulsesink |
| |
| now becomes |
| |
| filesrc ! flacparse ! flacdec ! audioconvert ! pulsesink |
| |
| but better just use |
| |
| filesrc ! decodebin ! audioconvert ! pulsesink |
| |
| or even |
| |
| playbin uri=file:///path/to/foo.flac audio-sink=pulsesink |
| |
| * non-time-based sources do not provide presentation timestamps anymore |
| |
| - Sources based on BYTEs instead of TIME (like filesrc or souphttpsrc) |
| do not provide PTS anymore. In the 0.10 API they provided a PTS with |
| value 0 for the first buffer. This was needed for legacy operation but |
| has been removed in the 1.0 API. These sources will usually still put |
| a 0 DTS (decoding timestamp) on the first buffer even if PTS is unset. |
| |
| ============================================================================= |
| Troubleshooting |
| ============================================================================= |
| |
| * GLib-GObject-WARNING **: cannot register existing type `GstObject' |
| |
| If you get this warning, this usually means your plugin or application |
| is linked against both libgstreamer-1.0.so and libgstreamer-0.10.so. |
| Make sure you have changed all -0.10 references in your configure.ac, |
| pkg-config invocations or Makefile.am/Makefile to -1.0. |
| |
| While both versions can co-exist without problems on the same system, it |
| is not possible to use both versions at the same time in a single running |
| process. In most cases this would also not be the desired behaviour. |
| |