gstreamer/sys
Matthew Waters f2ca0eaf27 amcviddec: output external-oes textures
This provides a performance and power usage improvement by removing
the texture copy from an OES texture to 2D texture.

The flow is as follows
1. Generate the output buffer with the required sync meta with the incrementing
   push counter and OES GL memory
1.1 release_output_buffer (buf, render=true) and push downstream
2. Downstream waits for on the sync meta (timed wait) or drops the frame (no wait)
2.1 Timed wait for the frame number to reach the number of frame callbacks fired
2.2 Unconditionally update the image when the wait completes (success or fail).
    Sets the affine transformation matrix meta on the buffer.
3. Downstream renders as usual.

At *some* point through this the on_frame_callback may or may not fire.  If it
does fire, we can finish waiting early and render. Otherwise we have to
wait for a timeout to occur which may cause more buffers to be pused into the
internal GL queue which siginificantly decreases the chances of the
on_frame_callback to fire again.  This is because the frame callback only occurs
when the internal GL queue changes state from empty to non-empty.

Because there is no way to reliably correlate between the number of buffers
pushed and the number of frame callbacks received, there are a number of
workarounds in place.
1. We self-increment the ready counter when it falls behind the push counter
2. Time based waits as the frame callback may not be fired for a certain frame.
3. It is assumed that the device can render at speed or performs some QoS of
   the interal GL queue (which may not match the GStreamer QoS).

It holds that we call SurfaceTexture::updateTexImage for each buffer pushed
downstream however there's no guarentee that updateTexImage will result in
the exact next frame (it could skip or duplicate) so synchronization is not
guaranteed to be accurate although it seems to be close enough to be unable
to discern visually.  This has not changed from before this patch.  The current
requirement for synchronization is that updateTexImage is called at the point in
time when the buffers is to be rendered.

https://bugzilla.gnome.org/show_bug.cgi?id=757285
2015-11-17 15:27:26 +11:00
..
acmenc Remove a bunch of silly ';;' typos at the end of lines 2015-03-12 01:33:03 +11:00
acmmp3dec gst: Add better support for static plugins 2013-04-15 15:59:22 +02:00
androidmedia amcviddec: output external-oes textures 2015-11-17 15:27:26 +11:00
applemedia applemedia: vtdec: fix setting internal SKIP / DROP flags 2015-11-17 15:19:01 +11:00
applemedia-nonpublic applemedia: Fix libtool usage 2014-02-06 16:17:39 +01:00
avc gst: Add better support for static plugins 2013-04-15 15:59:22 +02:00
bluez avdtputil: fix GError memory leak during failures 2015-09-17 11:55:49 +02:00
cdrom gst: Add better support for static plugins 2013-04-15 15:59:22 +02:00
d3dvideosink d3dvideosink: Avoid frame rendering while the window is completely hidden 2015-06-10 15:03:31 +02:00
decklink decklink: Add a clock epoch that is used as offset whenever restarting the clock 2015-09-24 09:32:36 +02:00
directsound directsoundsrc: fix build error for 64bit Windows build by MinGW 2015-09-09 16:57:08 +03:00
dshowdecwrapper dshowdecwrapper: Remove dependency on ATL 2014-12-16 23:17:35 +00:00
dshowsrcwrapper dshow: fix GList leak 2015-11-06 13:00:55 +00:00
dshowvideosink dshowvideosink: Fix 64bit compatibility issue 2015-10-19 15:23:38 +03:00
dvb dvbsrc: use GST_STIME_ARGS for GstClockTimeDiff 2015-11-03 15:05:43 +00:00
dxr3 Constify some static arrays everywhere 2015-01-21 10:18:50 +01:00
fbdev gst: Add better support for static plugins 2013-04-15 15:59:22 +02:00
linsys Constify some static arrays everywhere 2015-01-21 10:18:50 +01:00
nvenc nvenc: call the parent class on GstElement::set_context 2015-09-29 16:17:22 +10:00
opensles opensles: Fix build with Android API level < 14 2015-06-13 16:03:58 +05:30
pvr2d Fix file permissions of some files 2015-08-28 19:55:59 +01:00
qcam Constify some static arrays everywhere 2015-01-21 10:18:50 +01:00
shm shmpipe: Ensure string received from recv() is NULL-terminated 2015-04-20 14:21:09 +02:00
uvch264 Fix file permissions of some files 2015-08-28 19:55:59 +01:00
vcd vcdsrc: port to 1. 2014-12-04 17:00:52 -03:00
vdpau Remove a bunch of silly ';;' typos at the end of lines 2015-03-12 01:33:03 +11:00
wasapi wasapi: Fix flags order for uninstalled build 2015-05-21 13:42:29 +10:00
wininet wininet: "iradio-mode" property defaults to TRUE 2014-03-05 20:28:04 +01:00
winks ksvideosrc: don't try to align current timestamp on previous timestamp 2015-11-01 11:16:36 +02:00
winscreencap winscreencap: Properly timestamp buffers with the current clock running time instead of doing magic 2015-08-03 19:42:56 +03:00
Makefile.am Add Nvidia based hardware encoder element 2015-09-29 15:32:17 +10:00