Commit graph

1398 commits

Author SHA1 Message Date
Edward Hervey
8c2481dd57 check: Use g_strcmp0 instead of strcmp
Avoids segfaults when using NULL arguments.
2010-08-30 12:48:40 +02:00
Sebastian Dröge
2dfb0d2772 base: Stop using GST_FLOW_IS_FATAL()
And document the special handling of WRONG_STATE.
2010-08-27 16:59:09 +02:00
Wim Taymans
f8abf35000 basetransform: recover from invalid downstream suggestions
When we are handling a buffer and need to allocate an output buffer, handle the
case when downstream suggests us a format that we can't convert the input buffer
to. In that case, check if there is another format available downstream instead
of failing.

Fixes #621332 and see also #614296
2010-08-26 15:18:47 +02:00
Thiago Santos
ac9bfe25ae gstcollectpads: Fix docs about GstCollectData list
Add to the docs the fact that is only safe to iterate
GstCollectPad's data list inside the collected callback.

Fixes #610366
2010-08-12 16:05:35 -03:00
Sebastian Dröge
27bebf7456 basesrc: Make sure the buffer metadata is writable before changing it 2010-08-06 18:44:33 +02:00
Stefan Kost
2237af4b6b debug: logging improvements
Use the event serialisation. Log formats name instead of number.
2010-08-05 10:31:50 +03:00
Stefan Kost
5d0015048b check: don't use c++ keywords as variable names 2010-08-05 10:31:50 +03:00
Stefan Kost
71b494639b basesrc: log seek event details 2010-08-05 10:31:50 +03:00
Stefan Kost
a82b607885 basesrc: avoid some caps manipulation
After the intersect we have writable caps. Copy the template caps so that also
there we have writable caps.
2010-08-05 09:40:02 +03:00
Thiago Santos
1b99e2e2dc bytereader: Fix docs
Fix typo in docs for the unsigned peek functions
2010-08-04 13:47:23 -03:00
Rob Clark
29289ee79e basetransform fix for upstream caps-renegotiation
If initially pass-through caps are negotiated between a transform element's
sink and src pads, but then the downstream element returns different caps
on a buffer from pad_alloc(), basetransform gets stuck with proxy_alloc=TRUE
even though the upstream peer doesn't accept the caps, causing
gst_pad_peer_accept_caps() to be called on each buffer in _buffer_alloc():

    if (!gst_caps_is_equal (newcaps, caps)) {
      GST_DEBUG_OBJECT (trans, "caps are new");
      /* we have new caps, see if we can proxy downstream */
>>    if (gst_pad_peer_accept_caps (pad, newcaps)) {
        /* peer accepts the caps, return a buffer in this format */
        GST_DEBUG_OBJECT (trans, "peer accepted new caps");

which is taking ~40ms/frame.

This patch does two things.  (1) if the buffer returned from pad_alloc() has
new caps, trigger the decision whether to proxy the buffer-alloc to be
revisited, and (2) disable proxy if peer does not accept new caps.  (The first
part may not be strictly needed, but seemed like a good idea.)

Note that this issue would not arise except in case of downstream elements
who have on their template-caps, some that would be suitable for pass-through,
but at runtime pick more restrictive caps (for ex, after querying a driver for
what formats it actually supports).
2010-07-27 17:34:49 +02:00
Thiago Santos
574e6ab423 basetransform: Try suggesting caps on bad caps pad_alloc
When basetransform received an unsupported caps on pad_alloc
it just returned not-negotiated. This patch makes it query
the allowed caps between his sinkpad and upstream's srcpad
to find a caps to suggest.

This happens when dinamically switching pipeline elements
and upstream pad_allocs with the previous caps that was
being used.

Fixes #614296
2010-07-26 14:49:14 -03:00
Sebastian Dröge
29a35e70e1 basetransform: Allow the subclass to add new fields to caps when getting new caps from downstream
This was already done in all other cases where new caps are handled
except upstream negotiation.
2010-07-17 21:30:18 +02:00
Tim-Philipp Müller
da289fd8e9 gstcheck: fix some silly list iteration code
g_list_length() is not the best way to check if a list is empty or not.
2010-07-16 18:20:57 +01:00
Sebastian Dröge
55986b9a10 basesrc: Return values in stream time for the POSITION query
Fixes bug #623622.
2010-07-16 17:26:54 +02:00
Sebastian Dröge
249c4c18d0 basesink: Implement GstElement::get_query_types() 2010-07-16 17:26:50 +02:00
Sebastian Dröge
b2e7c4bd45 basesink: Only answer the SEGMENT query in pull mode
Otherwise the element handling the seeks should answer this query.

Fixes bug #623622.
2010-07-16 17:26:31 +02:00
Sebastian Dröge
e2db318921 basetransform: Implement POSITION query
Fixes bug #623541.
2010-07-16 17:26:22 +02:00
Alessandro Decina
3a553f4eda basesink: add accessors for the enable-last-buffer property.
API: gst_base_sink_set_last_buffer_enabled
API: gst_base_sink_is_last_buffer_enabled
2010-07-06 16:39:18 +02:00
Alessandro Decina
f079ff3f20 basesink: add new enable-last-buffer property.
Add a new enable-last-buffer property. When false, it disables storing the last
received buffer in basesink::last-buffer. This can be useful in cases where
buffers need to be released asap.

API: GstBaseSink::enable-last-buffer
2010-07-06 12:38:21 +02:00
Sebastian Dröge
e0467b0100 controller: Fix build with GST_REMOVE_DEPRECATED 2010-06-25 18:25:40 +02:00
Sebastian Dröge
a15344515a basesink: Initialize jitter to prevent printing an uninitialized variable if waiting for the clock failed 2010-06-17 13:20:13 +02:00
Wim Taymans
f80a824a2f basetransform: reevaluate proxy_alloc when reconfigured
When we reconfigure the transform element, make sure we reevaluate the proxying
of buffer_alloc the next time around.

Fixes #621332
2010-06-14 16:20:18 +02:00
Mark Nauwelaerts
7e23719a74 adapter: optimize progressive masked_scan
Retain the last scanned buffer entry and offset, so we can resume buffer
scanning there in case of a typical progressive scan.
Also potentially optimize _copy subsequently occurring in that area.
2010-06-14 15:09:59 +02:00
Mark Nauwelaerts
d5ed339f20 adapter: add extended masked_scan_uint32_peek that also provides matching value
Also add to .def and docs.

Fixes #619828.

API: gst_adapter_masked_scan_uint32_peek
2010-06-14 15:09:38 +02:00
Wim Taymans
76f7a001fc basetransform: add accept_caps vmethod
Allow subclasses to override the acceptcaps function because in some cases a
custom implementation can be much much faster than the default one.

See #621190
2010-06-14 12:45:20 +02:00
Olivier Crête
828f2a3389 basetransform: Assume size is the same if no transform_size/get_unit_size
Subclasses that don't implemen transform_size should be assumed to produce output
buffers of the same size.

https://bugzilla.gnome.org/show_bug.cgi?id=621334
2010-06-14 10:52:22 +02:00
Sebastian Dröge
83929a5849 basesink: Make sure we have a valid object to render in _render_object() 2010-06-13 18:05:41 +02:00
Sebastian Dröge
e6e29192bc Remove some dead assignments 2010-06-13 17:08:48 +02:00
Stefan Kost
6ea0bdadd5 check: use globbing for selective test invocation via GST_CHECKS
Use glib globbing instead of simple string matching to allow e.g.
GST_CHECKS="test_inter*" make gst/gstcaps.check
2010-06-06 23:19:58 +03:00
Stefan Kost
9b5bc5199e basetransform: avoid a caps-copy
We can simply truncate the caps, as 'othercaps' is the result of intersect
operations and thus ours and writable.
2010-06-05 23:20:50 +03:00
Philippe Normand
6b8baaed50 basesink: Make gst_base_sink_query return TRUE if the segment query succeeded.
Fixes bug #620490.
2010-06-03 17:40:45 +02:00
Tim-Philipp Müller
53c122df2b check: log plugins available to unit tests and their paths 2010-06-01 12:03:56 +01:00
Mark Nauwelaerts
aa8b8b57d7 adapter: fix _try_to_merge_up
That is, provide correct return value (as documented), and actually
loop to consider more than the first 2 buffers.
2010-05-27 14:57:29 +02:00
Mark Nauwelaerts
7479b64a2a collectpads: fix documentation glitch 2010-05-27 14:57:26 +02:00
Wim Taymans
3d72274b19 basesink: add jitter to debug output 2010-05-18 18:38:14 +02:00
Stefan Kost
a1c2071300 basesrc: reflow to truncate caps just once
We get writable caps from the intersection (unless it failed). As we truncate
those anyway, we don't need to manualy copy the first structure.
2010-05-06 17:04:53 +03:00
Tim-Philipp Müller
f77f7e987c docs: document that gst_byte_writer_put_string*() writes the terminator too 2010-05-05 16:34:47 +01:00
Wim Taymans
6e4fde7195 docs: clarify the pull_range functions
Clarify the gst_pad_pull_range(), GstBaseSrc::create(), gst_pad_get_range()
and GstPadGetRange functions a little.

Fixes #617733
2010-05-05 12:01:50 +02:00
Wim Taymans
d00e97b7ea basesrc: improve debugging 2010-05-04 11:45:02 +02:00
Stefan Kost
c96dec2a06 basesink: implement percentage position and duration queries
If upstream does not handle them, then implement those ourself.
2010-04-30 10:03:38 +03:00
Stefan Kost
c29e34113f basesink: use gst_pad_peer_query instead of reinventing. 2010-04-30 10:03:38 +03:00
Stefan Kost
2d49414eef queries: add more logging
Log human readable formats and log query result.
2010-04-30 10:03:38 +03:00
Benjamin Otte
6fb4cda8fb controller: Fix gst_interpolation_control_source_find_control_point_iter
The logic in that function is broken. Various NULL-checking bandaids for
guaranteed non-NULL variables didn't even help there.

This patch updates the function to check if a previous item exists
before fetching it instead of after. This makes all other tests
unnecessary.
In particular, it makes the check for an empty list unnecessary, because
for empty lists the only iter is the begin iter (and the end iter) and
so the new check catches that case.

https://bugzilla.gnome.org/show_bug.cgi?id=616846
2010-04-26 16:46:11 +02:00
Sebastian Dröge
69992811f4 lfocontrolsource: Use correct setter for double GValues 2010-04-15 22:05:38 +02:00
Tim-Philipp Müller
47ac7cf1fc build: when building executables, put libs to link to into LDADD instead of LDFLAGS
Use foo_LDADD instead of foo_LDFLAGS to specify the libraries to link to.
This should make sure arguments are passed to the linker in the right
order. See #615697.
2010-04-14 11:23:37 +01:00
Stefan Kost
dbfebe4348 build: fix out of sourcedir build for check
Move the internal header to nodist (as we copy it around anyway).
Use builddir in pattern substitution for it.
Fixes #61483.
2010-04-06 21:22:22 +03:00
Jonas Holmberg
a120f9f4e6 basesrc: fix gst_base_src_new_seamless_segment()
Keep track of pending newsegment in gst_base_src_new_seamless_segment()
to avoid pushing newsegment update before newsegment.
2010-04-06 17:41:34 +02:00
Tim-Philipp Müller
c4a4f2dad2 libs: point gobject-introspection scanner to .la files
Point g-ir-scanner to the .la file of our library, which hopefully
makes it find the right dependencies in all cases (ie. our locally
built libgstreamer and not the system-installed one). This is also
how it's done in Gtk+ and how it's documented in the wiki, see
http://live.gnome.org/GObjectIntrospection/AutotoolsIntegration

Based on patches by Vincent Untz and Alan Knowles.

Fixes #603710.
2010-04-03 13:41:52 +01:00
Thiago Santos
7558fed51b basetransform: Refactor caps suggestion on pad_alloc
Refactor the handling of sink suggestion caps variable
so that it always has a ref to the caps it points to.

Makes the code clearer.
2010-03-29 16:05:32 -03:00
Alan Knowles
f38d864bf7 net: fix typo in net client clock structure
It's sockaddr_in, not sockaddr_id.
2010-03-29 10:25:07 +01:00
Tim-Philipp Müller
1a72c2f01b libs: don't use fancy shell features when invoking gobject-introspection scanner
It's POSIX, but tcsh doesn't seem to support it.
2010-03-25 15:54:19 +00:00
Tim-Philipp Müller
8cc7274163 libs: fix PKG_CONFIG_PATH used when calling gobject-introspection scanner
Our own pkgconfig directory should come first, so that pkg-config uses
the in-tree libgstreamer and not some external one when --pkg=gstreamer-0.10
is passed to g-ir-scanner.

See #603710.
2010-03-25 13:48:19 +00:00
Edward Hervey
7a8004233a GstAdapter: add a unchecked variant of flush for internal usage
Trims off 10-20% cpu time when using gst_adapter_take[_buffer]
2010-03-25 10:28:21 +01:00
Robert Swain
9b6f93dcf3 basetransform: Implement QoS message posting
And some more for bug #322947
2010-03-18 16:57:17 +01:00
Wim Taymans
ba34494ce3 basesrc: catch, parse and store QoS event values
Catch, parse and store the QoS values from QoS events for later use.
2010-03-18 13:41:35 +01:00
Robert Swain
d576c1105e basesink: Implement QoS message posting in basesink
Post QoS messages when frames are dropped.
This goes a little further towards resolving bug #322947
2010-03-18 13:04:34 +01:00
Sebastian Dröge
32b1ea4769 controller: Mark property_name in GstValueArray as const
This won't and should not be changed from any API
2010-03-17 12:18:18 +01:00
Mart Raudsepp
96bff7ac62 docs: add missing "Since: 0.10.26" marker for gst_data_queue_new_full() 2010-03-17 11:03:15 +00:00
Tim-Philipp Müller
422e9c4ce3 docs: fix Since markers for gst_byte_writer_put_float*()
As the headers were broken in 0.10.26 the functions weren't really
usable back then, so we should advertise them as being there only
since 0.10.27.

Spotted by Mart Raudsepp.
2010-03-17 11:03:15 +00:00
Thiago Santos
a6a3c129d1 basetransform: Accept non-fixed caps suggestions
When doing pad_allocs, use non-fixed caps suggestions and
try to fixate them before using. This makes possible to
have suggested buffer size with 0 in basetransform just
to signal upstream a renegotiation is needed

Fixes #576234
Fixes #609046
2010-03-16 17:12:37 -03:00
Sebastian Dröge
2e05ca5de4 bytewriter: Use correct gtk-doc workaround 2010-03-15 14:52:41 +01:00
Sebastian Dröge
1d316d75bb interpolationcontrolsource: Don't pass NULL to the GSequence API 2010-03-12 15:40:37 +01:00
Benjamin Otte
7e7f51f617 Fixes for -Wmissing-declarations -Wmissing-prototypes
Also adds those flags to the configure warning flags

https://bugzilla.gnome.org/show_bug.cgi?id=611692
2010-03-11 10:59:57 +01:00
Benjamin Otte
a9d1a493a7 Fixes for -Wwrite-strings
This changes some APIs in compatible ways:
- Some functions now take "const char *" arguments, not "char *"
- Some structs now have "conts char *" members, not "char *"
The changes may cause warnings when compiling with the right warning
flags. You've been warned.

Also adds -Wwrite-strings as a warning flag in configure.ac.

https://bugzilla.gnome.org/show_bug.cgi?id=611692
2010-03-10 20:50:10 +01:00
Benjamin Otte
e8f65e8bff Make code safe for -Wredundant-decls
Adds that warning to configure.ac

Includes a tiny change of the GST_BOILERPLATE_FULL() macro:
The get_type() function is no longer declared before being defined.

https://bugzilla.gnome.org/show_bug.cgi?id=611692
2010-03-10 20:45:33 +01:00
Sebastian Dröge
ce74a1ae19 build: Make some more rules silent if requested 2010-03-09 20:57:17 +00:00
Sebastian Dröge
e6ff20c416 lfocontrolsource: Optimize get_value_array()
Don't convert from GValue to the actual type for every single
value.
2010-03-09 20:57:16 +00:00
Sebastian Dröge
c6e7cf626a interpolationcontrolsource: Optimize get_value_array()
This makes it >10x faster if more than a single value is requested
by not searching in the GSequence for every value and converting
the value from GValue to the real value type.
2010-03-09 20:57:16 +00:00
Tim-Philipp Müller
91a09b9fd4 docs: fix up bytewriter doc chunks for float functions as well 2010-03-03 12:06:30 +00:00
Tim-Philipp Müller
e50b9aa71e bytewriter: fix headers for float/double writing functions
The functions are called gst_byte_writer_put_{float32|float64}_*() and not
gst_byte_writer_put_{float|double}_*().

Spotted by: Benjamin Otte <otte@redhat.com>
2010-03-03 11:28:27 +00:00
Mark Nauwelaerts
8cdf5a586f basesink: fix emergency rendering timestamp tracking
Specifically, if all (including initial) buffers turn up late,
emergency rendering should also kick in appropriately.

Fixes #611087.
2010-02-26 15:48:41 +01:00
Sebastian Dröge
b30c7d370e interpolationcontrolsource: Don't pass NULL pointers to GSequence API
This causes assertion failures. Fixes bug #610444.
2010-02-19 14:31:54 +01:00
Sebastian Dröge
82f380704a interpolationcontrolsource: Add const qualifiers to values in the _set functions
The values are not modified and are copied, a const before the parameter
should make this even more obvious.
2010-02-19 14:31:54 +01:00
Sebastian Dröge
4f840e05fd controller: Add some FIXME 0.11 comments 2010-02-19 14:31:54 +01:00
Tim-Philipp Müller
a39bca5f66 gstcheck: more debug logging for gst_check_element_push_buffer_list() 2010-02-18 20:08:39 +00:00
Thiago Santos
035e5c74be collectpads: Improve docs about 'data' attribute
Adds a reminder to 'data' attribute doc

Fixes #610366
2010-02-18 17:00:05 -03:00
Edward Hervey
bc9e129990 basesrc: Don't use expensive cast checks in get_range.
_get_range() is a pad function set by ourselves, therefore we're certain that
the parent is a GstBaseSrc.

Speeds up _get_range by 38%, and the total call by 30%. (valgrind instruction
calls measurements).

Fixes #610246
2010-02-17 12:36:57 +01:00
Tim-Philipp Müller
5a44034753 docs: fix gtk-doc chunk for gst_check_element_push_buffer_list() 2010-02-15 01:24:25 +00:00
Thiago Santos
bfff7a1b4e bytewriter: add _fill function
Adds a new function to GstByteWriter that writes
a constant value to a memory area (aka memset).
Useful for adding padding to buffers.

Also updates .def file and docs.

API: gst_byte_writer_fill()
2010-02-12 17:23:29 -03:00
Sebastian Dröge
fae502056f basesrc: Make locking of the segment a bit more strict and update documentation
Updating the segment values must only be done while holding the
STREAM_LOCK and OBJECT_LOCK. This means, reading can be done as
long as one of them is held, not both, which removes some lock-unlock
blocks from performance critical code paths.

Also document, that gst_base_src_set_format() *must* be called in
states <= READY and add an assertion for this. Changing the format
later will completely mess up the segment information.
2010-02-12 14:58:42 +01:00
Sebastian Dröge
5998e902a3 basesrc: Protect segment values from concurrent access from different threads
This could happen easily in the query functions or when the size is set
on appsrc from some non-streaming thread.
2010-02-12 11:02:08 +01:00
Thiago Santos
86a216b1ba gstbytewriter: Fix different function names in .h and .c
gst_byte_writer_reset_and_get_buffer wasn't declared
in .h, instead there was _reset_and_get_data_as_buffer.

Replace it with the real function name, that is smaller
and matches gst_byte_writer_free_and_get_buffer

https://bugzilla.gnome.org/show_bug.cgi?id=608726
2010-02-01 17:47:25 -03:00
Tim-Philipp Müller
087aa6ced4 gst_private.h: make sure gst_private.h is included before glib.h
For the reason outlined at the beginning of gst_private.h (inline
functions in glib may need the g_log_domain variable). Also include
gst_private.h before using any G_OS_* defines, esp. in plugin loader.
2010-01-20 01:48:56 +00:00
Sebastian Dröge
743cde4b49 basetransform: Only use suggested caps in buffer allocation if a size was suggested too 2010-01-17 08:23:48 +01:00
Sebastian Dröge
0a0c32ef88 basetransform: Handle buffers with NULL caps correctly
This means that the caps didn't change so don't try to handle
the NULL caps as the new caps.
2010-01-14 20:19:05 +01:00
Wim Taymans
8fff434835 typefind: add a new method that also uses the file extension
Add a method to perform get_range typefinding that also uses the
uri/location extension as an extra hint. It will first try to call the
typefind functions of the factories that handle the given extension. The result
is that in the common case, we only call one typefind function, which speeds up
the typefinding a lot.
2010-01-12 17:34:39 +01:00
Tim-Philipp Müller
5a12d1efa5 check: remove some cruft from header file
Remove some cruft from the gstcheck header file that's not needed
any longer now that we ship with our own copy of libcheck.
2010-01-10 17:39:55 +00:00
Tim-Philipp Müller
9f99d056a2 check: patch internal check copy some more so that failures actually fail
Include unistd.h so that _POSIX_VERSION is actually defined when
it should be defined. Without that, stuff like fail_if(1) doesn't
actually fail, presumably because other parts of the code do include
unistd.h and then have _POSIX_VERSION defined.

Fixes #604565 even more.
2010-01-05 01:41:18 +00:00
Wim Taymans
d7ecbc6ac3 collectpads: don't keep buffers reffed longer than needed
Make sure we take ownership of the buffer early without increasing its refcount
when we go in the collect function. This reduces the amount of copies needed in
order to make the buffer writable in most cases.
2009-12-24 19:25:52 +01:00
Wim Taymans
633e8f4d9f collectpads: avoid doing subbuffers when we can
In some cases we can avoid allocating a subbuffer and instead simply ref
the buffer. Callers should perform _make_metadata_writable() in all
cases now.
2009-12-24 16:53:15 +01:00
Wim Taymans
4718b7ef09 collectpads: add ability to install clipping functions
Add a method to install a clipping function that is called when a buffer is
received. Users of collectpads can then perform clipping on the incomming
buffers.

Also retab the header file a little.

See #590265
2009-12-24 15:25:14 +01:00
Руслан Ижбулатов
e08cb58aa8 check: patch internal check copy so it works with our build system
Fixes #604565.
2009-12-19 14:12:09 +00:00
Руслан Ижбулатов
dd77e42e91 check: update autotools and docs stuff for new check version 2009-12-19 14:03:42 +00:00
Tim-Philipp Müller
8e5f17d07f check: update internal libcheck to 0.9.8 2009-12-17 21:18:41 +00:00
Wim Taymans
a3fdb45aa6 basesink: add some more debugging 2009-12-11 16:19:18 +01:00
Sebastian Dröge
25fc43487b basesink: Allow update NEWSEGMENT events after EOS
This allows demuxers to update the segment stop of an already
finished stream. This might be needed if some stream goes to
EOS before the duration of the longest stream is known to properly
set the segment stop of all streams to the same value in the end.
2009-12-08 15:24:43 +01:00
Jan Schmidt
f490508490 basesrc: Shut down the pad task when the initial seek fails.
Set the pad flushing and stop the pad task when the initial seek fails
during activation. Avoids racy calls into the _create() function when
BaseSrc::stop() has already run.

Fixes: #603059

Also, fix some misspelled comments.
2009-12-04 12:41:58 +00:00
Edward Hervey
efa5aee509 basesrc/basesink: Register debug funcptr only once.
Makes basesrc/basesink initialization 3-4 times faster and avoids
contention on the global funcptr lock
2009-12-01 19:27:47 +01:00
Wim Taymans
8d34217dcc basesink: clip stepping boundaries
Rounding errors with the floating point rate could make it so that we
don't end up exactly at the required stepping duration.
Use the segment clipping boundaries, which are not subject to rate
adjustements, instead to detect when we reached the stepping duration.

Add some debug info related to going to the PAUSED state.
2009-11-28 22:34:19 +01:00