Revisit these strings now that the change regarding the message source
object in gst_element_found_tags_for_pad() got reverted. Try to refer
explicitly to what kind of element it is (element, pad, etc.) in some
cases, which is nicer than having to deduce this info (and we can
re-use the already existing translated strings for the most common
case). It also makes for better example code, since it's clear now
that the message source object doesn't have to be an element.
When it is shutting down a pipeline after ctrl-c, set pipeline to
paused before waiting for the main loop to complete all pending
transactions. Fixes#584657.
If some part of the pipeline is generating signals or idle functions
at a fast rate, waiting for a main loop iteration may never return.
Disable the handling of the CLOCK_LOST messages until we fixed and released the
elements (rtspsrc) that break when we quickly PAUSE/PLAY the pipeline.
Fixes#579127
We should use GLib's g_print*() functions for printing stuff in gst-launch, not printf and friends, since we're printing
translated strings, which we get in UTF-8 encoding, and GLib's print functions expect UTF-8 encoded strings whereas printf
et al. expect strings in the locale encoding, which may or may not be UTF-8.
Also add a PRINT convenience macro so we don't have to litter the code with if (!quiet) statements.
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
Original commit message from CVS:
* tools/gst-launch.c:
Change the printing of the 'buffering...' output to avoid putting
a \r in a translateable string (flagged by the TP).
Original commit message from CVS:
* tools/gst-launch.c:
Dump one graph per pipeline state-change and state change name
(if GST_DEBUG_DUMP_DOT_DIR is set).
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gstclock.h:
* gst/gstdebugutils.c:
* gst/gstinfo.c:
* gst/gstutils.c:
* gst/gstutils.h:
* libs/gst/base/gstbasesink.c:
* tools/gst-launch.c:
Change GST_GET_TIMESTAMP into gst_util_get_timestamp and replace all
uses as we don't have HAVE_POSIX_TIMERS in public headers.
Thanks Tim for spotting.
Original commit message from CVS:
* gst/gstdebugutils.c:
* gst/gstinfo.c:
Fix wrong order of args in GST_CLOCK_DIFF() usage.
* tools/gst-launch.c:
Use new API to get elapsed time.
Original commit message from CVS:
* docs/gst/running.xml:
* gst/gst.c:
* gst/gstdebugutils.c:
* gst/gstdebugutils.h:
* tools/gst-launch.c:
Improve bin graph dumping, by using the envvar to specify a path.
Rename the envvar to GST_DEBUG_DUMP_DOT_DIR.
Original commit message from CVS:
* plugins/elements/gstfakesink.c:
Add some debug text to error message to indicate that
we errored out on request.
* tools/gst-launch.c:
When the state change to PLAYING fails, check for an
error message on the bus and print it.
Original commit message from CVS:
* tools/gst-launch.c: (event_loop), (main):
Don´t try to do any state management when a live pipeline posts
buffering messages.
Also make the buffering string translatable.
Original commit message from CVS:
* gst/gstmessage.h:
Add some more docs for the messages.
* libs/gst/base/gstbasesink.c: (gst_base_sink_commit_state),
(gst_base_sink_query):
Add some more debugging.
* tools/gst-launch.c: (event_loop):
When interrupting, don't try to set pipeline to PAUSED twice.
Original commit message from CVS:
* tools/gst-launch.c: (event_loop):
When buffering goes from a two digit to a single digit number, make sure
to remove the old second digit by writing a blank over it.
Original commit message from CVS:
* tools/gst-launch.c: (event_loop):
Give more interesting info when buffering starts and stops.
Fix case where buffering starts but we fail to update the buffering flag
because the target state is not PLAYING.
Original commit message from CVS:
* gst/gstpipeline.c: (gst_pipeline_change_state),
(gst_pipeline_provide_clock_func), (gst_pipeline_set_delay):
Don't ref a NULL clock in _provide_clock_func().
Don't allow an INVALID delay.
Don't try to calculate base_time with an invalid start_time.
Also distribute and notify a NULL clock when it was selected.
* tools/gst-launch.c: (event_loop):
Don't crash when a NULL clock was selected in the pipeline.
Original commit message from CVS:
* tools/gst-launch.c: (event_loop):
Make sure that we actually show the important message part of a
warning message.
No need to check if the gerror is not NULL to free; first of all
g_free accepts NULL; and second the default error handler would
segfault if gerror was NULL.
Original commit message from CVS:
* tools/gst-inspect.c: (main):
* tools/gst-launch.c: (main):
* tools/gst-typefind.c: (main):
* tools/gst-xmlinspect.c: (main):
Call g_thread_init() really really early, before any other GLib
function (see #342564 and recent discussion on gtk-devel-list).
Original commit message from CVS:
* tests/check/gst/gstcaps.c: (GST_START_TEST), (gst_caps_suite):
Add some tests for gst_caps_intersect().
* tools/gst-launch.c: (event_loop):
Print all buffering percentages we get, even the 100% one.
Original commit message from CVS:
* gst/gstelement.c: (gst_element_post_message),
(gst_element_dispose):
Use _DEBUG_OBJECT some more.
* libs/gst/base/gstbasesrc.c: (gst_base_src_loop):
Avoid typechecks.
* tools/gst-launch.c: (main):
If the toplevel element is not a GstPipeline, it must be put in a
pipeline so that a bus and clock is selected.
Original commit message from CVS:
* tools/gst-launch.c: (sigint_handler_sighandler), (check_intr),
(event_loop), (main):
Added some comments here and there.
Post an application message when an interrupt is caught instead of doing
an uncontrolled state change.
Clean up the event loop.
Handle buffering messages, pause/resume the pipeline.
Make shutdown because of an interrupt more reliable.
Original commit message from CVS:
* gst/gstxml.c: (gst_xml_dispose), (gst_xml_parse_file),
(gst_xml_parse_memory), (gst_xml_get_element):
Chain up to parent class in dispose function and also
unref the elements in the toplevel_elements GList.
Don't leak XmlDocPtr in _parse_file() and _parse_memory().
Always return a reference in gst_xml_get_element() rather
than only sometimes.
* tools/gst-launch.c: (xmllaunch_parse_cmdline):
Don't leak GstXml object.
Original commit message from CVS:
* tools/gst-launch.c: (print_tag):
More space on the left for the tag names, to cater
for the 'extended comment' tag (not touching the
string for the first line since it's translated).
Original commit message from CVS:
* tools/gst-launch.c: (main):
If the top-level of the parse is a normal bin, it doesn't do the
right logic to run as a top-level element, so place it inside a
pipeline.
Original commit message from CVS:
2006-07-08 Andy Wingo <wingo@pobox.com>
* tools/gst-launch.c (main): Handle err == NULL.
* gst/gst.c (init_post, ensure_current_registry)
(ensure_current_registry_forking)
(ensure_current_registry_nonforking): Reduce #ifdef ratnest by
factoring out the registry scanning into separate functions. Don't
fork for the rescan is GST_REGISTRY_FORK=no; useful in debugging.
Better environment var name/interface suggestions accepted.
Original commit message from CVS:
* tools/gst-launch.c: (print_tag):
Fix use of uninitialized variable in the hypothetical
case that some broken plugin creates a GST_TAG_IMAGE
tag containing a NULL buffer (#341667).
Original commit message from CVS:
* tools/gst-launch.c: (print_tag):
Print something more intelligible for image tags when
using the -t switch (#341556).
Original commit message from CVS:
* tools/gst-inspect.c:
* tools/gst-launch.c:
* tools/gst-typefind.c:
* tools/gst-xmlinspect.c:
* tools/tools.h:
Fix up includes: need to include stdlib.h in tools.h for exit().
Original commit message from CVS:
* tools/gst-inspect.c: (main):
* tools/gst-launch.c: (main):
* tools/gst-run.c: (main):
* tools/gst-typefind.c: (main):
* tools/gst-xmlinspect.c: (main):
Use the string passed to g_option_context_new() for
what it's intended for - the program name is already
printed elsewhere.
Original commit message from CVS:
* tools/Makefile.am:
* tools/gst-inspect.c: (main):
* tools/gst-launch.c: (main):
* tools/gst-xmlinspect.c: (main):
* tools/tools.h:
Add back --version command line option (#340460).
* tools/gst-typefind.c: (have_type_handler), (typefind_file), (main):
Add --version option and use GOption for argument parsing; refactor a
bit; accept directories as arguments and recurse into them; lastly,
print a decent error message when things go wrong.
Original commit message from CVS:
* check/gst/gstbin.c: (GST_START_TEST):
* check/gst/gstmessage.c: (GST_START_TEST):
* check/gst/gstpipeline.c: (GST_START_TEST), (message_received):
* gst/gstbin.c: (gst_bin_class_init), (gst_bin_recalc_func),
(bin_bus_handler):
* gst/gstelement.c: (gst_element_abort_state),
(gst_element_commit_state), (gst_element_lost_state):
* gst/gstmessage.c: (gst_message_new_state_changed),
(gst_message_new_state_dirty), (gst_message_new_segment_start),
(gst_message_new_segment_done), (gst_message_new_duration),
(gst_message_parse_state_changed),
(gst_message_parse_segment_start),
(gst_message_parse_segment_done), (gst_message_parse_duration):
* gst/gstmessage.h:
* tools/gst-launch.c: (event_loop):
Seriously, this is better than a previous commit as we only need
to notify the fact that an element changed state in a streaming
thread, marking the state of the parents dirty, hence the
STATE_DIRTY message instead of abusing a boolean in a STATE_CHANGE
message.
Original commit message from CVS:
* check/gst/gstbin.c: (GST_START_TEST):
* check/gst/gstmessage.c: (GST_START_TEST):
* check/gst/gstpipeline.c: (GST_START_TEST), (message_received):
* gst/gstbin.c: (bin_bus_handler):
* gst/gstelement.c: (gst_element_commit_state),
(gst_element_lost_state):
* gst/gstmessage.c: (gst_message_new_state_changed),
(gst_message_new_segment_start), (gst_message_new_segment_done),
(gst_message_new_duration), (gst_message_parse_state_changed),
(gst_message_parse_segment_start),
(gst_message_parse_segment_done), (gst_message_parse_duration):
* gst/gstmessage.h:
* tools/gst-launch.c: (event_loop):
Make messages future proof.
state-change gets a flag if it was a message comming from the
streaming thread.
segment-start/stop can also be specified in other formats.
A message to notify an app that a pipeline changed playback
duration.
Also fix a GstMessage leak in -launch