Commit graph

13168 commits

Author SHA1 Message Date
Thiago Santos
2fbc04e7bc streamsplitter: push pending events before eos
Push any pending events downstream before pushing eos
2014-01-29 13:58:07 -03:00
Thiago Santos
1ae733fd4e tests: audioencoder: add tests analogous to the videoencoder ones 2014-01-29 12:33:59 -03:00
Thiago Santos
e00dc5b879 audioencoder: push pending events and tags before EOS
if there are tags or events pending and an EOS is received, push those
events and tags before the EOS.
2014-01-29 12:33:59 -03:00
Thiago Santos
4fefd48f05 tests: videoencoder: check that tags are pushed before eos
Check that if a new tag event is received right before eos it
is pushed before the eos
2014-01-29 12:33:59 -03:00
Thiago Santos
da54836a33 videoencoder: push tags and events before eos
if any tags or events are pending, push them before pushing eos
2014-01-29 12:33:59 -03:00
Thiago Santos
6684aa42cd tests: videoencoder: basic videoencoder base class test
Adds a single test for video encoding
2014-01-29 12:33:59 -03:00
Sebastian Rasmussen
125b9c19c0 rtpbasepayload: Do cosmetic changes to rtptime calculations
* Change running time type to guint64
 * Use GST_CLOCK_TIME_NONE() to check for invalid timestamps
 * Name variables so ns-based and hz-based timestamps are evident

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=719383
2014-01-28 14:41:41 +01:00
Sebastian Rasmussen
0142cd5e35 rtpbasepayload: Expose running-time of payloaded stream
https://bugzilla.gnome.org/show_bug.cgi?id=719415
2014-01-28 14:41:41 +01:00
Sebastian Rasmussen
865a5d1c8f rtpbasepayload: Improve documentation for perfect-rtptime
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=719383
2014-01-28 14:41:41 +01:00
Sebastian Rasmussen
713dfe0d70 rtpbasepayload: Fix typos in documentation for properties
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=719383
2014-01-28 14:41:41 +01:00
Alessandro Decina
6a699b6c40 decodebin: make it possible to register multiple handlers for autoplug-select
Change the way autoplug-select is accumulated so that it's possible to have
multiple handlers. The handlers keep getting called as long as they keep
returning GST_AUTOPLUG_SELECT_TRY.

One practical example of when this is needed is when hooking into playbin's
uridecodebin, which is perhaps not very elegant but the only way to influence
which streams playbin autoplugs/exposes.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=723096
2014-01-28 13:45:07 +11:00
Sebastian Rasmussen
fa393e5d60 rtpbasepayload: Add statistics property
This property allows for an atomically retrieved set of properties that
can e.g. be used to generate RTP-Info headers.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=719415
2014-01-27 15:11:09 +01:00
Sjoerd Simons
43237ad0e2 uridecodebin: Drop hardcoded list of media suitable for download buffering
Discussion on IRC indicated that the main reason for this list was to
prevent demuxers that can trigger a lot of seeking from using
progressive buffering using queue2 (which due to being seekable triggers
that behaviour).

However given that upstream can indicate seeks are possible but should
be avoided via a scheduling query, this extra whitelisting shouldn't be
necessary for well-behaved demuxers.

https://bugzilla.gnome.org/show_bug.cgi?id=704933
2014-01-24 22:34:51 +01:00
Wim Taymans
4c8e211e57 videoconvert: tweak the scoring algorithm
Make a little table of conversions and manually score them. Use this
info to define better weights for the scoring algorithm.
give separate scores for doing changes and the impact of the change,
This allows us to avoid conversion when we can but still allow fairly
lossless changes.
The old code did not penalize GRAY conversions, PAL conversions were
punished too low and depth conversions too high.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=722656
2014-01-24 12:19:43 +01:00
Wim Taymans
8ac3dbc4f3 video-chroma: don't crash on NULL resamplers
Make dummy resamplers for all cases and only execute the horizontal
resampler instead of crashing.

See https://bugzilla.gnome.org/show_bug.cgi?id=722742
2014-01-23 10:45:00 +01:00
Wim Taymans
6a88d6f8cd audiobasesink: make _get_time more threadsafe
We call the _get_time function from the provided clock and we don't lock
the sink object for performance reasons. Make sure we only read and
check variables once so that they don't change while we are executing
the code.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=720661
2014-01-21 11:25:18 +01:00
Sebastian Dröge
4e3d101aa8 audioresample: It's HAVE_EMMINTRIN_H, not HAVE_XMMINTRIN_H for SSE2 2014-01-20 16:11:04 +01:00
Antoine Jacoutot
daa194b71e audioresample: Fix build on x86 if emmintrin.h is available but can't be used
On i386, EMMINTRIN is defined but not usable without SSE so check for
__SSE__ and __SSE2__ as well.

https://bugzilla.gnome.org/show_bug.cgi?id=670690
2014-01-20 16:08:41 +01:00
Sebastian Dröge
bf4a72a4e6 configure: Initialize Qt variables 2014-01-20 10:30:36 +01:00
Sebastian Dröge
5dd8e9cdd4 examples: Port Qt examples to Qt5 2014-01-20 09:46:15 +01:00
Nicola Murino
26e3c92093 riff: Fix G726 caps creation
https://bugzilla.gnome.org/show_bug.cgi?id=720995
2014-01-19 10:34:57 +01:00
Tim-Philipp Müller
26a57f9a89 discoverer: minor docs fix
Can use a custom main context as well if needed.
2014-01-18 15:01:58 +00:00
Sebastian Dröge
87829debe4 videodecoder: Add API to get the currently pending frame size for parsing
https://bugzilla.gnome.org/show_bug.cgi?id=719890
2014-01-18 13:54:22 +01:00
Wonchul Lee
c2746d753e playbin: Remove unnecessary assignment
Remove duplicated assignment

https://bugzilla.gnome.org/show_bug.cgi?id=722491
2014-01-18 13:33:57 +01:00
Sebastian Dröge
4f8f5918be playbin: Insert decoders without GstAVElement information between the other decoders
Otherwise they would be preferred over all decoders independent
of their ranks.

https://bugzilla.gnome.org/show_bug.cgi?id=722316
2014-01-18 13:33:57 +01:00
Sebastian Dröge
6b46019abf playbin: Only put parsers and sinks first, not all non-decoders
https://bugzilla.gnome.org/show_bug.cgi?id=722316
2014-01-18 13:33:57 +01:00
Thiago Santos
1d75bdca92 tests: videodecoder: plug a few leaks
Remove leaks of caps and events references
2014-01-17 11:21:33 -03:00
Thiago Santos
47f720a8f0 videodecoder: plug leak when frames are released on subclass stop
They end up stored in the 'pending_events' list and should be
freed after calling stop
2014-01-17 11:21:33 -03:00
Sebastian Dröge
2aa26a9807 gst-play: Handle CLOCK_LOST message
It is necessary for playbin gapless playback when switching
between audio-only and video-only files for example.
2014-01-17 15:13:15 +01:00
Wim Taymans
5df274f824 streamsplitter: handle ACCEPT_CAPS query correctly
We can accept a caps when one of the downstream peers can accept the
caps. This is not the same as checking a subset of the getcaps
result because parsers might accept broader caps than what their getcaps
function returns (See https://bugzilla.gnome.org/show_bug.cgi?id=677401).

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=722330
2014-01-16 16:32:34 +01:00
Thiago Santos
36efe20679 tests: audiodecoder: add another test for negotiation with gap event
Check that even if the subclass doesn't call set_output_format, the base
class should use upstream provided caps to fill the output caps that is
pushed before the gap event is forwarded, otherwise it ends again fixating
the rate and channels to 1.

https://bugzilla.gnome.org/show_bug.cgi?id=722144
2014-01-15 15:20:39 -03:00
Thiago Santos
695ddbd56f audiodecoder: copy rate and channels from input before fixating output caps
For default caps generation when handling gap events that are sent
before any buffer, try to use caps that are closer to what upstream
provided to avoid fixating rate or channels to 1 as default.

So there are the steps:
1) Try to set rate, channels and channel-mask from upstream if provided
2) Fixate the rate and channels to the default rate and channels from
   audio lib
3) Fixate the caps just to be sure everything is fixed
4) If no channel-mask was provided and channels > 2, use a default
   channel-mask (taken from audioconvert code)

https://bugzilla.gnome.org/show_bug.cgi?id=722144
2014-01-15 15:20:39 -03:00
Holger Kaelberer
ae4338bd35 xvimagesink: don't recreate xvcontext
A xvcontext can be created early in gst_xvimagesink_set_window_handle().
In this case don't recreate, i.e. overwrite it in gst_xvimagesink_open().
Otherwise XEvents won't be handled in the xevent listener thread.

Fixes a regression when setting the window handle on the sink in
the very beginning before changing its state.

https://bugzilla.gnome.org/show_bug.cgi?id=715138
2014-01-15 11:06:09 +01:00
Vincent Penquerc'h
b532ce16a5 oggdemux: fix broken seeking reading the whole file
A change in gst_ogg_demux_do_seek caused oggdemux to wait for
a page for each of the streams, including a skeleton stream if
one was present. Since Skeleton only has header pages, that
was never going to end well.

Also, the code was skipping CMML streams when looking for pages,
so would also have broken on CMML streams.

Thus, we change the code to disregard Skeleton streams, as well
as discontinuous streams (such as CMML and Kate). While it may
be desirable to consider Kate streams too (in order to avoid
losing a subtitle starting near the seek point), this may be
a performance drag when seeking where no subtitles are. Maybe
one could add a "give up" threshold for such discontinuous
streams, so we'd get any page if there is one, but do not end
up reading preposterous amounts of data otherwise.

In any case, it is important that the code that determines
the amount of streams to look pages for remains consistent with
the "early out" conditions of the code that actually parses
the incoming pages, lest we never decrease the pending counter
to zero.

This fixes seeking on a file with a skeleton track reading all
the file on each seek.

https://bugzilla.gnome.org/show_bug.cgi?id=719615
2014-01-14 12:48:45 +00:00
Vincent Penquerc'h
25bf5a13f0 oggdemux: use an adaptive chunksize for performance reasons
Ogg data is read chunk by chunk, and the chunk size used was
originally taken from libvorbisfile. However, this value leads
to poor performance when used on an Ogg file with large pages
(Ogg pages can be close to 64 KB).

We can't just use a larger chunk size, since this will decrease
performance on small page streams, so we use an adaptive scheme
where the chunk size is twice the largest page size we've seen
so far in the stream. For "typical" Ogg/Vorbis, this gives us
almost the same chunk size (a bit lower), and this lets us get
better performance on streams with large pages.
2014-01-14 12:48:45 +00:00
Thiago Santos
95a56dbda7 audiodecoder: avoid parsing caps event if it is not used
Saves some cpu
2014-01-14 09:34:44 -03:00
Thiago Santos
8cf8332b91 audiodecoder: make sure caps is set before forwarding gap event
Before trying to generate a default fixated caps when handling a gap
event, make sure that the same strategy that is used when handling
a buffer has been attempted. Otherwise audiodecoder will ignore
upstream caps settings such as rate and channels and will likely
end with a caps with channels=1 and rate=1.

https://bugzilla.gnome.org/show_bug.cgi?id=722144
2014-01-14 09:34:44 -03:00
Thiago Santos
bbbd9f7d49 tests: audiodecoder: check that negotiation works buffers and gaps
Adds 2 tests to verify that output caps are the expected value, reusing
input structure values for both buffers and gaps

https://bugzilla.gnome.org/show_bug.cgi?id=722144
2014-01-14 09:34:44 -03:00
Thiago Santos
755414ed1e tests: audiodecoder: add basic playback test for audio decoder
Simple test that just check that audio decoding works as expected

https://bugzilla.gnome.org/show_bug.cgi?id=722144
2014-01-14 09:34:44 -03:00
Sebastian Dröge
335e6e888d videoverlay: Don't mention gconf elements and add a sentence about playbin/playsink
playbin/playsink now implement the video overlay interface
2014-01-14 13:20:48 +01:00
Tim-Philipp Müller
103bb93154 win32: add new API to .def file 2014-01-13 16:29:50 +00:00
Wim Taymans
ecac298e4e videodecoder: only copy chroma_site when known
Only overwrite the chroma-site if we have a valid value in the reference
format.
2014-01-13 17:24:01 +01:00
Wim Taymans
1fa70ac02d videoconvert: don't interpolate chroma in I420 -> RGB
Don't try to interpolate the chroma samples, the used algorithm only
works for horizontal cositing. Let's switch to a faster and safer
version until we handle chroma siting correctly in the fastpaths.
2014-01-13 17:24:01 +01:00
Wim Taymans
fba783a5fe videoutils: add some debug 2014-01-13 17:24:01 +01:00
Nicolas Dufresne
016e5285c7 doc: Add new sections introduce for tile format
https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:47:28 -05:00
Nicolas Dufresne
595bcfb4d7 video: Generate types for tile enumeration
https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:47:23 -05:00
Nicolas Dufresne
f52fd7a68b video: Don't use extra plane and componenent for tile format
Instead of using extra plane, we encode the number of tiles in x and y in the stride of
each planes (i.e. y_tiles << 16 | x_tiles) and introduce tile_mode, tile_width and
tile_height into GstVideoFormatInfo structure.

https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:47:03 -05:00
Wim Taymans
d899e6df5a video: rename NV12T -> NV12_64Z32
Is a bit more descriptive and allows us to add more tiled types
later.

https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:46:52 -05:00
Nicolas Dufresne
c8597330a9 video-frame: scale vertical tiles based on subsampling
https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:46:45 -05:00
Nicolas Dufresne
53605e35f4 video-frame: fix tiled pixel stride
Pixel stride is per component, not per plane. We get the tile mode from
the pixelstride of the TILE component.

https://bugzilla.gnome.org/show_bug.cgi?id=707361
2014-01-13 10:46:37 -05:00