Add a gst_element_lost_state_full() with an extra argument to control
distribution of a new base_time. We will need this for flushing step
operations.
API: GstElement::gst_element_lost_state_full()
dot does not take the head/tail labels into account. For unfixed caps they get
quite large. Double the padding to make it sort of readable in more cases. Also
make normal font bigger and caps-label font smaller to increase our luck.
Possibly fixes GObject class creation/unref race conditions when
creating the last-message string in fakesink for events with
structures that have fields with these enum types.
If deserializing a property fails, check if the value type is a string and if so
attempt to create a bin from the string value. This allows to e.g. specify
audio-sink/video-sink for playbin on gst-launch commandline.
Reuse buffer code for bufferlists. Not sure if this measurably impacts performance
for the simple buffer case, if it does after doing some benchmarks, we can
decouple it later.
Fixes#572285
Buffer lists are a means to manage disjoint buffers as one buffer. It's also
possible to put many of those buffers into a list.
The idea is that when support is added to various elements, we will be able to
more efficiently slice and dice buffers, reduce the amount of memcpy and also
reduce data passing overhead.
The implementation is kept simple on purpose, reusing all of the memory
management features we have for miniobjects and buffers.
Access to the bufferlist object is done with an iterator, which allows for
efficient iteration and modification of the list.
See #572285
When an element lost its state but was busy doing a state change, still post the
async-start message with the base_time reset flag or else we might end up with
an old base_time.
this can happen when a sink is goin async to paused and then a flushing seek is
performed. This would cause the base_time to remain unmodified because the
async-start message was not sent.
Remove the static function set on the TaskPool before _prepare() is called and
allow for assigning a function to a Task when we _push().
Update the examples
Post a stream-status message indicating that a new task was created so that the
application has a chance to change the properties of the task.
Fix unit test to take into account the new ref of the message.
Call the leave_thread callback before we signal the thread performing the _join
so that we can be sure that the listener still has valid info in the callback.
The printf extension mechanism changed in glibc 2.10, and the older
register_printf_function is deprecated. Detect and use the new
mechanism where available.
When its disabled, we poison some symbols to force a build error if they are
used. Dunno how useful this acually is, but we need to disable the poisoning
when we include this ourself. Also don't define some of the dummies, as they
are getting replaced with defines and that creates code that does not compile.
gst_static_pad_template_get_caps () actually returns a reference to the
caps and it's cleaner to unref them after usage. The core will, however,
always hold a reference to the caps so this didn't result in a memory
leak.
And, for our release manager, the in-commit-message keywords
for the previous commit:
API: GST_PARAM_MUTABLE_READY
API: GST_PARAM_MUTABLE_PAUSED
API: GST_PARAM_MUTABLE_PLAYING
API: gst_param_spec_is_mutable
When we get an ASYNC_DONE message when a state change was busy, set the
pending_async_done flag so that after the state change completes, the bin can
check if all async elements are finished. Don't only do this for the bin itself
but for all elements.
This fixes some bins in bins that simulate async state changes by posting ASYNC
messages (such as sdpparse in uridecodebin/playbin2).
Two new log levels to dump FIXMEs into the log and to log data
in form of a hex dump (#578114).
API: GST_CAT_FIXME_OBJECT
API: GST_CAT_MEMDUMP_OBJECT
API: GST_CAT_FIXME
API: GST_CAT_MEMDUMP
API: GST_FIXME_OBJECT
API: GST_MEMDUMP_OBJECT
API: GST_FIXME
API: GST_MEMDUMP
If that block is entered, then start_time becomes GST_CLOCK_TIME_NONE.
Since start_time is invalid, the code will enter the block at line 434 and
new_base_time will be set there.
Move the checks for using an unscheduled entry from the unsafe GstClock to the
SystemClock object so that we can perform the correct locking.
fix a leak and potential deadlock then the async thread fails to start.
Sprinkle some G_LIKELY around because we can.
Keep a counter for the amount of outstanding wakeups that we produce and only
perform a write/read to the control socket when 1 or 0 respectively.
don't poll when waiting for the entries to be unblocked and clear their wakeup
counts, just act on the signal when the wakeup count is 0.
unscheduled entries will clear their wakeup count themselves.
Keep track of when we wakeup the async thread because the list of entries has
changed.
don't try to see if the list changed because we can't really know when one entry
is added multiple times.
Only wake up the async thread when we add an async entry to the head of the list
and the old entry was BUSY.
when an entry being waited on in the async thread is unscheduled, clear the
wakeup queue so we can continue waiting on other entries.
When an entry being waited on in the async thread is unlocked because an earlier
entry was added to the list, set the entry to OK again. This makes sure that
only the entries being waited on have the BUSY flag set and wake up the timer
poll when they are unscheduled.
Yes, 'codec' isn't exactly the best word, but let's be consistent with AUDIO_CODEC
and VIDEO_CODEC (which may be 'raw' formats as well after all). Prerequisite for
bug #576552.
Running configure with e.g. --disable-dst-debug was compiling out the debug
system (ABI break). Now stubs are added and only if one does e.g.
make CFLAGS="-DGST_REMOVE_DISABLED" the symbols are ommitted.
Move the gst_pad_can_link() implementation from gstutils to gstpad and use
gst_pad_link_prepare() to make it work correctly and also check the caps.
Make the broken implementation in gstutils static.
Small cleanups in the _get_fixed_caps() function.
Fixes#575682.
Fixes build with -Werror caused by '_FILE_OFFSET_BITS redefined' warning on
OpenSolaris where _FILE_OFFSET_BITS may be defined both in our config.h
and via stdio.h (#575695).
Bin collects segment-start messages and segent-done messages. it posts a
segment-done message to its parent, once it has received a segment-done for
each segment-start. Imho it should also send a segment-start if it receives the
first segment start and if parent is !=NULL. This is needed for bins in bins,
so that also higher order bins can group segment-starts and segment-dones.
Right now higher order bins will post a segment-done for each segment-done
received.
Long caps fields like enums are ellipsised. If caps are not negotiated, use
head- and taillabel to place them closer to the pads. Use smarter way to indent.
Keep track of when a new callback is installed in the callback and call the new
callback in that case.
Add unit test for checking pad blocking.
Fixes#573823.
When de/activating a pad in pull mode the pad needs to de/activate the
peer pad it is connected to, failure to be able to do this in activation mode
is an error.
However if there is no peerpad, we can still deactivate the pad correctly and
assume the application will deactivate the unlinked peer pad eventually.
Fixes#574163.
This will be mostly useful in all elements that have some kind of internal
seek/index table. Currently almost all of them (or even all of them)
are using a linear search although the used array is already sorted,
wasting some CPU time without good reason.
Fixes bug #573623.
unref and copy functions are sometimes used as function
pointers for example in the case of g_hash_table_new_full
as a GDestroyNotify function.
Currently GstBuffer, GstEvent, GstMessage and GstQuery
define their respective unref and copy functions as
macros, making use of gst_mini_object_unref/copy.
This approach works very well for most cases, except
for some automatically generated bindings (currently Vala),
where the memory management semantics are defined
declaratively.
The possible solutions would be to either convert all
the macros into static inline function, or change the
signature of gst_mini_object_unref to take a void*
instead of a GstMiniObject*.
Fixes bug #572480.
Add a GST_MESSAGE_REQUEST_STATE that can be posted by element when they would
like to have the application change the state of the pipeline. the primary use
case is to pause the pipeline when an audio mixer is mixing a higher priority
stream but it can also be used for other purposes.
Add some docs and a unit test.
Implement the REQUEST_STATE message in gst-launch.
API: gst_message_new_request_state()
API: gst_message_parse_request_state()
API: GST_MESSAGE_REQUEST_STATE
When the target pad disappears (because it was explicitly unlinked or the
element was removed/unreffed) make sure we receive a notify with the unlink
function on the proxy pad and clear the target. We use a simple flag to not do
this and cause deadlocks when the target was changed explicitly using the
ghostpad functions.
Update the unit test because we now unref the target sooner (and correctly).