Commit graph

4756 commits

Author SHA1 Message Date
Nicolas Dufresne
6bfbadc0f9 gtksinks: Remove undefined private structure
The classes contains a private structure which are not defined,
hence unused.
2015-07-15 11:44:30 -04:00
Edward Hervey
7cb734b1cd configure/qt: Fix build without Qt5X11Extras 2015-07-10 14:01:59 +02:00
Sebastian Dröge
a6507de48e mpdparse: g_slice_new() can't return NULL
It will abort() if allocation fails.
2015-07-10 13:26:51 +03:00
Sebastian Dröge
77b618ca77 mpdparser: Don't allow network access when reading the XML data 2015-07-10 13:20:26 +03:00
Matthew Waters
769fffa3d9 new qt5 qml GL video sink
Very much in the same spirit as the Gtk GL sink

Two things are provided
1. A QQuickItem subclass that renders out RGBA filled GstGLMemory
   buffers that is instantiated from qml.
2. A sink element that will push buffers into (1)

To use
1. Declare the GstGLVideoItem in qml with an appropriate
   objectName property set.
2. Get the aforementioned GstGLVideoItem from qml using something like

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

QObject *rootObject = engine.rootObjects().first();
QQuickItem *videoItem = rootObject->findChild<QQuickItem *> ("videoItem");

3. Set the videoItem on the sink

https://bugzilla.gnome.org/show_bug.cgi?id=752185
2015-07-10 15:25:26 +10:00
Matthew Waters
abde710f42 gtk: add to the generic/states test 2015-07-09 16:40:19 +10:00
Xavier Claessens
d95fd04960 GstGtkGLSink: Ensure widget has a toplevel parent
Checking for a parent is not enough, it must have a toplevel one.
If widget has no toplevel parent then add it in a GtkWindow, that
make it usable from gst-launch-1.0.

https://bugzilla.gnome.org/show_bug.cgi?id=751104
2015-07-09 16:40:19 +10:00
Xavier Claessens
b71b7dc9e6 GstGtkGLSink: Post error if widget gets destroyed
https://bugzilla.gnome.org/show_bug.cgi?id=751104
2015-07-09 16:40:19 +10:00
Xavier Claessens
72b48a39d8 GstGtkGLSink: fix possible warning in finalize
If the element is finalized before going in READY state
the widget could still be NULL.

https://bugzilla.gnome.org/show_bug.cgi?id=751104
2015-07-09 16:40:19 +10:00
Sebastian Dröge
cd47556351 mpdparser: Fix some memory leaks in the MPD parser and unit test 2015-07-08 23:15:14 +03:00
Sebastian Dröge
a755fbb440 Revert "Revert "dashdemux: fixed gst_mpd_client_advance_segment to return GST_FLOW_EOS""
This reverts commit 4875ddf585.

This was based on a misunderstanding of the code.

https://bugzilla.gnome.org/show_bug.cgi?id=752085
2015-07-08 16:33:50 +03:00
Luis de Bethencourt
a01133dd8f dashdemux: remove redundant else statement
Else statement is redundant when the if block finishes with an return.
2015-07-08 11:33:04 +01:00
Sebastian Dröge
4875ddf585 Revert "dashdemux: fixed gst_mpd_client_advance_segment to return GST_FLOW_EOS"
This reverts commit dfe37ffc59.

https://bugzilla.gnome.org/show_bug.cgi?id=752085
2015-07-07 19:51:39 +03:00
Sebastian Dröge
07d27d906a mpdparser: Fix off-by-one in has-next-segment calculation 2015-07-07 19:51:39 +03:00
Matthew Waters
d5a39896dc download: only start a download transfer for sysmem caps features 2015-07-07 22:38:08 +10:00
Florin Apostol
cc9885ef4e dashdemux: added parsing of bitstreamSwitching@AdaptationSet
https://bugzilla.gnome.org/show_bug.cgi?id=751170
2015-07-07 14:08:04 +03:00
Florin Apostol
581ae1d24d dashdemux: regrouped functions in gstmpdparser.h file
Moved gst_mpd_client_get_next_segment_availability_end_time and
gst_mpd_client_add_time_difference functions to be grouped with
functions from the same category.

https://bugzilla.gnome.org/show_bug.cgi?id=752027
2015-07-07 14:02:10 +03:00
Florin Apostol
dfe37ffc59 dashdemux: fixed gst_mpd_client_advance_segment to return GST_FLOW_EOS
Fixed gst_mpd_client_advance_segment to return GST_FLOW_EOS if the
new index is out of range.

https://bugzilla.gnome.org/show_bug.cgi?id=751850
2015-07-07 13:30:07 +03:00
Matthew Waters
2b9dddbafe gltransformation: correct vao usage
keep the vao bound after uploading the new vertex data

fixes a mesa GL error "no vertex array object bound" on caps changes
2015-07-07 15:32:13 +10:00
Matthew Waters
26df88cd24 gl: consolidate egl header includes to egl-only headers
They may conflict with other headers.
2015-07-07 13:12:49 +10:00
Thibault Saunier
31b770af0b gtkglsink: Release the widget lock when trying to get the GL context
Otherwise we might be waiting for the lock on the main loop (for
example in the ->render vmethod) and thus we will deadlock.
2015-07-06 19:33:35 +02:00
Luis de Bethencourt
9fb7add179 curlsshsink: remove redundant else statement
Else statement is redundant when the if block finishes with an return.
2015-07-06 15:25:16 +01:00
Florin Apostol
8551f74a05 dashdemux: fixed segment start when specified by SegmentTimeline
@t attribute in segment Timeline is relative to the period start.
Corrected the code to take this into account when computing segment
timestamp.

https://bugzilla.gnome.org/show_bug.cgi?id=751841
2015-07-05 13:54:00 -03:00
Florin Apostol
8e82129875 dashdemux: wrong segment duration computed by gst_mpd_client_setup_representation
Corrected computation of segment start and duration.

https://bugzilla.gnome.org/show_bug.cgi?id=751914
2015-07-05 13:31:38 -03:00
Florin Apostol
5151c42085 dashdemux: corrected search for audio languages
Corrected the initialisation of mimeType in
gst_mpdparser_get_list_and_nb_of_audio_language: the variable is used
in a loop, so it must be set to NULL at the beginning of each iteration.

https://bugzilla.gnome.org/show_bug.cgi?id=751911
2015-07-05 13:25:12 -03:00
Olivier Crête
81b9d1531d glvideomixer, glmixer: Add description and klass 2015-07-03 12:28:47 -04:00
Sebastian Dröge
9e7454a90a openh264dec: Unref video frames and codec state in all cases 2015-07-02 18:51:44 +02:00
Nicolas Dufresne
fe283a9aeb gl: Don't leak pool if set_config failed 2015-07-02 09:40:05 -04:00
Sebastian Dröge
5109d9930c openh264dec: Uninitializing the decoder can't fail and will always return 0 == cmResultSuccess
... but when we cast cmResultSuccess to a gboolean it will be FALSE, and make
GstVideoDecoder::stop() fail for no reason.
2015-07-02 14:16:05 +02:00
Vineeth TM
8ec2e0ad62 glimagesink: use g_clear_error instead of g_error_free
replace g_error_free with g_clear_error, as it internally
checks if error variable is valid or not.

https://bugzilla.gnome.org/show_bug.cgi?id=751823
2015-07-02 11:34:10 +01:00
Miguel París Díaz
3a3c01e7c7 srtpdec: Add config for the replay window size
https://bugzilla.gnome.org/show_bug.cgi?id=751729
2015-06-30 16:14:25 +02:00
Florin Apostol
0f37768626 dashdemux: corrected parsing of %u in segment templates
https://bugzilla.gnome.org/show_bug.cgi?id=751716
2015-06-30 15:24:28 +02:00
Florin Apostol
e2d1126391 dashdemux: corrected recognition of $$$ in segment templates
fixed recognition of $$ after a $ that ends an identifier, eg $Time$$$

https://bugzilla.gnome.org/show_bug.cgi?id=751682
2015-06-29 19:28:56 -03:00
Luis de Bethencourt
be664ae40d gl: add missing break
gst_gl_view_convert_element_set_property() is missing a break at the end
of the PROP_OUTPUT_DOWNMIX_MODE case. Adding it.

CID #1308949
2015-06-29 16:10:50 +01:00
Nicolas Dufresne
11150e3bea glimagesink: Don't leak pool
gst_query_add_allocation_pool is transfer none. Also unref
if there was a configuration error.
2015-06-26 14:59:15 -04:00
Florin Apostol
e09cf2f3b6 dashdemux: corrected next fragment duration validation
Before returning the next fragment duration value, the
gst_mpd_client_get_next_fragment_duration function tries to validate it.
But the condition was incorrect.

https://bugzilla.gnome.org/show_bug.cgi?id=751539
2015-06-26 10:43:42 -03:00
Sebastian Dröge
626a8f0a74 dashdemux: Subtract the period start time from the presentation offset
We're interested in the offset between the period start timestamp and the
actual media timestamp so that we can properly correct for it. The absolute
presentation offset to timestamp 0 is useless as the only thing we really
care about is the offset between the current fragment timestamp and the
media timestamp.
2015-06-25 23:36:10 +02:00
Sebastian Dröge
95eb1aa49c dashdemux: Subtract the period start when seeking based on a template
Otherwise we will look for segments after the period usually. The seek
timestamp is relative to the start of the first period and we have to
select a segment relative to the current period's start.
2015-06-25 23:36:09 +02:00
Sebastian Dröge
e671ad25a9 dashdemux: Include the period start in the fragment timestamps in all cases
We didn't do this for fragments that are generated on demand from a template,
only for the other cases when they were all generated upfront. This caused
fragment timestamps to start from 0 again for each new period.
2015-06-25 23:35:46 +02:00
Sebastian Dröge
9e8e1c452d dashdemux: Seek on the new streams if the seek caused a period switch
Seeking on the old streams is pointless, they are going to be freed on the
next opportunity.
2015-06-25 23:35:02 +02:00
Florin Apostol
fa9b03186a dash: Correct check for valid timeShiftBufferDepth
If not set, the timeShiftBufferDepth has a default value of -1.
The standard says that this should be interpreted as infinite.

The gst_mpd_client_check_time_position function incorrectly compares
timeShiftBufferDepth with 0 instead of -1 to determine if it was set.

https://bugzilla.gnome.org/show_bug.cgi?id=751500
2015-06-25 16:27:18 +02:00
Luis de Bethencourt
bf2f4f5c8c docs: decodebin2 -> decodebin 2015-06-25 11:02:45 +01:00
Florin Apostol
dbf12ab760 dashdemux: Corrected duration argument for gst_mpd_client_add_media_segment call
The last parameter of gst_mpd_client_add_media_segment function is a
duration. But when called from gst_mpd_client_setup_representation, the
last argument was wrongly set to PeriodEnd

https://bugzilla.gnome.org/show_bug.cgi?id=751449
2015-06-25 10:16:24 +02:00
Florin Apostol
93f08347de dashdemux: incorrect use of period start
The period start information, calculated in gst_mpd_client_setup_media_presentation
function is stored in stream_period->start. The information read from
xml file and stored in stream_period->period->start is not changed.

If the xml file does not contain the period start information,
stream_period->period->start will be -1.

The function gst_mpd_client_get_next_segment_availability_end_time wants to
use period start time, but incorrectly uses stream_period->period->start
(value from xml file, which could be -1) instead of stream_period->start
(computed value)

https://bugzilla.gnome.org/show_bug.cgi?id=751465
2015-06-25 10:14:30 +02:00
Nicolas Dufresne
55a5c5f7df motioncells: Port to g_get_current_time
This is more portable.

https://bugzilla.gnome.org/show_bug.cgi?id=751221
2015-06-22 15:48:51 -04:00
Mersad Jelacic
a573cc4004 opusenc: Add bitrate to the tags
https://bugzilla.gnome.org/show_bug.cgi?id=750992
2015-06-22 13:49:34 +02:00
Florin Apostol
8336d7a60b dashdemux: corrected computation of period's duration
According to ISO/IEC 23009-1:2014(E), chapter 5.3.2.1
"The Period extends until the PeriodStart of the next Period, or until
the end of the Media Presentation in the case of the last Period."

This means that a configured value for optional attribute period duration
should be ignored if the next period contains a start attribute or it is
the last period and the MPD contains a mediaPresentationDuration attribute.

https://bugzilla.gnome.org/show_bug.cgi?id=750797
2015-06-22 13:47:54 +02:00
Julien Isorce
66d833fcf2 gldisplay: add gst_gl_display_create_context
It also emits a create-context signal so that an application
can provide an external GstGLContext backend.

https://bugzilla.gnome.org/show_bug.cgi?id=750310
2015-06-19 13:10:30 +01:00
Julien Isorce
5b003b68ca Revert "gl: add GstGLContextGPUProcess backend"
This reverts commit b377112ee3.
2015-06-19 13:08:49 +01:00
Jan Schmidt
b973f9473e glimagesink: Remove duplicate, useless line of code 2015-06-19 14:37:24 +10:00
Nicolas Dufresne
c2b49fa732 opengl: glstero* are only built with full OpenGL
Don't try to register the elements unless they are built.
2015-06-18 22:11:05 -04:00
Jan Schmidt
eefdb2ed86 gl: Add glviewconvert, glstereomix and glstereosplit elements
Conversion elements for transforming multiview/stereoscopic video

https://bugzilla.gnome.org/show_bug.cgi?id=611157
2015-06-19 01:49:33 +10:00
Jan Schmidt
00d6fe9068 glimagesink: Support multiview/stereoscopic video
Support video with multiview info in the caps, transform
it to mono anaglyph by default, but allow for configuring
other output modes and handoff to the app via
the draw signal.

https://bugzilla.gnome.org/show_bug.cgi?id=611157
2015-06-19 01:49:33 +10:00
Florin Apostol
d268f812eb dashdemux: added warnings in gst_mpd_client_setup_streaming function
Added some warning messages in gst_mpd_client_setup_streaming to help
debug situations when the function will return FALSE.

Renamed a wrongly spelled variable.

https://bugzilla.gnome.org/show_bug.cgi?id=751149
2015-06-18 12:40:01 -03:00
Florin Apostol
e4d6e96c82 dashdemux: corrected comments in gstmpdparser.h
Corrected some comments in gstmpdparser.h file.
Moved gst_mpd_client_get_adaptation_sets function to be grouped with
other functions from AdaptationSet group

https://bugzilla.gnome.org/show_bug.cgi?id=751149
2015-06-18 12:40:01 -03:00
Florin Apostol
9f56cc27ab dashdemux: fixed getting representation based on max bandwidth
The gst_mpdparser_get_rep_idx_with_max_bandwidth function assumes
representations are ordered by bandwidth and incorrectly returns the
first one when wanting the one with minimum bandwidth.

Corrected gst_mpdparser_get_rep_idx_with_max_bandwidth function to get the
correct representation in case max_bandwidth parameter is 0.

https://bugzilla.gnome.org/show_bug.cgi?id=751153
2015-06-18 11:29:45 -03:00
Sebastian Dröge
9841cd5e58 gtkglwidget: Const'ify another array 2015-06-15 21:32:43 +02:00
Sebastian Dröge
aa37a70efb gtkglwidget: Calculate the viewport size ourselves
Getting the current viewport and modifying it relatively will produce an
interesting feedback loop during widget resizing. Over a few frames we
will gradually move the viewport a bit until it converged again, adding
unnecessary additional borders at the top and left.
2015-06-15 21:29:46 +02:00
Sebastian Dröge
8b821e0cf3 gtk: Use the display width/height for the widget's preferred width/height 2015-06-15 21:24:01 +02:00
Sebastian Dröge
df034766c5 gtksink: Add support for xRGB/BGRx 2015-06-15 20:45:11 +02:00
Sebastian Dröge
60ea4c079d gtk: Cairo color formats are in native endianness, GStreamer's in memory order
CAIRO_FORMAT_ARGB32 is ARGB on big endian and BGRA on little endian.
2015-06-15 20:39:59 +02:00
Sebastian Dröge
ea8aa5ff1b gtk: Implement ignore-alpha property and enable it by default 2015-06-15 20:35:38 +02:00
Sebastian Dröge
6b731584a5 gtk: Sync properties from the sink to the widget upon widget creation 2015-06-15 20:13:57 +02:00
Matthew Waters
890de823e6 glimagesink: add missing handle-events/ignore-alpha property to the bin 2015-06-15 22:44:31 +10:00
Matthew Waters
64f3446907 gtk: implement pixel and display aspect ratio handling 2015-06-15 22:39:07 +10:00
Matthew Waters
e34638112f gtk: silence unused variable warnings for unsupported winsys' 2015-06-15 14:41:24 +10:00
Matthew Waters
874b578d05 gtk: implement basic wayland GL support 2015-06-15 14:41:05 +10:00
Matthew Waters
4796cef882 glmixerbin: implement proper dynamic pad removal
https://bugzilla.gnome.org/show_bug.cgi?id=750881
2015-06-13 18:47:13 +10:00
Nicolas Dufresne
c72213ff8b glimagesink: Don't do pool caching
We now know that pool caching can cause renegotiation issues
when an element in the pipeline change from passthrough to not
passthrough. As it's not needed, don't cache existing pools.

https://bugzilla.gnome.org/show_bug.cgi?id=748344
2015-06-12 20:14:37 -04:00
Florin Apostol
b23e4452a2 dashdemux: fixed segfault for missing default namespace
Added a check for a_node->ns before accessing a_node->ns->href in
gst_mpdparser_get_xml_node_namespace. This could happen if the xml
is missing the default namespace.

https://bugzilla.gnome.org/show_bug.cgi?id=750866
2015-06-12 22:45:51 +02:00
Thibault Saunier
7634a77611 gtk: Do not try to activate a NULL GLContext
At that point in the code nothing guarantees it exists
2015-06-12 15:40:29 +02:00
Matthew Waters
c3a47c910d glmemory: separate pbo transfer from texture transfers
When supported, the potentially longer pbo upload/download can be
initiated before the texture upload/download, potentially increasing
throughput.
2015-06-12 16:59:20 +10:00
Matthew Waters
b97f2e6e6a gtk: implement video aspect-ratio handling
For both the software and the GL sink's.

Doesn't deal with the pixel-aspect-ratio field at all yet.
2015-06-12 15:17:30 +10:00
Matthew Waters
adce0220a8 gtk: fix a couple of typos 2015-06-12 12:40:50 +10:00
Matthew Waters
d99b7d4219 gtkglsink: reset the context/display in READY_TO_NULL
Fixes context propagation in pipelines with upstream GL elements.
2015-06-12 12:32:06 +10:00
Alex Ashley
5beeccdba2 dashdemux: fix error calculating large presentationTimeOffset values
If the presentationTimeOffset attribute of a DASH manifest contains
a value that is larger than 2^32, gstmpdparser incorrectly calculates
the stream's presentation time offset. This is due to two bugs:

1: Using gst_mpdparser_get_xml_prop_unsigned_integer rather than
   gst_mpdparser_get_xml_prop_unsigned_integer_64 to parse the
   attribute
2: gst_mpd_client_setup_representation multiplying the value by
   GST_SECOND and then dividing by timescale

https://bugzilla.gnome.org/show_bug.cgi?id=750804
2015-06-11 19:41:11 +02:00
Nicolas Dufresne
b14fea7fb8 gstgtk: Allow doing gst-inspect-1.0 on these elements
This patch allow going gst-inspect-1.0 on these elements removing
ugly crash that was previously occurring. The method consist of
making the widget creation as lazy as possible. This way we don't
endup doing gtk_init() before the application. We also ref_sink()
the widget, so we don't crash if the parent widget is discarded,
and cleanly error out with GL if the widget has no parent window,
because calling gtk_widget_realized() can only be done if the widget
has been parented to a window).
2015-06-11 12:41:49 -04:00
Matthew Waters
cd2669fad1 gl: move basesink properties from glimagesinkbin to glsinkbin 2015-06-12 00:34:58 +10:00
Sebastian Dröge
e8a97877b4 gl: Use gst_object_ref_sink() for gl{filter,mixer,src}bin too 2015-06-11 15:22:04 +02:00
Sebastian Dröge
c1b43742bf glsinkbin: Use gst_object_ref_sink() for consistency with the video-sink property on playbin 2015-06-11 15:17:55 +02:00
Thibault Saunier
59e298a6fb gtk: Do not try to initialize display if we have not have a GLContext yet 2015-06-11 15:07:24 +02:00
Matthew Waters
23fb666dd7 Implement gtk sinks
two sinks are provided.  gtksink which is a cairo/software based renderer
and gtkglsink which utilises the GL support in gtk and gstreamer.
2015-06-11 22:01:03 +10:00
Sebastian Dröge
1a15c2e426 dash: Add $(GST_PLUGINS_BASE_LIBS) to LIBADD
https://bugzilla.gnome.org/show_bug.cgi?id=750619
2015-06-09 12:12:25 +02:00
Jimmy Ohn
1270afae44 hlsdemux: Fix wrong gst-launch command in the description
Fix wrong gst-lauch command in the description.
This patch may help people to get right testing results using the script.

https://bugzilla.gnome.org/show_bug.cgi?id=750143
2015-06-05 12:21:41 -03:00
Luis de Bethencourt
e04ced027e dfbvideosink: remove ignored assignments
Remove assignments to DFBResult res that are never read.
2015-06-05 14:49:38 +01:00
Thiago Santos
045bfa10fe Fix a common typo: retreive -> retrieve
Seems to have been copy pasted around a few places
2015-06-05 09:43:35 -03:00
Thiago Santos
0a63fa7a01 hlsdemux: drop TODO that doesn't need a solution
Connection speed is only checked at that point in hlsdemux so there
is no real need to refactor it.

https://bugzilla.gnome.org/show_bug.cgi?id=749328
2015-06-05 09:43:31 -03:00
Thiago Santos
581d8c0b8d Revert "hlsdemux: Simplify logic in process_manifest"
This reverts commit 4ca3a22b6b.

The connection-speed=0 is used as a special value in the property
of hlsdemux to mean 'automatic' selection, m3u8.c doesn't need
to know about that as it should be as simple as possible.

So this patch hides this automatic selection documented in hlsdemux
into m3u8 logic and I think the gets harder to understand the code.

It also makes the hlsdemux unit tests work again

https://bugzilla.gnome.org/show_bug.cgi?id=749328
2015-06-05 09:43:10 -03:00
Sebastian Dröge
9bcddde9bc mpdparser: Fix inverted logic introduced in last commit 2015-06-05 14:33:57 +02:00
Sebastian Dröge
15de547760 mpdparser: Calculate the number of segments we have when a segment template instead of a list is used
Otherwise we would just continue downloading new files forever until we get
404 for the first one, and then error out instead of going EOS.
2015-06-05 14:11:47 +02:00
Sebastian Dröge
ec226e856d Revert "mpdparser: Don't consider streams with a known media presentation duration as live"
This reverts commit 37011e5198.

This change was actually completely unnecessary, the streams in question are
marked as static and are not considered live anyway.
2015-06-05 13:28:39 +02:00
Sebastian Dröge
37011e5198 mpdparser: Don't consider streams with a known media presentation duration as live 2015-06-05 13:21:55 +02:00
Jose Antonio Santos Cadenas
adcf3f48a5 srtp: Allow getting ssrc of more package types than RR and SR
This allows decrypting reduce size packages. See RFC 5506

https://bugzilla.gnome.org/show_bug.cgi?id=750326
2015-06-05 10:19:51 +02:00
Sebastian Dröge
2b207c0b65 mpdparser: Don't crash in debug output if stream->segments is NULL 2015-06-04 15:58:46 +02:00
Tim-Philipp Müller
4238f62975 libde265dec: fix up plugin name and decoder description 2015-06-04 12:53:57 +01:00
Sebastian Dröge
64a2dcf582 mpdparse: Clamp seek times to the availabilityStartTime
Otherwise we will seek to negative times, which are interpreted as unsigned
integers later.
2015-06-04 13:36:05 +02:00
Sebastian Dröge
f9ada426d4 mpdparser: Improve debug output a bit when advancing segments 2015-06-04 13:13:39 +02:00
Sebastian Dröge
1ba8f82b94 opusdec: If channel/rate negotiation fails, fall back to stereo and 48kHz 2015-06-04 11:54:24 +02:00
Sebastian Dröge
bd8b25f08b opusparse: Set up default header with 48kHz sample rate instead of 0 2015-06-04 11:52:40 +02:00
Sebastian Dröge
96ee9b274c opusdec: gst_structure_fixate_field_nearest_int() only works if the structure has this field
Just set the rate/channels directly if the caps don't have this field.
2015-06-04 11:45:05 +02:00