Commit graph

146 commits

Author SHA1 Message Date
Fabien Dessenne
e2dffab9be waylandsink: consider buffer size when copying to wl shm pool
When the sink receives a buffer that is neither a wl_shm one nor a
dmabuf one, this buffer is copied to an internal wl_shm buffer before
being sent to the display.
In that case, the actual size of the received buffer (which may differ
from the one negotiated in the caps) must be used.

https://bugzilla.gnome.org/show_bug.cgi?id=777841
2017-02-22 04:23:44 -05:00
Fabien Dessenne
57645056ad waylandsink: set video surface opaque
Unless the video format has an alpha component (ARGB, ...), set the
video_surface opaque.
In the usual case where the black area_surface has the same size as the
video_surface (eg: run gst-play-1.0 video.mp4), this makes the black
surface totally occluded which makes weston compositor's life easier
since it can ignore that surface.
Also unconditionally set the black area_surface opaque.

https://bugzilla.gnome.org/show_bug.cgi?id=778078
2017-02-02 13:14:01 -05:00
Fabien Dessenne
e2fba40038 waylandsink: fix display re-connection (redraw pending)
Reset redraw_pending at display disconnection, so we can re-connect
later from a clean state (avoid endless buffer drops).
Add a log to inform of dropped buffers.

https://bugzilla.gnome.org/show_bug.cgi?id=775791
2017-01-02 19:53:27 -05:00
Sebastian Dröge
9b89f58cae ext: Fix various compiler warnings with clang
wldisplay.c:179:15: error: comparison of unsigned enum expression < 0 is always false [-Werror,-Wtautological-compare]
  if (shm_fmt < 0)
      ~~~~~~~ ^ ~

gstsegmentation.cpp:419:40: error: implicit conversion from 'int' to 'char' changes value from 255 to -1 [-Werror,-Wconstant-conversion]
          filter->cvFG->imageData[j] = 255;
                                     ~ ^~~

https://bugzilla.gnome.org/show_bug.cgi?id=775112
2016-11-25 23:47:15 +02:00
Sebastian Dröge
95ed2cf687 wldisplay: Don't compare a guint with < 0
-1 is the "invalid" value, compare to it directly.

CID 1394490.
2016-11-23 18:45:42 +02:00
Reynaldo H. Verdejo Pinochet
7c64ea4832 wayland: avoid prefix clash in combined pkg-config check
Adittionally, remove leftover WAYLAND_DRM_ include flags var

Fixes building of ext/wayland/* broken by dfd86de67a

Related to:

https://bugzilla.gnome.org/show_bug.cgi?id=773927
2016-11-18 10:41:16 -08:00
Thibault Saunier
c38d3a41e2 meson: Build waylandsink
https://bugzilla.gnome.org/show_bug.cgi?id=774493
2016-11-15 18:33:25 -03:00
Tim-Philipp Müller
5f5ce8f1ff wayland: only use libdrm headers, don't link to the lib
https://bugzilla.gnome.org/show_bug.cgi?id=773927
2016-11-04 13:44:19 +00:00
Tim-Philipp Müller
9229e34a6b wayland: include drm_fourcc.h properly and fix build 2016-11-04 09:21:59 +00:00
Tim-Philipp Müller
dc6862bf70 wayland: fix cflags/libs order 2016-11-04 09:21:59 +00:00
Nicolas Dufresne
5d01d3bbb8 waylandsink: Rework dmabuf support
Simplify and fix some of the show_frame logic.

https://bugzilla.gnome.org/show_bug.cgi?id=711155
2016-11-03 15:37:46 -04:00
Fabien Dessenne
2ad337e440 waylandsink: support linux dmabuf protocol
Support the wayland zwp_linux_dmabuf_unstable_v1 protocol.
SHM formats and DMABuf formats are exposed differently in caps: the
DMABuf formats are flagged with GST_CAPS_FEATURE_MEMORY_DMABUF.
No buffer pool is proposed for DMABuf buffers, it is the upstream
element responsibility to provide with such buffers.

https://bugzilla.gnome.org/show_bug.cgi?id=711155
2016-11-03 15:37:46 -04:00
Nicolas Dufresne
3272f2002f waylandsink: Allow any kind of FD for shm memory
https://bugzilla.gnome.org/show_bug.cgi?id=711155
2016-11-03 15:37:46 -04:00
Arun Raghavan
312c8c9f7c waylandsink: Properly configure internal pool
There was a small omission in the code. It still worked, but the pool
configuration may not have been optimimal.
2016-10-13 12:10:51 -04:00
Arun Raghavan
cd8f463345 waylandsink: Actually use buffer pool config after setting it up
CID: 1373420
2016-09-30 12:59:20 +05:30
Nicolas Dufresne
31d0a2c1ea waylandsink: Don't leak GValues in getcaps 2016-09-23 16:48:34 -04:00
Nicolas Dufresne
f6b270d8eb waylandsink: Update our window size on configure event
This is specific to when the waylandsink is not being embedded. In
this patch we pass the render lock to the window so it can safely
call gst_wl_window_set_render_rectangle() with the new size.

https://bugzilla.gnome.org/show_bug.cgi?id=722343
2016-09-22 19:12:22 -04:00
Nicolas Dufresne
fdea1e1144 waylandsink: Remove atomic operation
We already take the render lock from the wlqueue thread in some other
place which indicates that there is no use of this atomic instead of
a proper locking mechanism.
2016-09-22 19:12:22 -04:00
Nicolas Dufresne
0859e201f6 waylandsink: Do not pre-configure proposed pool
Upstream must configure the pool before using it. Pre-configuring
the proposed pool could hide bugs in upstream elements.
2016-09-22 19:12:22 -04:00
Nicolas Dufresne
ecf88d0d43 waylandsink: Properly draw black border in absence of viewporter
When we don't have a viewporter (scaling support), we can't use the
1x1 scaleup image trick. Instead, we need to allocate a buffer with
the same size as the area that need to have black background.
2016-09-22 19:12:22 -04:00
Nicolas Dufresne
ba71a392a6 waylandsink: Destroy viewporter when done
https://bugzilla.gnome.org/show_bug.cgi?id=738079
2016-09-21 15:08:34 -04:00
Nicolas Dufresne
3378b1a259 waylandsink: Port to vmeta and GstVideoFrame
This add support for non-standard strides to be used. Note that
some extra work is needed for multi-plane format which may have
a different GstMemory object per plane. This is not currently a
problem since SHM interface is limited to 1 memory.
2016-09-21 11:02:40 -04:00
Nicolas Dufresne
74a7baa533 waylandsink: Don't propose multiple time the same buffer pool
The buffer pool API does not allow multiple of owner. This otherwise
lead to error when renegotiation take place. Aso consider the
allocation query "need_pool" boolean.
2016-09-21 11:02:40 -04:00
Nicolas Dufresne
9357047eaf waylandsink: Promote debug trace into error trace
Otherwise those error may go unseen making debugging much
harder.
2016-09-21 11:02:40 -04:00
Nicolas Dufresne
94a5652694 waylandsink: Factor-out the pool creation 2016-09-21 11:02:40 -04:00
Nicolas Dufresne
1c81b0bb6e waylansink: Implement _show_frame()
This fixes the property show-preroll-frame expose by the VideoSink base
class and removes redundant code.
2016-09-21 11:02:40 -04:00
Tim-Philipp Müller
957ea18b1b wayland: fix distcheck some more 2016-09-20 18:28:29 +01:00
Tim-Philipp Müller
b711e23036 wayland: fix distcheck when wayland-scanner is not installed 2016-09-17 14:12:44 +01:00
Nicolas Dufresne
4bb5823cea waylandsink: Make wl_viewporter optional
This makes the viewporter interface optional. The end result is
obviously far from optimal, though it greatly helps testing on older
compostitors or gnome-wayland. We can make it strictly needed later when
this new interface get widely adopted.
2016-09-15 14:14:10 -04:00
Scott D Phillips
a5ead086f9 wayland: Update from scaler to viewporter protocol
Signed-off-by: Scott D Phillips <scott.d.phillips@intel.com>

https://bugzilla.gnome.org/show_bug.cgi?id=767671
2016-09-15 12:10:59 -04:00
Vineeth TM
8cdfb13658 bad: use new gst_element_class_add_static_pad_template()
https://bugzilla.gnome.org/show_bug.cgi?id=763081
2016-03-24 14:56:51 +02:00
Matthew Waters
16dec9eacc wayland: fix null pointer dereference on error
gnome-shell doesn't the support wl_scaler interface which makes creating a
wayland display fail creation.

Found in the generic state changes test
2016-03-17 02:28:32 +11:00
Vineeth TM
7c42ba97d7 plugins-bad: Fix example pipelines
rename gst-launch --> gst-launch-1.0
replace old elements with new elements(ffmpegcolorspace -> videoconvert, ffenc_** -> avenc_**)
fix caps in examples

https://bugzilla.gnome.org/show_bug.cgi?id=759432
2015-12-15 10:30:49 +00:00
Reynaldo H. Verdejo Pinochet
86ec812429 Remove unnecessary NULL checks before g_free()
g_free() is NULL-safe
2015-11-18 16:05:42 -08:00
George Kiagiadakis
c51fe83d42 waylandsink: call gst_video_sink_center_rect with a destination rectangle that starts from (0,0)
The intention of this code is to find the center rectangle relative
to (0,0), since subsurface coordinates are relative to the parent
surface.

The old code used to work but was wrong and broken by
http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/gst-libs/gst/video/gstvideosink.c?id=ff57f6913456ec1991e55517cf1f239e80eeddef
2015-11-18 13:10:45 +01:00
Hyunil Park
c9aaa4189b waylandsink: Add exception code for setting wl_surface
Waylandsink needs exception code in gst_wayland_sink_set_window_handle().
After making sink->window, User can call
gst_wayland_sink_set_window_handle(). It is the user's fault, but
Waylandsink needs to handle the exception, if not then sink->window is
changed and rendering fails.

https://bugzilla.gnome.org/show_bug.cgi?id=747482
2015-11-03 10:45:05 +00:00
Hyunil Park
d3db3df320 waylandsink: Add exception code for setting wl_display
Waylandsink needs exception code in gst_wayland_sink_set_context(). After
calling gst_wayland_sink_set_context(), below code is set.
GST_ELEMENT_CLASS (parent_class)->set_context (element, context); but, If
user can call onemore. It is user's fault. but waylandsink need to
exception.

https://bugzilla.gnome.org/show_bug.cgi?id=747482
2015-11-03 10:42:14 +00:00
George Kiagiadakis
c2f34b9814 waylandsink: don't advertise the local wl_display context
This wl_display proxy is temporary only until waylandsink goes NULL,
at which point the connection to the display is disposed. Unfortunately,
if this is advertised as a GstContext, playbin will cache it and re-feed
it to the sink when it goes PLAYING again, but the wl_display pointer
will at that point be invalid and cause a crash.

Another solution to the problem would be to also cache the GstWlDisplay
object inside the GstContext, which would automatically ref-count
the display connection, but I see no reason in doing that at the moment,
as there are no known users of this GstContext outside waylandsink.
It's probably better to avoid chasing hidden refcounts.

https://bugzilla.gnome.org/show_bug.cgi?id=756567
2015-10-26 16:11:56 +01:00
George Kiagiadakis
f78b37e6b2 waylandsink: fix fallback buffer allocation
Copy-paste mistake; the wl_buffer was attached on the wrong buffer...
2015-10-14 22:05:52 +02:00
George Kiagiadakis
abcc8eafed waylandsink: rename GstWlDisplay::formats array to shm_formats
These formats are specific to the wl_shm interface. We are going
to add dmabuf formats later as well.
2015-10-14 22:05:52 +02:00
George Kiagiadakis
28194c0c11 waylandsink: replace the custom GstWlShmMemory with GstFdMemory 2015-10-14 22:05:51 +02:00
Luis de Bethencourt
dc79b8d761 waylandsink: g_mkstemp is safer than mkstep 2015-03-03 16:53:32 +00:00
Luis de Bethencourt
bed7a679b5 Revert "waylandsink: mkstemp requires setting permission mask"
This reverts commit 1890e7355a.

Better to use g_mkstemp that takes care of the mask without affecting the
entire process.
2015-03-03 16:51:49 +00:00
Luis de Bethencourt
1890e7355a waylandsink: mkstemp requires setting permission mask
Using mkstemp without setting the permission mask is potentially harmful.
POSIX specification of mkstemp() does not say anything about file modes, so we
need to make sure its file mode creation mask is set appropriately before
calling it.
2015-03-03 15:51:55 +00:00
Edward Hervey
2b59d8ab7c waylandsink: Free leaked GstStructure
Coverity CID : 1256565
2015-01-23 12:44:22 +01:00
Wim Taymans
87f5574e39 rectangle: clear rectangle struct before use 2014-12-16 13:35:14 +01:00
Benjamin Gaignard
23bb5f5319 waylandsink: do not render twice the same buffer
Do not try to render a buffer that is already being rendered.
This happens typically during the initial rendering stage as the first
buffer is rendered twice: first by preroll(), then by render().
This commit avoids this assertion failure:
  CRITICAL: gst_wayland_compositor_acquire_buffer: assertion
  'meta->used_by_compositor == FALSE' failed

https://bugzilla.gnome.org/show_bug.cgi?id=738069

Signed-off-by: Fabien Dessenne <fabien.dessenne@st.com>
Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
2014-10-11 17:35:41 +02:00
Tifaine Inguere
4395c02b96 waylandsink : Allow surface to catch input events
If waylandsink is the owner of the display then it is in charge
of catching input events on the surface.

https://bugzilla.gnome.org/show_bug.cgi?id=733682

Signed-off-by: Tifaine Inguere <tifaine.inguere@st.com>
Reviewed-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
2014-10-11 17:18:29 +02:00
George Kiagiadakis
3058fe8d98 waylandsink: take into account the case where a pool may be destroyed together with GstWlDisplay
There are two cases covered here:
1) The GstWlDisplay forces the release of the last buffer and the pool
   gets destroyed in this context, which means it unregisters all the
   other buffers from the GstWlDisplay as well and the display->buffers
   hash table gets corrupted because it is iterating.
2) The pool and its buffers get destroyed concurrently from another
   thread while GstWlDisplay is finalizing and many things get corrupted.
2014-10-11 14:57:14 +02:00
George Kiagiadakis
5b1c5dbf99 waylandsink: stack the video subsurface into another subsurface that covers the whole render rectangle
The main reason behind this is that when the video caps change and the video
subsurface needs to resize and change position, the wl_subsurface.set_position
call needs a commit in its parent in order to take effect. Previously,
the parent was the application's surface, over which there is no control.
Now, the parent is inside the sink, so we can commit it and change size smoothly.

As a side effect, this also allows the sink to draw its black borders on
its own, without the need for the application to do that. And another side
effect is that this can now allow resizing the sink when it is in top-level
mode and have it respect the aspect ratio.
2014-10-11 14:57:14 +02:00