mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
771 lines
32 KiB
Text
771 lines
32 KiB
Text
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.
|
|
|