utils: remove _found_tags_ API
[platform/upstream/gstreamer.git] / docs / random / porting-to-0.11.txt
1 The 0.11 porting guide
2 ----------------------
3
4 * All deprecated methods were removed. Recompile against 0.10 with
5   DISABLE_DEPRECATED and fix issues before attempting to port to 0.11.
6
7 * GST_BOILERPLATE is gone, use G_DEFINE_TYPE instead.
8
9 * various methods take a gsize instead of a guint when talking about memory
10   sizes.
11
12 * multifdsink, tcpclientsink, tcpclientsrc, tcpserversrc the protocol property
13   is removed, use gdppay and gdpdepay.
14
15 * Presets and plugins moved to $XDG_DATA_HOME/gstreamer-0.11/ root
16   directory. Registry moved to $XDG_CACHE_HOME/gstreamer-0.11/.
17   XDG_CACHE_HOME usually points to $HOME/.cache and XDG_DATA_HOME
18   usually is $HOME/.local/share/.
19
20 * GstObject:
21     GST_OBJECT_DISPOSING flag removed
22     GST_OBJECT_IS_DISPOSING removed
23     GST_OBJECT_FLOATING flag remove, GstObject is now GInitiallyUnowned
24     GST_OBJECT_IS_FLOATING removed, use g_object_is_floating()
25
26     GST_CLASS_GET_LOCK, GST_CLASS_LOCK, GST_CLASS_TRYLOCK, GST_CLASS_UNLOCK,
27     used to be a workaround for thread-unsafe glib < 2.8
28
29     gst_object_ref_sink() has gpointer as result to make it more like the
30     GObject version.
31
32     gst_object_sink() removed, use gst_object_ref_sink() instead.
33
34     gst_class_signal_connect() removed, was only used for XML
35
36     parent-set and parent-unset signals removed. Use notify:parent. Currently
37     still disabled because of deep notify locking issues.
38
39 * GstElement:
40     GstElementDetails is removed and replaced with more generic metadata.
41
42     gst_element_class_set_details_simple() -> gst_element_class_set_metadata()
43     gst_element_class_set_documentation_uri -> gst_element_class_add_metadata
44     gst_element_class_set_icon_name -> gst_element_class_add_metadata
45     also gst_element_class_get_metadata()
46
47     gst_element_factory_get_longname -> gst_element_factory_get_metadata
48     gst_element_factory_get_klass -> gst_element_factory_get_metadata
49     gst_element_factory_get_description -> gst_element_factory_get_metadata
50     gst_element_factory_get_author -> gst_element_factory_get_metadata
51     gst_element_factory_get_documentation_uri -> gst_element_factory_get_metadata
52     gst_element_factory_get_icon_name -> gst_element_factory_get_metadata
53
54     gstelementmetadata.h contains the keys for all standard metadata.
55
56     gst_element_factory_can_{src,sink}_caps() => gst_element_factory_can_{src,sink}_{any,all}_caps()
57
58     Element metadata and pad templates are inherited from parent classes and
59     should be added in class_init instead of base_init.
60
61     gst_element_class_add_pad_template() takes ownership of the template
62
63     Elements that change the duration must post DURATION messages on the
64     bus when the duration changes in PAUSED or PLAYING.
65
66     gst_element_lost_state_full() -> gst_element_lost_state()
67     gst_element_lost_state() -> gst_element_lost_state(, TRUE)
68
69     request_new_pad_full() -> request_new_pad()
70
71     gst_element_found_tags() and gst_element_found_tags_for_pad() are gone, just
72     push the tag event.
73
74 * GstPad:
75     gst_pad_get_caps() does not return writable caps anymore and an explicit
76     gst_caps_make_writable() needs to be performed. This was the functionality
77     of gst_pad_get_caps_reffed(), which is removed now.
78
79     A similar change was done for gst_pad_peer_get_caps() and
80     gst_pad_peer_get_caps_reffed()
81
82     gst_pad_set_bufferalloc_function(), gst_pad_alloc_buffer() and
83     gst_pad_alloc_buffer_and_set_caps() are removed. Use the ALLOCATION query
84     now to obtain a reference to a bufferpool object that can be used to
85     allocate buffers.
86
87     removed sched_private, it should not be used, use g_object_set_qdata() or
88     use element_private.
89
90     Removed GST_PAD_CAPS() use gst_pad_get_current_caps() to get a handle to the
91     currently configured caps.
92
93     GstPadGetCapsFunction, gst_pad_get_caps(), gst_pad_peer_get_caps(),
94     gst_pad_proxy_getcaps() now takes a GstCaps* parameter to inform
95     the other side about the possible caps and preferences.
96
97     gst_pad_get_pad_template_caps() and gst_pad_get_pad_template()
98     return a new reference of the caps or template now and the return
99     value needs to be unreffed after usage.
100
101     gst_pad_set_caps() now pushes a CAPS event for backward compatibility.
102     Consider sending the CAPS event yourself. It is not possible anymore to set
103     NULL caps.
104
105     gst_pad_set_checkgetrange_function() and gst_pad_check_pull_range() are
106     gone, use the SCHEDULING query now.
107
108     gst_pad_set_blocked(), gst_pad_set_blocked_async(),
109     gst_pad_set_blocked_async_full() are removed, use the gst_pad_add_probe()
110     method with the GST_PAD_PROBE_TYPE_BLOCK to get the same result as the async
111     blocking version. There is no more sync version of blocking, this is in
112     general dangerous and can be implemented using the callbacks if needed.
113
114     gst_pad_add_data_probe(), gst_pad_add_data_probe_full(),
115     gst_pad_remove_data_probe(), gst_pad_add_event_probe(),
116     gst_pad_add_event_probe_full(), gst_pad_remove_event_probe(),
117     gst_pad_add_buffer_probe(), gst_pad_add_buffer_probe_full(),
118     gst_pad_remove_buffer_probe() are removed. Use gst_pad_add_probe() and
119     gst_pad_remove_probe() for equivalent functionality.
120
121     The have-data signal was removed from pads, it was never supposed to be used
122     without calling the _add_.*_probe() methods.
123
124     The request-link signal was removed. It was never used.
125
126     gst_pad_get_negotiated_caps() -> get_pad_get_current_caps()
127
128     GST_FLOW_UNEXPECTED -> GST_FLOW_EOS
129
130     GstActivateMode -> GstPadActivateMode, GST_ACTIVATE_* -> GST_PAD_ACTIVATE_*
131
132 * GstPadTemplate
133     gst_pad_template_get_caps() returns a new reference of the caps
134     and the return value needs to be unreffed after usage.
135
136     gst_pad_template_new() does not take ownership of the caps anymore.
137
138     GstPadTemplate is now created with a floating ref and
139     gst_element_class_add_pad_template() takes ownership of this floating ref.
140
141     GstPadTemplate instances are considered immutable and must not be
142     changed.
143
144 * GstMiniObject
145     A miniobject is now a simple refcounted structure holding the information
146     common to buffers, events, messages, queries and caps.
147
148     There is no more GST_TYPE_MINIOBJECT as the type for subclasses.
149     G_TYPE_BOXED can be used as the type of all GstMiniObject based types such
150     as buffers, events, messages, caps, etc. Signals, for example, would use the
151     boxed type if the argument include GstMiniObject derived types.
152
153     gst_mini_object_new() is removed. You would allocate memory with the the
154     methods specific for the derived type.
155
156     GstParamSpecMiniObject is removed, use boxed param spec now with the GType
157     of the specific GstMiniObject derived type. Also
158     gst_param_spec_mini_object().
159
160     gst_param_spec_mini_object() -> g_param_spec_boxed()
161
162     The specific gst_value_*_mini_object() methods are removed, used the generic
163     boxed methods instead.
164
165     gst_value_set_mini_object() -> g_value_set_boxed()
166     gst_value_take_mini_object() -> g_value_take_boxed()
167     gst_value_take_get_object() -> g_value_get_boxed()
168     gst_value_take_dup_object() -> g_value_dup_boxed()
169
170     GST_VALUE_HOLDS_MINI_OBJECT() was removed, use G_VALUE_HOLDS_BOXED() or
171     type-specific GST_VALUE_HOLDS_{BUFFER,CAPS,etc.}() instead.
172
173     The GST_MINI_OBJECT_READONLY flag was removed as it used to mark the
174     memory in buffers as READONLY. Marking memory READONLY can now be done
175     with the GstMemory API. Writability of miniobjects is now only done by using
176     the refcount.
177
178 * GstBuffer
179     A GstBuffer is now a simple boxed type this means that subclassing is not
180     possible anymore. 
181
182     To add data to the buffer you would now use gst_buffer_take_memory() with
183     a GstMemory object containing the data. Multiple memory blocks can added to
184     a GstBuffer that can then be retrieved with gst_buffer_peek_memory().
185
186     GST_BUFFER_DATA(), GST_BUFFER_MALLOCDATA(), GST_BUFFER_FREE_FUNC() and
187     GST_BUFFER_SIZE() are gone, along with the fields in GstBuffer. Use the
188     memory API to get access to the buffer data. GST_BUFFER_SIZE() can be
189     replaced with gst_buffer_get_size() but if also access to the data is
190     required, gst_buffer_map() can return both the size and data in one go.
191
192     The most common way to access all the data in a buffer is by using
193     gst_buffer_map() and gst_buffer_unmap(). These calls require you to specify
194     the access mode required to the data and will automatically merge and return
195     a writable copy of the data.
196
197     The buffer must be writable (gst_buffer_is_writable()) in order to modify
198     the fields, metadata or buffer memory. gst_buffer_make_writable() will not
199     automatically make a writable copy of the memory but will instead increase
200     the refcount of the memory. The _map() and _peek_memory() methods will
201     automatically create writable copies when needed.
202     
203     gst_buffer_make_metadata_writable() is gone, you can replace this safely
204     with gst_buffer_make_writable().
205
206     gst_buffer_create_sub() is gone and can be safely replaced with
207     gst_buffer_copy_region(). 
208
209     Changing the size of the buffer data can be done with gst_buffer_resize(),
210     which will also update the metadata fields correctly. gst_buffer_set_size()
211     is #defined to a special case of gst_buffer_resize() with a 0 offset.
212
213     gst_buffer_try_new_and_alloc() is replaced with gst_buffer_new_and_alloc(),
214     which now returns NULL when memory allocation fails.
215
216     GST_BUFFER_CAPS() is gone, caps are not set on buffers anymore but are set
217     on the pads where the buffer is pushed on. Likewise GST_BUFFER_COPY_CAPS is
218     not needed anymore. gst_buffer_get/set_caps() are gone too.
219
220     GST_BUFFER_TIMESTAMP is gone, use GST_BUFFER_PTS or GST_BUFFER_DTS instead.
221     Likewise GST_BUFFER_TIMESTAMP_IS_VALID() was changed to
222     GST_BUFFER_PTS_IS_VALID and GST_BUFFER_DTS_IS_VALID
223
224 * GstBufferList
225     The GstBufferList object is much simplified because most of the
226     functionality in the groups is now part of the GstMemory in buffers.
227     
228     The object is reduced to encapsulating an array of buffers that you can send
229     with the regular gst_pad_push_list. The iterator is not needed anymore
230     because you can simply use gst_buffer_list_length() and gst_buffer_list_get()
231     to iterate the array.
232
233     For dealing with the groups, it's now needed to add the memory blocks to
234     GstBuffer and use the normal buffer API to get and merge the groups.
235
236     gst_buffer_list_sized_new() -> gst_buffer_list_new_sized()
237     gst_buffer_list_len() -> gst_buffer_list_length()
238
239 * GstStructure
240
241     The GArray of the structure fields are moved to private part and are not
242     accessible from the application anymore. Use the methods to retrieve and
243     modify fields from the array.
244
245     gst_structure_empty_new() -> gst_structure_new_empty()
246     gst_structure_id_empty_new() -> gst_structure_new_id_empty()
247     gst_structure_id_new() -> gst_structure_new_id()
248
249 * GstEvent
250     GST_EVENT_SRC is removed. Don't use this anymore.
251
252     gst_event_new_qos_full() -> gst_event_new_qos()
253     gst_event_parse_qos_full() -> gst_event_parse_qos()
254
255     The GstStructure is removed from the public API, use the getters to get
256     a handle to a GstStructure.
257
258     GST_EVENT_NEWSEGMENT -> GST_EVENT_SEGMENT
259
260     gst_event_new_new_segment () -> gst_event_new_segment() and it takes a
261     GstSegment structure as an argument.
262     gst_event_parse_new_segment() -> gst_event_parse_segment() to retrieve the
263     GstSegment structure from the event.
264     gst_event_copy_segment() to fill a GstSegment structure.
265
266 * GstQuery
267     Boxed types derived from GstMiniObject.
268
269     The GstStructure is removed from the public API, use the getters to get
270     a handle to a GstStructure.
271
272     gst_query_new_application() -> gst_query_new_custom()
273
274     gst_query_parse_formats_length() -> gst_query_parse_n_formats()
275     gst_query_parse_formats_nth() -> gst_query_parse_nth_format()
276
277     Some query utility functions no longer use an inout parameter for the
278     destination/query format:
279
280       - gst_pad_query_position()
281       - gst_pad_query_duration()
282       - gst_pad_query_convert()
283       - gst_pad_query_peer_position()
284       - gst_pad_query_peer_duration()
285       - gst_pad_query_peer_convert()
286       - gst_element_query_position()
287       - gst_element_query_duration()
288       - gst_element_query_convert()
289
290 * GstBufferList
291     Is now a boxed type derived from GstMiniObject.
292
293 * GstMessage
294     Is now a boxed type derived from GstMiniObject
295
296     The GstStructure is removed from the public API, use the getters to get
297     a handle to a GstStructure.
298
299 * GstCaps
300     Is now a boxed type derived from GstMiniObject. 
301
302 * GstSegment
303     abs_rate was removed from the public fields, it can be trivially calculated
304     from the rate field.
305
306     accum was renamed to base. last_stop was renamed to position.
307
308     The segment info now contains all the information needed to convert buffer
309     timestamps to running_time and stream_time. There is no more segment
310     accumulation, the GstSegment is completely self contained.
311
312     gst_segment_set_duration() and gst_segment_set_last_stop() are removed,
313     simply modify the structure members duration and position respectively.
314
315     gst_segment_set_newsegment() is removed, it was used to accumulate segments
316     and is not needed anymore, use gst_segment_copy_into() or modify the segment
317     values directly.
318
319     gst_segment_set_seek() -> gst_segment_do_seek(). Updates the segment values
320     with seek parameters.
321
322 * GstPluginFeature
323     GST_PLUGIN_FEATURE_NAME() was removed, use GST_OBJECT_NAME() instead.
324
325 * GstTypeFind
326     gst_type_find_peek() returns a const guint8 * now.
327
328 * GstTask
329
330     gst_task_create() -> gst_task_new()
331
332 * GstAdapter
333     gst_adapter_peek() is removed, use gst_adapter_map() and gst_adapter_unmap()
334     to get access to raw data from the adapter.
335
336     Arguments changed from guint to gsize.
337
338     gst_adapter_prev_timestamp() is removed and should be replaced with
339     gst_adapter_prev_pts() and gst_adapter_prev_dts().
340
341 * GstBitReader, GstByteReader, GstByteWriter
342     gst_*_reader_new_from_buffer(), gst_*_reader_init_from_buffer() removed, get
343     access to the buffer data with _map() and then use the _new() functions.
344
345     gst_byte_reader_new_from_buffer() and gst_byte_reader_init_from_buffer()
346     removed, get access to the buffer data and then use the _new() functions.
347
348 * GstCollectPads
349     gst_collect_pads_read() removed, use _read_buffer() or _take_buffer() and
350     then use the memory API to get to the memory.
351
352 * GstBaseSrc, GstBaseTransform, GstBaseSink
353     GstBaseSrc::get_caps(), GstBaseTransform::transform_caps() and
354     GstBaseSink::get_caps() now take a filter GstCaps* parameter to
355     filter the caps and allow better negotiation decisions.
356  
357 * GstBaseTransform
358     GstBaseTransform::transform_caps() now gets the complete caps passed
359     instead of getting it passed structure by structure.
360
361     GstBaseTransform::event() was renamed to sink_event(). The old function
362     uses the return value to determine if the event should be forwarded or not.
363     The new function has a default implementation that always forwards the event
364     and the return value is simply returned as a result from the event handler.
365     The semantics of the sink_event are thus the same as those for the src_event
366     function.
367
368 * GstImplementsInterface
369     has been removed. Interfaces need to be updated to either have
370     is_ready/usable/available() methods, or have GError arguments
371     to their methods so we can return an appropriate error if a
372     particular interface isn't supported for a particular device.
373
374 * GstIterator
375     uses a GValue based API now that is similar to the 0.10 API but
376     allows bindings to properly use GstIterator and prevents complex
377     return value ownership issues.
378
379 * GstTagList
380     is now an opaque object instead of being typedefed to a GstStructure. Cast
381     to GstStructure or use gst_structure_* API on it at your own peril (it may
382     still work for now, but might be changed in future).
383
384     gst_tag_list_new() has been renamed to gst_tag_list_new_empty().
385     gst_tag_list_new_full*() have been renamed to gst_tag_list_new*().
386