Commit graph

4339 commits

Author SHA1 Message Date
Thiago Santos
e21abb62e0 hlsdemux: cache total duration to avoid iterating at every query
Duration queries can be done a few times per second and would cause
the segment list to be traversed for every one. Caching the duration
prevents that.
2015-01-08 17:55:33 -03:00
Luis de Bethencourt
9dcf650a17 hlsdemux: g_return_if_fail in function with return type
Need to use g_return_val_if_fail() when the function returns a type, in this
case a gboolean
2015-01-08 15:54:18 +00:00
Thiago Santos
dd7cb8f632 hlsdemux: implement _has_next_fragment to avoid busy looping
It will allow the demuxer to wait for a fragment to be available instead
of busy looping polling the playlist for a new fragment
2015-01-08 09:59:01 -03:00
Luis de Bethencourt
1e287b6fd7 handdetect: remove unneeded check
Variable hands is already checked to contain a value previously at the beginning
of the current block (in line 504). There is no need to check again. This is
logically dead code.

CID 1197693
2015-01-07 16:32:49 +00:00
Thiago Santos
3a6c2b6b67 hlsdemux: remove duplicate call to uri_join 2015-01-07 10:23:31 -03:00
Thiago Santos
3e9b89111a hlsdemux: skip checking '#EXT-X-' token for all entries
Put this common check before to avoid repeating it for all possible
entries to save some cycles
2015-01-07 09:39:56 -03:00
Thiago Santos
c79e8a78ac hlsdemux: avoid using g_list_append for creating segments list
Use g_list_prepend and reverse it at the end to skip traversing the
same list for every new segment
2015-01-07 09:30:40 -03:00
Thomas Bluemel
cd6069f5af hlsdemux: Don't use approximate duration for fragment buffer pts
The duration values in playlists are approximate only, and for
playlist versions 2 and older they are only rounded integer values.
They cannot be used to timestamp buffers.  This resulted in playback
gaps and skips because the actual duration of fragments is slightly
different.  The solution is to only set the pts of the very first
buffer processed, not for each fragment.
2015-01-07 09:30:40 -03:00
Rajat Verma
de246c6741 mssdemux: fix crash while setting bitrate in caps structure
q->bitrate is a guint64, but G_TYPE_INT may read fewer bits
off the stack, and if we pass more then the NULL sentinel
may not be found at the right place, which in turn might
lead to crashes.

https://bugzilla.gnome.org/show_bug.cgi?id=741751
2015-01-07 10:08:20 +00:00
Alex Ashley
50b5d94b2a hlsdemux: Implement live seeking
hlsdemux assumes that seeking is not allowed for live streams,
however seek is possible if there are sufficient fragments in the
manifest. For example the BBC have live streams that contain 2 hours
of fragments.

The seek code for both live and on-demand is common code. The
difference between them is that an offset has to be calculated
for the timecode of the first fragment in the live playlist.

When hlsdemux starts to play a live stream, the possible seek range
is between 0 and A seconds. After some time has passed, the beginning of
the stream will no longer be available in the playlist and the seek
range is between B and C seconds.

Seek range:
start          0 ........... A
later               B ........... C

This commit adds code to keep a note of the B and C values
and the highest sequence number it has seen. Every time it updates the
media playlist, it walks the list of fragments, seeing if there is a
fragment with sequence number > highest_seen_sequence. If so, the values
of B and C are updated. The value of B is used when timestamping
buffers.

It also makes sure the seek range is never closer than three fragments
from the end of the playlist - see 6.3.3. "Playing the Playlist file"
of the HLS draft.

https://bugzilla.gnome.org/show_bug.cgi?id=725435
2015-01-05 17:59:08 -03:00
Tim-Philipp Müller
4e6f8a76f0 glmixer, glvideomixer: update for GstAggregatorPadForeachFunc change 2014-12-30 19:43:43 +00:00
Tim-Philipp Müller
de5604483f glmixer: update for aggregator start/stop vfunc change 2014-12-30 19:26:47 +00:00
Thiago Santos
104bd7cf02 hlsdemux: only typefind when we have a minimum amount of data
For small amounts some data might be mistyped and it would cause
the pipeline to fail. For example if you have AAC inside mpegts,
for small amounts, the AAC samples would cause the typefinder to
think it is AAC and not mpegts.

https://bugzilla.gnome.org/show_bug.cgi?id=736061
2014-12-30 08:35:21 -03:00
Thiago Santos
afc392c47b dashdemux: do not try to ref null pointer
Playlists might be missing the availability start time, so check for
it before trying to ref the object
2014-12-29 11:39:22 -03:00
Thiago Santos
a862ba4b45 dashdemux: run gst-indent on mpdparser
Run gst-indent on mpdparser to have it stop complaining on every
commit
2014-12-29 11:39:22 -03:00
Nirbheek Chauhan
888b531940 glvideomixer: Point to compositor for the pad properties documentation 2014-12-27 11:05:17 +00:00
Vijay Jayaraman
68e77265a0 hlsdemux: typefind might fail if first buffer is too short
If typefind fails, check to see if the buffer is too short for typefind. If this is the case,
prepend the decrypted buffer to the pending buffer and try again the next time around.

https://bugzilla.gnome.org/show_bug.cgi?id=740458
2014-12-23 10:08:57 -03:00
Thiago Santos
1e9ce11efd hlsdemux: port to adaptive base class
Conflicts:
	ext/hls/gsthlsdemux.c
	ext/hls/gsthlsdemux.h
2014-12-23 10:08:57 -03:00
Nicolas Dufresne
9954de1ccd gl: Add support for GstVideoAlignment
This allow saving a copy with libav video decoders or decoders with
similar padding requirement.

https://bugzilla.gnome.org/show_bug.cgi?id=740900
2014-12-19 12:11:08 -05:00
Branko Subasic
f00d21aec5 curlsmtpsink: add final boundary to all multipart emails
Corrected the final boundary mechanism so that a final boundary is
added to each mail with multipart content that is sent,
not just to the last one.

https://bugzilla.gnome.org/show_bug.cgi?id=741553
2014-12-19 13:16:43 +00:00
Thiago Santos
77388f9d83 x265enc: reuse the gstvideo proxy getcaps
The caps query is implementing the same logic as the default
handler from the base class. Reuse it to simplify code.
2014-12-17 22:13:17 -03:00
Thiago Santos
4c883e4ad2 opusenc: plug ref leak of template caps
the pad template caps is already a new ref. No need to copy.
2014-12-17 22:13:17 -03:00
Wim Taymans
87f5574e39 rectangle: clear rectangle struct before use 2014-12-16 13:35:14 +01:00
Vincent Penquerc'h
79b56ebcc9 opusparse: fix frame size determination
https://bugzilla.gnome.org/show_bug.cgi?id=741321
2014-12-15 15:23:35 +00:00
Tim-Philipp Müller
329f0ccba1 Revert "openh264: fix to work with released versions and master of upstream"
This reverts commit 15394aa705.

The latest release (v1.1) does not have pkg-config support
yet, so this plugin won't be built with the latest release.
Cerbero uses the latest release, so this makes cerbero
builds fail, which expect the plugin to be built.

We can re-commit this once there's a release that includes
pkg-config support.
2014-12-12 20:58:49 +00:00
Zaheer Abbas Merali
15394aa705 openh264: fix to work with released versions and master of upstream 2014-12-12 10:05:23 -08:00
Matthew Waters
15fc4b9bbe glfiltercube: use a shader everywhere 2014-12-11 19:41:23 +11:00
Matthew Waters
f021549294 gl: fixup vao and vbo usage for legacy GL 2014-12-11 19:41:23 +11:00
Matthew Waters
1d324e259a gleffects: don't abort when setting the effect to 0,1,2 2014-12-11 19:41:23 +11:00
David Waring
1c0c6b6f48 dashdemux: Change period when setting by period id.
Make gst_mpd_client_set_period_id set the current period index when it finds a
period with a matching period id.

https://bugzilla.gnome.org/show_bug.cgi?id=741322
2014-12-10 16:22:31 -03:00
Thiago Santos
8b63a16af0 mssdemux: fix reverse playback fragment tracking
Rework reverse fragment traversing with repetition fields to prevent
NULL pointer deref and avoid never advancing a fragment as the variable
is unsigned and would always be non-negative.

CID #1257627
CID #1257628
2014-12-10 15:27:49 -03:00
David Waring
b03acbf584 dashdemux: Find current segment in the streams that have just been setup
Using demux->streams will just skip the whole loop as demux->streams will
always be NULL at that point

https://bugzilla.gnome.org/show_bug.cgi?id=741285
2014-12-09 21:08:10 -03:00
Thiago Santos
8c49c79d7e mssdemux: add live support
Implement the functions of adaptivedemux to have live support
enabled. This allows mssdemux to refresh the Manifest periodically
2014-12-04 19:52:33 -03:00
Thiago Santos
a105af22f2 mssdemux: fix getting current position in segments when after last one
For live streams this makes a difference when resyncing after a
Manifest refresh, otherwise it doesn't know where to restart
2014-12-04 14:28:25 -03:00
Thiago Santos
a2c31e38d1 mssdemux: support manifests with repetition fragments
Read the "r" attribute from fragments to support fragments nodes
that use repetition to have a shorter Manifest xml.

Instead of doing:
<c d="100" />
<c d="100" />

You can use:
<c d="100" r="2" />
2014-12-04 14:24:42 -03:00
Thiago Santos
b418c88b26 mssdemux: port to adaptivedemux base class 2014-12-04 14:24:42 -03:00
Flávio Ribeiro
c306e0dfa7 hlssink: remove unnecessary title on EXTINF tag
According to the HLS spec the remainder of the line following
the comma on EXTINF tag is not required. This patch removes
the fake title and saves some bytes on the playlist.

https://bugzilla.gnome.org/show_bug.cgi?id=741096
2014-12-04 17:52:08 +01:00
Ramprakash Jelari
26d99a6f3e gl: Rename gst-launch-0.10 to gst-launch-1.0 in docs 2014-12-04 16:25:57 +01:00
Thiago Santos
f48fa7e763 dashdemux: fix double unref of object
the datetime is already released by the end of the function
2014-12-02 15:52:54 -03:00
David Waring
95c3fdc193 dashdemux: Find the current period in a live stream
Start from the correct period on a live stream

https://bugzilla.gnome.org/show_bug.cgi?id=737421
2014-12-02 14:22:09 -03:00
David Waring
306ca0cdf6 dashdemux: Fix period selection for live streams
Fix period selection and properly error out when update cannot be done

https://bugzilla.gnome.org/show_bug.cgi?id=725298
2014-12-02 13:24:52 -03:00
Jürgen Slowack
c89844ec1e x265enc: add qp property
QP property enables CQP mode and sets the QP for P slices.
2014-12-01 12:14:20 +01:00
Thiago Santos
f04d351cd9 dashdemux: replace the streams with the new mpd client's streams
Otherwise it won't update with the new segment info from the playlist
update
2014-11-30 21:56:25 -03:00
Thiago Santos
28d66ea589 dashdemux: when updating the manifest, set the uri
This will allow dashdemux to create the correct full path URIs to
continue downloading fragments
2014-11-30 21:56:25 -03:00
Thiago Santos
58a1b0d058 dashdemux: port to adaptive demux 2014-11-30 21:56:25 -03:00
Matthew Waters
6361df77e8 glimagesink: properly handle the !opengl3 case
https://bugzilla.gnome.org/show_bug.cgi?id=740012
2014-11-30 00:44:46 +11:00
Tim-Philipp Müller
5299d683ee glfilterapp: fix unused variable compiler warning
When GST_GL_HAVE_OPENGL is 0 or unset.
2014-11-28 16:04:54 +00:00
Matthew Waters
26fc4e2bd5 glfilterapp is now available on gles2 as well so build it 2014-11-28 14:08:40 +11:00
Matthew Waters
820162f84c gl: fix typo in #if
GST_GL_API_HAVE_OPENGL doesn't exist
2014-11-28 11:04:22 +11:00
Matthew Waters
57898fec2a gl: fix various build errors without desktop gl 2014-11-28 10:59:46 +11:00
Matthew Waters
3c1e77eb31 gldisplay: implement runtime GL api filtering
Needed so that the pipeline/application can limit the choice of GL api
to what it supports
2014-11-28 09:14:26 +11:00
Matthew Waters
6bd1150ca8 gl: remove the use of glu 2014-11-28 09:14:26 +11:00
Matthew Waters
f2af65ee2d gl: add a sync meta for synchronizing across GL contexts
A context can create a GLsync object that can be waited on in order
to ensure that GL resources created in one context are able to be
used in another shared context without any chance of reading invalid
data.

This meta would be placed on buffers that are known to cross from
one context to another.  The receiving element would then wait
on the sync object to ensure that the data to be used is complete.
2014-11-28 09:14:25 +11:00
Matthew Waters
18ae2d35e9 glfilterapp: port to gles2 and gl3 2014-11-28 09:14:25 +11:00
Matthew Waters
1331cbc54e gloverlay: support gl3 2014-11-28 09:14:25 +11:00
Matthew Waters
45ac7be402 glvideomixer: add support for gl3 2014-11-28 09:14:25 +11:00
Matthew Waters
d661fb959e glfiltercube: add a gl3 code path 2014-11-28 09:14:25 +11:00
Matthew Waters
67762e8d58 glfiltershader: support gl3 2014-11-28 09:14:25 +11:00
Matthew Waters
3772c83f94 gltransformation: support gl3 2014-11-28 09:14:25 +11:00
Matthew Waters
dd80a40604 gleffects: support gl3 whereever gles2 is supported 2014-11-28 09:14:25 +11:00
Matthew Waters
f2d1f7dd0f glcolorscale: support gl3 2014-11-28 09:14:25 +11:00
Matthew Waters
f0d2346c52 glimagesink: use vbo's and vao's for gl3 2014-11-28 09:14:25 +11:00
Thibault Saunier
9d8055186d videoaggregator: Expose vmethods to set converters and prepare/clean frames
This gives more flexibility to the subclasses and permits to remove the
GstVideoAggregatorClass->disable_frame_conversion ugly API.

WARNING: This breaks the API as it removes the disable_frame_conversion
field

API:
  + GstVideoAggregatorClass->find_best_format
  + GstVideoAggregatorPadClass->set_format
  + GstVideoAggregatorPadClass->prepare_frame
  + GstVideoAggregatorPadClass->clean_frame

  - GstVideoAggregatorClass->disable_frame_conversion

https://bugzilla.gnome.org/show_bug.cgi?id=740768
2014-11-27 19:10:58 +01:00
Matthew Waters
a7ce611970 glimagesink: only attempt a resize when the window has already resized
fixes a black startup screen on wayland
2014-11-27 13:03:21 +11:00
Sebastian Dröge
9e700adf83 openh264enc: Use a fixed number of slices by default 2014-11-24 19:21:29 +01:00
Sebastian Dröge
c43b9aad66 openh264enc: Add some more encoding properties
Merged from https://github.com/EricssonResearch/openwebrtc-gst-plugins
based on a patchset by Robert Swain <robert.swain@ericsson.com>
2014-11-24 19:16:20 +01:00
Matthew Waters
810d38c29f glupload: rearchitecture for non GLMemory inputs/outputs
Allows other memory types to be implemented/returned/used by the caller.
2014-11-23 17:13:36 +11:00
Aleix Conchillo Flaqué
086cc58952 srtpdec: fix rtp/rtcp sink event memory leak
https://bugzilla.gnome.org/show_bug.cgi?id=740451
2014-11-20 13:32:39 -05:00
Vineeth T M
47f3a1954e glimagesink: critical error while seek playback-test(stop state)
If we seek when media is in stop state, playback-test gives
critical error, since context of glimagesink is destroyed during stop.
But since context is not present, we need not handle send_event in glimagesink
Hence adding a condition to check if context is valid.

https://bugzilla.gnome.org/show_bug.cgi?id=740305
2014-11-20 15:39:42 +11:00
Matthew Waters
df12001781 glmixer: add read-only context property 2014-11-17 18:50:04 +11:00
Vincent Penquerc'h
cf9c73367d faad: set channel positions using the appropriate API
https://bugzilla.gnome.org/show_bug.cgi?id=731038
2014-11-12 14:23:10 +00:00
Sebastian Dröge
354fa3f2c9 openh264enc: Add new enable-frame-skip property and disable it by default
Otherwise e.g. videotestsrc ! openh264enc ! ... will drop every second frame
because otherwise the target bitrate can't be reached without loosing too
much quality.
2014-11-12 11:54:09 +01:00
Matthew Waters
5c48440c9a glimagesink: don't set the upload to NULL on the drain query
https://bugzilla.gnome.org/show_bug.cgi?id=732694
2014-11-12 11:44:43 +11:00
Julien Isorce
004a414b4a glimagesink: release stored buffers on drain query
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=732694
2014-11-12 00:08:04 +00:00
Matthew Waters
36ade75f4a gl: remove the width/height fields from the caps to support frame resizing
It was previously only occuring with sysmem caps features

https://bugzilla.gnome.org/show_bug.cgi?id=739334
2014-11-11 14:23:55 +11:00
Matthieu Bouron
1d733eacf7 dashdemux: do not override last known stream error
https://bugzilla.gnome.org/show_bug.cgi?id=736141
2014-11-07 19:52:00 -03:00
Thiago Santos
613b110b25 mssdemux: seeks in the manifest never fail
Set void as the return and remove error handling as it could
never fail
2014-11-07 19:30:18 -03:00
Thiago Santos
39ba21619e dashdemux: make sure flushes have the same seqnum as the seek event
They are part of the same operation and should preserve the seqnum
2014-11-07 19:16:47 -03:00
Thiago Santos
e60bdc553c dashdemux: simplify seek to eos handling
Remove redundant flush stop pushing and remove a goto to make
the code flow simpler
2014-11-07 19:09:15 -03:00
Matthieu Bouron
5ae991095d dashdemux: send missing FLUSH_STOP/EOS when no seeking period is found
https://bugzilla.gnome.org/show_bug.cgi?id=736800
2014-11-07 19:02:02 -03:00
Tim-Philipp Müller
efbae700a6 smoothstreaming: initialise new GstH264NalUnit fields
CID #1251107.
2014-11-07 00:16:12 +00:00
Alessandro Decina
7d48fe1c1e glimagesink: don't make gst_glimage_sink_handle_events call _ensure_gl_setup
gst_glimage_sink_handle_events can be called from the overlay interface and from
the main thread before GL is setup. Before this change, that would call
_ensure_gl_setup() and deadlock on OSX.

Change things so that it's always safe to call gst_glimage_sink_handle_events()
without stuff deadlocking.
2014-11-07 00:22:09 +01:00
Alessandro Decina
b60fe0271f glimagesink: fix possible deadlock on osx
Remove gst_glimage_sink_handle_events call in gst_glimage_sink_init. It was
unnecessary and when the element was instantiated from the main thread, caused a
deadlock in OSX creating the context (thread).
2014-11-07 00:22:09 +01:00
Matthew Waters
7e62c790d2 glimagesink: clamp the resize width/height to >= 1 to avoid a GL error 2014-11-07 10:03:08 +11:00
Lubosz Sarnecki
6702811e14 glimagesink: implement gst_video_overlay_handle_events
https://bugzilla.gnome.org/show_bug.cgi?id=736035
2014-11-06 16:04:11 +11:00
Tim-Philipp Müller
f216b7bb11 Sprinkle some G_PARAM_DEPRECATED and #ifndef GST_REMOVE_DEPRECATED 2014-11-02 17:19:34 +00:00
Tim-Philipp Müller
69ee564d5c hls: fix indentation 2014-11-02 17:17:46 +00:00
Nicolas Dufresne
54602c04f6 rtpopus: Use OPUS encoding name
Both Firefox and Chrome uses OPUS as the encoding in their SDP.
Adding this now defacto standard name remove the need for special
case in SDP parsing code.

https://bugzilla.gnome.org/show_bug.cgi?id=737810
2014-11-01 10:10:27 -04:00
Thiago Santos
a38ada61e3 mssdemux: add type of stream to debug log
Makes it faster to debug why certain streams are not showing
2014-10-31 17:33:55 -03:00
Thiago Santos
e644b5e6ae mssdemux: do not unlock not locked mutex 2014-10-31 17:33:55 -03:00
Matthew Waters
0537cbfa5b glimagesink: resize the viewport correctly on a caps change
with force-aspect-ratio=true, if the width or height changed, the
viewport wasn't being updated to respect the new video width and height
until a resize occured.
2014-10-31 21:29:26 +11:00
Matthew Waters
d6247993f7 glmixer: advertise support for changing input caps mid-stream
https://bugzilla.gnome.org/show_bug.cgi?id=739334
2014-10-31 21:29:25 +11:00
Vincent Penquerc'h
23029acf46 opusenc: update output segment stop time to match clipped samples
This will let oggmux generate a granpos on the last page that properly
represents the clipped samples at the end of the stream.
2014-10-30 14:41:44 +00:00
Arun Raghavan
193eeb1243 srtpdec: Trivial documentation fix 2014-10-30 18:45:04 +05:30
Matthew Waters
a4af98b8c6 glmixer: don't get the current caps from GstVideoInfo for the srcpad
It's missing the caps features needed.
2014-10-30 23:08:00 +11:00
Lubosz Sarnecki
27da1e5aaf satisfy gst-indent 2014-10-29 23:42:54 +11:00
Jan Schmidt
70e4d4123c glfiltercube: Fix typo in property description 2014-10-29 23:23:13 +11:00
Wang Xin-yu (王昕宇)
a9d13db8c6 glmixer:fix incorrect parameter passed to handle_set_context 2014-10-29 20:43:31 +11:00
Tim-Philipp Müller
95c211dc49 Add some missing G_END_DECLS 2014-10-28 21:42:31 +00:00
Tim-Philipp Müller
8a9ab58e33 faad: fix wrong unrefs in set_format error code path 2014-10-28 17:53:00 +00:00