When we are dealing with a source that produces raw audio/video, we don't use a
decodebin2 to decode the data and we thus don't have the drained/about-to-finish
signal emited. To fix this, we add a padprobe on the source pads and emit the
drained signal ourselves. This then makes playbin2 emit the about-to-finish
signal for raw sources such as cdda://
Fixes#607116
Use the faster gst_element_link_pads because we know for sure the sinkpad name
and we don't need to have the function search for a suitable pad anymore.
The problem with an error message is, that it will stop playback completely
while it could be that only a audio decoder plugin is missing and the video
could be played with the available plugins.
See bug #591677.
Before we had STREAM/WRONG_TYPE but it's really CORE/MISSING_PLUGIN
because a plugin is missing and nothing else is wrong.
Also make it an error instead of a warning.
Really fixes bug #591677.
Fix the construction of the temporary filename construction as the application
name can be NULL and we don't want a separator between the prgname and the
template.
Add a download property that will attempt to configure queue2 into progressive
download buffering.
Make sure we only enable download buffering for quicktime and flv formats.
uridecodebin expects the passed connection-speed value in kbps, so we
need to divide the value stored in bps by 1000. Also, lower the upper
limit on the properties to the value that we can actually store in our
internal guint (which is plenty high enough)
Add a queue2 after the raw output pads of certain sources such as those for uris
like cdda://
No tuning of the queue is done yet as the defaults seem to work fine for me.
Fixes#582528
We can use gst_element_link_pads() instead of the more generic
gst_element_link() function because we know the pads. This saves some cycles
because the more generic function needs to search for possible compatible caps
etc.
Original commit message from CVS:
* gst/playback/gstplaybin2.c: (gst_play_bin_class_init),
(gst_play_bin_set_uri), (gst_play_bin_set_suburi),
(no_more_pads_cb), (drained_cb), (group_set_locked_state_unlocked),
(activate_group), (deactivate_group), (groups_set_locked_state),
(gst_play_bin_change_state):
Fix some comments and docs.
Post an error message when we fail to link the selector to the sink.
Remove pushing of EOS, this seems unneeded.
Lock the state of deactivated groups so that they don't accidentally
reactivate when the playbin2 state changes.
Reuse uridecodebins.
Unlock and relock state of groups when playbin goes to NULL.
Fixes#566654.
Fixes#566341.
* gst/playback/gsturidecodebin.c: (pad_removed_cb), (type_found):
Only do something in the pad removed callback when we are dealing with
our sourcepads because the sinkpads don't have a ghostpad.
Original commit message from CVS:
* gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_finalize):
Free the factory array when finalizing.
* sys/v4l/gstv4lsrc.c: (gst_v4lsrc_base_init):
Use a GstStaticPadTemplate since the src pad caps are fixed.
Original commit message from CVS:
* gst/playback/gstplaybin2.c:
Add notification of current stream. Add ability to configure buffer
sizes.
* gst/playback/gsturidecodebin.c:
Add ability to configure buffer sizes for streaming mode.
Bug #561734.
Original commit message from CVS:
* gst/playback/gstdecodebin.c: (gst_decode_bin_class_init):
* gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init):
* gst/playback/gstplay-marshal.list:
* gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_class_init):
Use correct marshallers. GstCaps are a boxed type and no GObject
subclass.
Original commit message from CVS:
* gst/playback/gstqueue2.c: (update_buffering),
(gst_queue_close_temp_location_file), (gst_queue_handle_src_query),
(gst_queue_src_checkgetrange_function):
Include extra buffering stats in the buffering message.
Implement BUFFERING query.
* gst/playback/gsturidecodebin.c: (do_async_start),
(do_async_done), (type_found), (setup_streaming), (setup_source),
(gst_uri_decode_bin_change_state):
Only add decodebin2 when the type is found in streaming mode.
Make uridecodebin async to PAUSED even when we don't have decodebin2
added yet.
Original commit message from CVS:
* gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init),
(gst_decode_bin_init), (gst_decode_bin_dispose),
(gst_decode_bin_set_sink_caps), (gst_decode_bin_get_sink_caps),
(gst_decode_bin_set_property), (gst_decode_bin_get_property),
(analyze_new_pad), (connect_pad), (expose_pad),
(gst_decode_group_new), (gst_decode_group_control_demuxer_pad),
(gst_decode_group_expose), (gst_decode_group_free),
(do_async_start), (do_async_done), (gst_decode_bin_change_state):
Remove fakesink hack, we can now implement this more elegantly.
Added property to bypass typefinding.
Removed underrun callback and demuxer pad probe, we now use the srcpad
probe to expose groups.
API::sink-caps property
* gst/playback/gstplaybin2.c: (no_more_pads_cb):
Guard against multiple emissions of the no_more_pads signal, which
happens when we are dealing with chained oggs.
* gst/playback/gsturidecodebin.c: (remove_decoders),
(make_decoder), (type_found), (setup_streaming), (source_new_pad),
(setup_source):
For streams, use our own typefind element and plug our queue after it.
We will need this to determine the type of buffering to use for the
queue soon.
Original commit message from CVS:
* gst/playback/gsturidecodebin.c:
(gst_uri_decode_bin_autoplug_factories),
(gst_uri_decode_bin_class_init), (gst_uri_decode_bin_init),
(gst_uri_decode_bin_finalize), (gst_uri_decode_bin_set_encoding),
(gst_uri_decode_bin_set_property),
(gst_uri_decode_bin_get_property), (no_more_pads_full),
(new_decoded_pad_cb), (gen_source_element), (remove_decoders),
(proxy_autoplug_factories_signal), (make_decoder),
(source_new_pad), (setup_source):
Add a readonly source property and notify.
Add new lock for protecting the construction of the pipeline.
Keep track of the decodebins we plugged.
Correctly proxy the autoplug signal so that it actually continues.
Proxy subtitle-encoding to the decodebins.
Original commit message from CVS:
* gst/playback/Makefile.am:
Group decodebin2 and uridecodebin into the same plugin so that they
can share the GEnumType.
* gst/playback/gstdecodebin2.c: (_gst_array_accumulator),
(_gst_select_accumulator), (gst_decode_bin_class_init),
(gst_decode_bin_init), (gst_decode_bin_autoplug_sort),
(gst_decode_bin_autoplug_select), (gst_decode_bin_autoplug_add),
(analyze_new_pad), (connect_pad), (gst_decode_bin_plugin_init):
Add signal to sort factories instead of the more awkward autoplug-select
signal.
Modify autoplug_select so that we can try, skip or expose the
autopluggin of an element on a pad.
* gst/playback/gstfactorylists.c: (compare_ranks),
(decoders_filter), (sinks_filter), (gst_factory_list_is_type),
(element_filter), (gst_factory_list_get_elements),
(gst_factory_list_debug), (gst_factory_list_filter):
* gst/playback/gstfactorylists.h:
Simplify the API, allow getting elements based on mask.
* gst/playback/gstplay-marshal.list:
Add some more marshallers.
* gst/playback/gstplaybin2.c: (init_group), (gst_play_bin_init),
(gst_play_bin_finalize), (pad_removed_cb), (autoplug_factories_cb),
(autoplug_select_cb), (activate_group):
Add support for managing non-raw sinks by providing a custom element and
sink list to decodebin2.
Try to plug non-raw sinks when decodebin2 using autoplug-select of
decodebin2.
* gst/playback/gstplaysink.c: (gen_video_chain), (gen_audio_chain),
(gst_play_sink_set_mode), (gst_play_sink_request_pad):
* gst/playback/gstplaysink.h:
Add support for raw and non-raw sinks.
Add support to force sinks selected by playbin2.
Don't plug raw converters for non-raw sinks.
* gst/playback/gsturidecodebin.c: (_gst_array_accumulator),
(_gst_select_accumulator), (gst_uri_decode_bin_class_init),
(proxy_autoplug_select_signal), (gst_uri_decode_bin_plugin_init),
(plugin_init):
Use right accumulators.
Proxy new signal.
Original commit message from CVS:
* gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init),
(gst_decode_group_check_if_drained), (source_pad_event_probe),
(remove_fakesink):
Add drained signal fired when decodebin finishes decoding the data.
Remove deprecated STATE_DIRTY message.
* gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_class_init),
(unknown_type_cb), (new_decoded_pad_cb), (pad_removed_cb),
(analyse_source), (proxy_drained_signal), (make_decoder),
(source_new_pad), (value_list_append_structure_list),
(handle_redirect_message), (handle_message):
Proxy the new drained signal.
Handle pad removed from decodebin.
Handle redirect messages by sorting multiple redirections based on the
connection speed.
Original commit message from CVS:
* gst/playback/gsturidecodebin.c:
(gst_uri_decode_bin_autoplug_continue),
(gst_uri_decode_bin_class_init), (no_more_pads_full):
Implement default signal handler so that we return TRUE when nothing is
connected.
Original commit message from CVS:
* gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init),
(gst_decode_bin_dispose), (gst_decode_bin_set_caps),
(gst_decode_bin_set_subs_encoding),
(gst_decode_bin_get_subs_encoding), (gst_decode_bin_set_property),
(gst_decode_bin_get_property), (analyze_new_pad):
Move subtitle encoding property to decodebin2 so that it can set the
property value on all elements that it autoplugs and that require it.
Make caps refcounting more consistent in get/set.
* gst/playback/gsturidecodebin.c: (_gst_boolean_accumulator),
(gst_uri_decode_bin_class_init), (gst_uri_decode_bin_init),
(gst_uri_decode_bin_finalize), (gst_uri_decode_bin_set_property),
(gst_uri_decode_bin_get_property), (proxy_unknown_type_signal),
(proxy_autoplug_continue_signal),
(proxy_autoplug_factories_signal), (proxy_autoplug_select_signal),
(make_decoder):
Proxy properties and relevant signals from the internal decodebin.
Make properties MT safe.
Original commit message from CVS:
* gst/playback/gsturidecodebin.c: (no_more_pads_full),
(new_decoded_pad), (remove_pads), (make_decoder), (setup_source),
(gst_uri_decode_bin_change_state):
Make sure we name srcpads uniquely even when using different internal
decodebins.
Signal no-more-pads when no more dynamic elements exist.
Remove pads on cleanup.
Original commit message from CVS:
* gst/playback/gstdecodebin2.c: (gst_decode_bin_factory_filter):
Make decodebin2 autoplug depayloaders too.
* gst/playback/gsturidecodebin.c: (source_new_pad):
Set the newly created decoder in a usable state when autoplugging a
dynamic source such as RTSP.
Original commit message from CVS:
* gst/playback/gstqueue2.c: (update_rates):
Tweak the buffering thresholds a little.
Update the buffer size with the previously calculate rate instead of
only when we calculate a new rate so that we get smoother buffering
updates.
* gst/playback/Makefile.am:
* gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_base_init),
(gst_uri_decode_bin_class_init), (gst_uri_decode_bin_init),
(gst_uri_decode_bin_finalize), (gst_uri_decode_bin_set_property),
(gst_uri_decode_bin_get_property), (unknown_type),
(add_element_stream), (no_more_pads_full), (no_more_pads),
(source_no_more_pads), (new_decoded_pad), (array_has_value),
(gen_source_element), (has_all_raw_caps), (analyse_source),
(remove_decoders), (make_decoder), (remove_source),
(source_new_pad), (setup_source), (decoder_query_init),
(decoder_query_duration_fold), (decoder_query_duration_done),
(decoder_query_position_fold), (decoder_query_position_done),
(decoder_query_latency_fold), (decoder_query_latency_done),
(decoder_query_seeking_fold), (decoder_query_seeking_done),
(decoder_query_generic_fold), (gst_uri_decode_bin_query),
(gst_uri_decode_bin_change_state), (plugin_init):
New element that intergrates a source, optional buffering element and
decodebin.