gstreamer1.0: Upgrade to 1.10.1
Remove backported patches and upstreamed ones Drop --disable-trace its no more in 1.10.x Add packageconfig option for kms, keep it disabled by default in bad plugins recipe (From OE-Core rev: 309e02b7313398a05e70915560882c880c7f7c76) Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
7966afa64a
commit
08d092e16d
|
@ -13,8 +13,7 @@ SRC_URI = " \
|
|||
file://0001-Disable-yasm-for-libav-when-disable-yasm.patch \
|
||||
file://workaround-to-build-gst-libav-for-i586-with-gcc.patch \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "b51a736147bacb40f85827a4e0ae0d2c"
|
||||
SRC_URI[sha256sum] = "9006a05990089f7155ee0e848042f6bb24e52ab1d0a59ff8d1b5d7e33001a495"
|
||||
SRC_URI[md5sum] = "9dc8fb8dd01818c27230a1ed6ba9f4de"
|
||||
SRC_URI[sha256sum] = "27b28b8de0e6dff1e3952428e8ed8ba4a12f452f789ac0ae9bbe50f00a5c72c7"
|
||||
|
||||
S = "${WORKDIR}/gst-libav-${PV}"
|
|
@ -42,6 +42,7 @@ PACKAGECONFIG[gtk] = "--enable-gtk3,--disable-gtk3,gtk+3"
|
|||
# ensure OpenSSL is used for HLS AES description instead of nettle
|
||||
# (OpenSSL is a shared dependency with dtls)
|
||||
PACKAGECONFIG[hls] = "--enable-hls --with-hls-crypto=openssl,--disable-hls,openssl"
|
||||
PACKAGECONFIG[kms] = "--enable-kms,--disable-kms,libdrm"
|
||||
PACKAGECONFIG[libmms] = "--enable-libmms,--disable-libmms,libmms"
|
||||
PACKAGECONFIG[libssh2] = "--enable-libssh2,--disable-libssh2,libssh2"
|
||||
PACKAGECONFIG[modplug] = "--enable-modplug,--disable-modplug,libmodplug"
|
||||
|
|
|
@ -13,24 +13,24 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
|
|||
gst-libs/gst/mpegts/Makefile.am | 2 +-
|
||||
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/gst-libs/gst/gl/Makefile.am b/gst-libs/gst/gl/Makefile.am
|
||||
index f968357..7cc2c7a 100644
|
||||
--- a/gst-libs/gst/gl/Makefile.am
|
||||
+++ b/gst-libs/gst/gl/Makefile.am
|
||||
@@ -167,7 +167,7 @@ GstGL-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstgl-@GST_API_VERSION@
|
||||
--library=libgstgl-@GST_API_VERSION@.la \
|
||||
Index: gst-plugins-bad-1.10.1/gst-libs/gst/gl/Makefile.am
|
||||
===================================================================
|
||||
--- gst-plugins-bad-1.10.1.orig/gst-libs/gst/gl/Makefile.am
|
||||
+++ gst-plugins-bad-1.10.1/gst-libs/gst/gl/Makefile.am
|
||||
@@ -171,7 +171,7 @@ GstGL-@GST_API_VERSION@.gir: $(INTROSPEC
|
||||
--include=Gst-@GST_API_VERSION@ \
|
||||
--include=GstBase-@GST_API_VERSION@ \
|
||||
--include=GstVideo-@GST_API_VERSION@ \
|
||||
- --libtool="$(top_builddir)/libtool" \
|
||||
+ --libtool="$(LIBTOOL)" \
|
||||
--pkg gstreamer-@GST_API_VERSION@ \
|
||||
--pkg gstreamer-base-@GST_API_VERSION@ \
|
||||
--pkg gstreamer-video-@GST_API_VERSION@ \
|
||||
diff --git a/gst-libs/gst/insertbin/Makefile.am b/gst-libs/gst/insertbin/Makefile.am
|
||||
index 09eb97c..b746885 100644
|
||||
--- a/gst-libs/gst/insertbin/Makefile.am
|
||||
+++ b/gst-libs/gst/insertbin/Makefile.am
|
||||
@@ -44,7 +44,7 @@ GstInsertBin-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstinsertbin-@GS
|
||||
Index: gst-plugins-bad-1.10.1/gst-libs/gst/insertbin/Makefile.am
|
||||
===================================================================
|
||||
--- gst-plugins-bad-1.10.1.orig/gst-libs/gst/insertbin/Makefile.am
|
||||
+++ gst-plugins-bad-1.10.1/gst-libs/gst/insertbin/Makefile.am
|
||||
@@ -45,7 +45,7 @@ GstInsertBin-@GST_API_VERSION@.gir: $(IN
|
||||
--library=libgstinsertbin-@GST_API_VERSION@.la \
|
||||
--include=Gst-@GST_API_VERSION@ \
|
||||
--include=GstBase-@GST_API_VERSION@ \
|
||||
|
@ -39,11 +39,11 @@ index 09eb97c..b746885 100644
|
|||
--pkg gstreamer-@GST_API_VERSION@ \
|
||||
--pkg gstreamer-base-@GST_API_VERSION@ \
|
||||
--pkg-export gstreamer-insertbin-@GST_API_VERSION@ \
|
||||
diff --git a/gst-libs/gst/mpegts/Makefile.am b/gst-libs/gst/mpegts/Makefile.am
|
||||
index 2511d49..c1cbce6 100644
|
||||
--- a/gst-libs/gst/mpegts/Makefile.am
|
||||
+++ b/gst-libs/gst/mpegts/Makefile.am
|
||||
@@ -78,7 +78,7 @@ GstMpegts-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstmpegts-@GST_API_
|
||||
Index: gst-plugins-bad-1.10.1/gst-libs/gst/mpegts/Makefile.am
|
||||
===================================================================
|
||||
--- gst-plugins-bad-1.10.1.orig/gst-libs/gst/mpegts/Makefile.am
|
||||
+++ gst-plugins-bad-1.10.1/gst-libs/gst/mpegts/Makefile.am
|
||||
@@ -79,7 +79,7 @@ GstMpegts-@GST_API_VERSION@.gir: $(INTRO
|
||||
--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-video-@GST_API_VERSION@` \
|
||||
--library=libgstmpegts-@GST_API_VERSION@.la \
|
||||
--include=Gst-@GST_API_VERSION@ \
|
||||
|
@ -52,6 +52,3 @@ index 2511d49..c1cbce6 100644
|
|||
--pkg gstreamer-@GST_API_VERSION@ \
|
||||
--pkg gstreamer-video-@GST_API_VERSION@ \
|
||||
--pkg-export gstreamer-mpegts-@GST_API_VERSION@ \
|
||||
--
|
||||
2.6.2
|
||||
|
||||
|
|
|
@ -12,16 +12,13 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
|
|||
pkgconfig/gstreamer-gl.pc.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pkgconfig/gstreamer-gl.pc.in b/pkgconfig/gstreamer-gl.pc.in
|
||||
index 5589e2a..b986450 100644
|
||||
--- a/pkgconfig/gstreamer-gl.pc.in
|
||||
+++ b/pkgconfig/gstreamer-gl.pc.in
|
||||
Index: gst-plugins-bad-1.10.1/pkgconfig/gstreamer-gl.pc.in
|
||||
===================================================================
|
||||
--- gst-plugins-bad-1.10.1.orig/pkgconfig/gstreamer-gl.pc.in
|
||||
+++ gst-plugins-bad-1.10.1/pkgconfig/gstreamer-gl.pc.in
|
||||
@@ -10,4 +10,4 @@ Version: @VERSION@
|
||||
Requires: gstreamer-base-@GST_API_VERSION@ gstreamer-@GST_API_VERSION@
|
||||
|
||||
Libs: -L${libdir} -lgstgl-@GST_API_VERSION@ @GL_LIBS@
|
||||
-Cflags: -I${includedir} @GL_CFLAGS@
|
||||
+Cflags: -I${includedir}
|
||||
--
|
||||
2.7.0
|
||||
|
||||
-Cflags: -I${includedir} -I${libdir}/gstreamer-@GST_API_VERSION@/include @GL_CFLAGS@
|
||||
+Cflags: -I${includedir} -I${libdir}/gstreamer-@GST_API_VERSION@/include
|
||||
|
|
|
@ -1,634 +0,0 @@
|
|||
From 8a0e97f7e672301cc76e394855e8c7a3448b0249 Mon Sep 17 00:00:00 2001
|
||||
From: Haihua Hu <jared.hu@nxp.com>
|
||||
Date: Fri, 8 Apr 2016 16:47:15 +0800
|
||||
Subject: [PATCH 4/6] [glplugin] enable gldeinterlace on OpenGL ES
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
1.Porting the exist deinterlace shader and OpenGL callback
|
||||
to be compatible with OpenGL ES.
|
||||
2.Add a our blur vertical shader to gldeinterlace.
|
||||
3.Add a property named “method” to let user choose which
|
||||
deinterlace function to use. Default to choose blur vertical
|
||||
method for better performance.
|
||||
|
||||
Upstream-Status: Backport [1.9.1]
|
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=764873
|
||||
|
||||
Signed-off-by: Haihua Hu <jared.hu@nxp.com>
|
||||
---
|
||||
ext/gl/Makefile.am | 4 +-
|
||||
ext/gl/gstgldeinterlace.c | 344 +++++++++++++++++++++++++++++++++++-----------
|
||||
ext/gl/gstgldeinterlace.h | 6 +-
|
||||
ext/gl/gstopengl.c | 13 +-
|
||||
4 files changed, 275 insertions(+), 92 deletions(-)
|
||||
|
||||
diff --git a/ext/gl/Makefile.am b/ext/gl/Makefile.am
|
||||
index 5d55f54..46419a7 100644
|
||||
--- a/ext/gl/Makefile.am
|
||||
+++ b/ext/gl/Makefile.am
|
||||
@@ -40,6 +40,7 @@ libgstopengl_la_SOURCES = \
|
||||
gstglfilterapp.c \
|
||||
gstglviewconvert.c \
|
||||
gstglstereosplit.c \
|
||||
+ gstgldeinterlace.c \
|
||||
gstglstereomix.c
|
||||
|
||||
noinst_HEADERS = \
|
||||
@@ -63,20 +64,19 @@ noinst_HEADERS = \
|
||||
gstglfilterapp.h \
|
||||
gstglstereosplit.h \
|
||||
gstglstereomix.h \
|
||||
+ gstgldeinterlace.h \
|
||||
gstglviewconvert.h
|
||||
|
||||
# full opengl required
|
||||
if USE_OPENGL
|
||||
libgstopengl_la_SOURCES += \
|
||||
gstglfilterglass.c \
|
||||
- gstgldeinterlace.c \
|
||||
gltestsrc.c \
|
||||
gstgltestsrc.c \
|
||||
gstglmosaic.c
|
||||
|
||||
noinst_HEADERS += \
|
||||
gstglfilterglass.h \
|
||||
- gstgldeinterlace.h \
|
||||
gltestsrc.h \
|
||||
gstgltestsrc.h \
|
||||
gstglmosaic.h \
|
||||
diff --git a/ext/gl/gstgldeinterlace.c b/ext/gl/gstgldeinterlace.c
|
||||
index bd0eff0..c1250dc 100644
|
||||
--- a/ext/gl/gstgldeinterlace.c
|
||||
+++ b/ext/gl/gstgldeinterlace.c
|
||||
@@ -43,7 +43,8 @@ GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
|
||||
|
||||
enum
|
||||
{
|
||||
- PROP_0
|
||||
+ PROP_0,
|
||||
+ PROP_METHOD
|
||||
};
|
||||
|
||||
#define DEBUG_INIT \
|
||||
@@ -57,17 +58,23 @@ static void gst_gl_deinterlace_set_property (GObject * object,
|
||||
static void gst_gl_deinterlace_get_property (GObject * object,
|
||||
guint prop_id, GValue * value, GParamSpec * pspec);
|
||||
|
||||
+static gboolean gst_gl_deinterlace_start (GstBaseTransform * trans);
|
||||
static gboolean gst_gl_deinterlace_reset (GstBaseTransform * trans);
|
||||
-static gboolean gst_gl_deinterlace_init_shader (GstGLFilter * filter);
|
||||
+static gboolean gst_gl_deinterlace_init_fbo (GstGLFilter * filter);
|
||||
static gboolean gst_gl_deinterlace_filter (GstGLFilter * filter,
|
||||
GstBuffer * inbuf, GstBuffer * outbuf);
|
||||
static gboolean gst_gl_deinterlace_filter_texture (GstGLFilter * filter,
|
||||
guint in_tex, guint out_tex);
|
||||
-static void gst_gl_deinterlace_callback (gint width, gint height,
|
||||
+static void gst_gl_deinterlace_vfir_callback (gint width, gint height,
|
||||
+ guint texture, gpointer stuff);
|
||||
+static void gst_gl_deinterlace_greedyh_callback (gint width, gint height,
|
||||
guint texture, gpointer stuff);
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
static const gchar *greedyh_fragment_source =
|
||||
+ "#ifdef GL_ES\n"
|
||||
+ "precision mediump float;\n"
|
||||
+ "#endif\n"
|
||||
"uniform sampler2D tex;\n"
|
||||
"uniform sampler2D tex_prev;\n"
|
||||
"uniform float max_comb;\n"
|
||||
@@ -75,35 +82,35 @@ static const gchar *greedyh_fragment_source =
|
||||
"uniform float motion_sense;\n"
|
||||
"uniform float width;\n"
|
||||
"uniform float height;\n"
|
||||
+ "varying vec2 v_texcoord;\n"
|
||||
|
||||
"void main () {\n"
|
||||
- " vec2 texcoord = gl_TexCoord[0].xy;\n"
|
||||
- " if (int(mod(texcoord.y * height, 2.0)) == 0) {\n"
|
||||
- " gl_FragColor = vec4(texture2D(tex_prev, texcoord).rgb, 1.0);\n"
|
||||
+ " if (int(mod(v_texcoord.y * height, 2.0)) == 0) {\n"
|
||||
+ " gl_FragColor = vec4(texture2D(tex_prev, v_texcoord).rgb, 1.0);\n"
|
||||
" } else {\n"
|
||||
" vec2 texcoord_L1_a1, texcoord_L3_a1, texcoord_L1, texcoord_L3, texcoord_L1_1, texcoord_L3_1;\n"
|
||||
" vec3 L1_a1, L3_a1, L1, L3, L1_1, L3_1;\n"
|
||||
|
||||
- " texcoord_L1 = vec2(texcoord.x, texcoord.y - 1.0 / height);\n"
|
||||
- " texcoord_L3 = vec2(texcoord.x, texcoord.y + 1.0 / height);\n"
|
||||
+ " texcoord_L1 = vec2(v_texcoord.x, v_texcoord.y - 1.0 / height);\n"
|
||||
+ " texcoord_L3 = vec2(v_texcoord.x, v_texcoord.y + 1.0 / height);\n"
|
||||
" L1 = texture2D(tex_prev, texcoord_L1).rgb;\n"
|
||||
" L3 = texture2D(tex_prev, texcoord_L3).rgb;\n"
|
||||
- " if (texcoord.x == 1.0 && texcoord.y == 1.0) {\n"
|
||||
+ " if (v_texcoord.x == 1.0 && v_texcoord.y == 1.0) {\n"
|
||||
" L1_1 = L1;\n"
|
||||
" L3_1 = L3;\n"
|
||||
" } else {\n"
|
||||
- " texcoord_L1_1 = vec2(texcoord.x + 1.0 / width, texcoord.y - 1.0 / height);\n"
|
||||
- " texcoord_L3_1 = vec2(texcoord.x + 1.0 / width, texcoord.y + 1.0 / height);\n"
|
||||
+ " texcoord_L1_1 = vec2(v_texcoord.x + 1.0 / width, v_texcoord.y - 1.0 / height);\n"
|
||||
+ " texcoord_L3_1 = vec2(v_texcoord.x + 1.0 / width, v_texcoord.y + 1.0 / height);\n"
|
||||
" L1_1 = texture2D(tex_prev, texcoord_L1_1).rgb;\n"
|
||||
" L3_1 = texture2D(tex_prev, texcoord_L3_1).rgb;\n"
|
||||
" }\n"
|
||||
|
||||
- " if (int(ceil(texcoord.x + texcoord.y)) == 0) {\n"
|
||||
+ " if (int(ceil(v_texcoord.x + v_texcoord.y)) == 0) {\n"
|
||||
" L1_a1 = L1;\n"
|
||||
" L3_a1 = L3;\n"
|
||||
" } else {\n"
|
||||
- " texcoord_L1_a1 = vec2(texcoord.x - 1.0 / width, texcoord.y - 1.0 / height);\n"
|
||||
- " texcoord_L3_a1 = vec2(texcoord.x - 1.0 / width, texcoord.y + 1.0 / height);\n"
|
||||
+ " texcoord_L1_a1 = vec2(v_texcoord.x - 1.0 / width, v_texcoord.y - 1.0 / height);\n"
|
||||
+ " texcoord_L3_a1 = vec2(v_texcoord.x - 1.0 / width, v_texcoord.y + 1.0 / height);\n"
|
||||
" L1_a1 = texture2D(tex_prev, texcoord_L1_a1).rgb;\n"
|
||||
" L3_a1 = texture2D(tex_prev, texcoord_L3_a1).rgb;\n"
|
||||
" }\n"
|
||||
@@ -113,8 +120,8 @@ static const gchar *greedyh_fragment_source =
|
||||
" vec3 avg_1 = (L1_1 + L3_1) / 2.0;\n"
|
||||
" vec3 avg_s = (avg_a1 + avg_1) / 2.0;\n"
|
||||
" vec3 avg_sc = (avg_s + avg) / 2.0;\n"
|
||||
- " vec3 L2 = texture2D(tex, texcoord).rgb;\n"
|
||||
- " vec3 LP2 = texture2D(tex_prev, texcoord).rgb;\n"
|
||||
+ " vec3 L2 = texture2D(tex, v_texcoord).rgb;\n"
|
||||
+ " vec3 LP2 = texture2D(tex_prev, v_texcoord).rgb;\n"
|
||||
" vec3 best;\n"
|
||||
" if (abs(L2.r - avg_sc.r) < abs(LP2.r - avg_sc.r)) {\n"
|
||||
" best.r = L2.r;\n" " } else {\n"
|
||||
@@ -144,8 +151,87 @@ static const gchar *greedyh_fragment_source =
|
||||
" gl_FragColor = vec4(last, 1.0);\n"
|
||||
" }\n"
|
||||
"}\n";
|
||||
+
|
||||
+const gchar *vfir_fragment_source =
|
||||
+ "#ifdef GL_ES\n"
|
||||
+ "precision mediump float;\n"
|
||||
+ "#endif\n"
|
||||
+ "uniform sampler2D tex;\n"
|
||||
+ "uniform float width;\n"
|
||||
+ "uniform float height;\n"
|
||||
+ "varying vec2 v_texcoord;\n"
|
||||
+ "void main()\n"
|
||||
+ "{\n"
|
||||
+ " vec2 topcoord, botcoord;\n"
|
||||
+ " vec4 cur_color, top_color, bot_color;\n"
|
||||
+ " topcoord.x = v_texcoord.x;\n"
|
||||
+ " botcoord.x = v_texcoord.x;\n"
|
||||
+ " if (v_texcoord.y == 0.0 || v_texcoord.y == 1.0) {\n"
|
||||
+ " topcoord.y = v_texcoord.y ;\n"
|
||||
+ " botcoord.y = v_texcoord.y ;\n"
|
||||
+ " }\n"
|
||||
+ " else {\n"
|
||||
+ " topcoord.y = v_texcoord.y - 1.0/height;\n"
|
||||
+ " botcoord.y = v_texcoord.y + 1.0/height;\n"
|
||||
+ " }\n"
|
||||
+ " cur_color = texture2D(tex, v_texcoord);\n"
|
||||
+ " top_color = texture2D(tex, topcoord);\n"
|
||||
+ " bot_color = texture2D(tex, botcoord);\n"
|
||||
+ " gl_FragColor = 0.5*cur_color + 0.25*top_color + 0.25*bot_color;\n"
|
||||
+ "}";
|
||||
/* *INDENT-ON* */
|
||||
|
||||
+/* dont' forget to edit the following when a new method is added */
|
||||
+typedef enum
|
||||
+{
|
||||
+ GST_GL_DEINTERLACE_VFIR,
|
||||
+ GST_GL_DEINTERLACE_GREEDYH
|
||||
+} GstGLDeinterlaceMethod;
|
||||
+
|
||||
+static const GEnumValue *
|
||||
+gst_gl_deinterlace_get_methods (void)
|
||||
+{
|
||||
+ static const GEnumValue method_types[] = {
|
||||
+ {GST_GL_DEINTERLACE_VFIR, "Blur Vertical", "vfir"},
|
||||
+ {GST_GL_DEINTERLACE_GREEDYH, "Motion Adaptive: Advanced Detection",
|
||||
+ "greedhy"},
|
||||
+ {0, NULL, NULL}
|
||||
+ };
|
||||
+ return method_types;
|
||||
+}
|
||||
+
|
||||
+#define GST_TYPE_GL_DEINTERLACE_METHODS (gst_gl_deinterlace_method_get_type ())
|
||||
+static GType
|
||||
+gst_gl_deinterlace_method_get_type (void)
|
||||
+{
|
||||
+ static GType gl_deinterlace_method_type = 0;
|
||||
+ if (!gl_deinterlace_method_type) {
|
||||
+ gl_deinterlace_method_type =
|
||||
+ g_enum_register_static ("GstGLDeinterlaceMethod",
|
||||
+ gst_gl_deinterlace_get_methods ());
|
||||
+ }
|
||||
+ return gl_deinterlace_method_type;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+gst_gl_deinterlace_set_method (GstGLDeinterlace * deinterlace,
|
||||
+ guint method_types)
|
||||
+{
|
||||
+ switch (method_types) {
|
||||
+ case GST_GL_DEINTERLACE_VFIR:
|
||||
+ deinterlace->deinterlacefunc = gst_gl_deinterlace_vfir_callback;
|
||||
+ deinterlace->current_method = method_types;
|
||||
+ break;
|
||||
+ case GST_GL_DEINTERLACE_GREEDYH:
|
||||
+ deinterlace->deinterlacefunc = gst_gl_deinterlace_greedyh_callback;
|
||||
+ deinterlace->current_method = method_types;
|
||||
+ break;
|
||||
+ default:
|
||||
+ g_assert_not_reached ();
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void
|
||||
gst_gl_deinterlace_class_init (GstGLDeinterlaceClass * klass)
|
||||
{
|
||||
@@ -163,25 +249,60 @@ gst_gl_deinterlace_class_init (GstGLDeinterlaceClass * klass)
|
||||
"Deinterlacing based on fragment shaders",
|
||||
"Julien Isorce <julien.isorce@mail.com>");
|
||||
|
||||
+ g_object_class_install_property (gobject_class,
|
||||
+ PROP_METHOD,
|
||||
+ g_param_spec_enum ("method",
|
||||
+ "Deinterlace Method",
|
||||
+ "Select which deinterlace method apply to GL video texture",
|
||||
+ GST_TYPE_GL_DEINTERLACE_METHODS,
|
||||
+ GST_GL_DEINTERLACE_VFIR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||
+
|
||||
+ GST_BASE_TRANSFORM_CLASS (klass)->start = gst_gl_deinterlace_start;
|
||||
GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_deinterlace_reset;
|
||||
|
||||
GST_GL_FILTER_CLASS (klass)->filter = gst_gl_deinterlace_filter;
|
||||
GST_GL_FILTER_CLASS (klass)->filter_texture =
|
||||
gst_gl_deinterlace_filter_texture;
|
||||
- GST_GL_FILTER_CLASS (klass)->init_fbo = gst_gl_deinterlace_init_shader;
|
||||
+ GST_GL_FILTER_CLASS (klass)->init_fbo = gst_gl_deinterlace_init_fbo;
|
||||
|
||||
- GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api = GST_GL_API_OPENGL;
|
||||
+ GST_GL_BASE_FILTER_CLASS (klass)->supported_gl_api =
|
||||
+ GST_GL_API_OPENGL | GST_GL_API_GLES2 | GST_GL_API_OPENGL3;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_gl_deinterlace_init (GstGLDeinterlace * filter)
|
||||
{
|
||||
- filter->shader = NULL;
|
||||
+ filter->shaderstable = NULL;
|
||||
+ filter->deinterlacefunc = gst_gl_deinterlace_vfir_callback;
|
||||
+ filter->current_method = GST_GL_DEINTERLACE_VFIR;
|
||||
filter->prev_buffer = NULL;
|
||||
filter->prev_tex = 0;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
+gst_gl_deinterlace_start (GstBaseTransform * trans)
|
||||
+{
|
||||
+ GstGLDeinterlace *deinterlace_filter = GST_GL_DEINTERLACE (trans);
|
||||
+
|
||||
+ deinterlace_filter->shaderstable = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
+
|
||||
+ return GST_BASE_TRANSFORM_CLASS (parent_class)->start (trans);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+gst_gl_deinterlace_ghash_func_clean (gpointer key, gpointer value,
|
||||
+ gpointer data)
|
||||
+{
|
||||
+ GstGLShader *shader = (GstGLShader *) value;
|
||||
+ GstGLFilter *filter = (GstGLFilter *) data;
|
||||
+
|
||||
+ //blocking call, wait the opengl thread has destroyed the shader
|
||||
+ gst_gl_context_del_shader (GST_GL_BASE_FILTER (filter)->context, shader);
|
||||
+
|
||||
+ value = NULL;
|
||||
+}
|
||||
+
|
||||
+static gboolean
|
||||
gst_gl_deinterlace_reset (GstBaseTransform * trans)
|
||||
{
|
||||
GstGLDeinterlace *deinterlace_filter = GST_GL_DEINTERLACE (trans);
|
||||
@@ -189,10 +310,17 @@ gst_gl_deinterlace_reset (GstBaseTransform * trans)
|
||||
gst_buffer_replace (&deinterlace_filter->prev_buffer, NULL);
|
||||
|
||||
//blocking call, wait the opengl thread has destroyed the shader
|
||||
- if (deinterlace_filter->shader)
|
||||
- gst_gl_context_del_shader (GST_GL_BASE_FILTER (trans)->context,
|
||||
- deinterlace_filter->shader);
|
||||
- deinterlace_filter->shader = NULL;
|
||||
+ if (deinterlace_filter->shaderstable) {
|
||||
+ /* release shaders in the gl thread */
|
||||
+ g_hash_table_foreach (deinterlace_filter->shaderstable,
|
||||
+ gst_gl_deinterlace_ghash_func_clean, deinterlace_filter);
|
||||
+
|
||||
+ /* clean the htable without calling values destructors
|
||||
+ * because shaders have been released in the glthread
|
||||
+ * through the foreach func */
|
||||
+ g_hash_table_unref (deinterlace_filter->shaderstable);
|
||||
+ deinterlace_filter->shaderstable = NULL;
|
||||
+ }
|
||||
|
||||
return GST_BASE_TRANSFORM_CLASS (parent_class)->stop (trans);
|
||||
}
|
||||
@@ -201,9 +329,12 @@ static void
|
||||
gst_gl_deinterlace_set_property (GObject * object, guint prop_id,
|
||||
const GValue * value, GParamSpec * pspec)
|
||||
{
|
||||
- //GstGLDeinterlace *filter = GST_GL_DEINTERLACE (object);
|
||||
+ GstGLDeinterlace *filter = GST_GL_DEINTERLACE (object);
|
||||
|
||||
switch (prop_id) {
|
||||
+ case PROP_METHOD:
|
||||
+ gst_gl_deinterlace_set_method (filter, g_value_get_enum (value));
|
||||
+ break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -214,9 +345,12 @@ static void
|
||||
gst_gl_deinterlace_get_property (GObject * object, guint prop_id,
|
||||
GValue * value, GParamSpec * pspec)
|
||||
{
|
||||
- //GstGLDeinterlace *filter = GST_GL_DEINTERLACE (object);
|
||||
+ GstGLDeinterlace *filter = GST_GL_DEINTERLACE (object);
|
||||
|
||||
switch (prop_id) {
|
||||
+ case PROP_METHOD:
|
||||
+ g_value_set_enum (value, filter->current_method);
|
||||
+ break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -224,13 +358,9 @@ gst_gl_deinterlace_get_property (GObject * object, guint prop_id,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
-gst_gl_deinterlace_init_shader (GstGLFilter * filter)
|
||||
+gst_gl_deinterlace_init_fbo (GstGLFilter * filter)
|
||||
{
|
||||
- GstGLDeinterlace *deinterlace_filter = GST_GL_DEINTERLACE (filter);
|
||||
-
|
||||
- //blocking call, wait the opengl thread has compiled the shader
|
||||
- return gst_gl_context_gen_shader (GST_GL_BASE_FILTER (filter)->context, 0,
|
||||
- greedyh_fragment_source, &deinterlace_filter->shader);
|
||||
+ return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -241,7 +371,7 @@ gst_gl_deinterlace_filter_texture (GstGLFilter * filter, guint in_tex,
|
||||
|
||||
//blocking call, use a FBO
|
||||
gst_gl_filter_render_to_target (filter, TRUE, in_tex, out_tex,
|
||||
- gst_gl_deinterlace_callback, deinterlace_filter);
|
||||
+ deinterlace_filter->deinterlacefunc, deinterlace_filter);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -259,36 +389,104 @@ gst_gl_deinterlace_filter (GstGLFilter * filter, GstBuffer * inbuf,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
-//opengl scene, params: input texture (not the output filter->texture)
|
||||
+static GstGLShader *
|
||||
+gst_gl_deinterlace_get_fragment_shader (GstGLFilter * filter,
|
||||
+ const gchar * shader_name, const gchar * shader_source)
|
||||
+{
|
||||
+ GstGLShader *shader = NULL;
|
||||
+ GstGLDeinterlace *deinterlace_filter = GST_GL_DEINTERLACE (filter);
|
||||
+ GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
|
||||
+
|
||||
+ shader = g_hash_table_lookup (deinterlace_filter->shaderstable, shader_name);
|
||||
+
|
||||
+ if (!shader) {
|
||||
+ GError *error = NULL;
|
||||
+
|
||||
+ if (!(shader = gst_gl_shader_new_link_with_stages (context, &error,
|
||||
+ gst_glsl_stage_new_default_vertex (context),
|
||||
+ gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER,
|
||||
+ GST_GLSL_VERSION_NONE,
|
||||
+ GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY,
|
||||
+ shader_source), NULL))) {
|
||||
+ GST_ELEMENT_ERROR (deinterlace_filter, RESOURCE, NOT_FOUND,
|
||||
+ ("Failed to initialize %s shader", shader_name), (NULL));
|
||||
+ }
|
||||
+
|
||||
+ filter->draw_attr_position_loc =
|
||||
+ gst_gl_shader_get_attribute_location (shader, "a_position");
|
||||
+ filter->draw_attr_texture_loc =
|
||||
+ gst_gl_shader_get_attribute_location (shader, "a_texcoord");
|
||||
+ }
|
||||
+
|
||||
+ g_hash_table_insert (deinterlace_filter->shaderstable, (gchar *) shader_name,
|
||||
+ shader);
|
||||
+
|
||||
+ return shader;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
-gst_gl_deinterlace_callback (gint width, gint height, guint texture,
|
||||
+gst_gl_deinterlace_vfir_callback (gint width, gint height, guint texture,
|
||||
gpointer stuff)
|
||||
{
|
||||
- GstGLDeinterlace *deinterlace_filter = GST_GL_DEINTERLACE (stuff);
|
||||
+ GstGLShader *shader;
|
||||
GstGLFilter *filter = GST_GL_FILTER (stuff);
|
||||
- GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable;
|
||||
+ GstGLDeinterlace *deinterlace_filter = GST_GL_DEINTERLACE (filter);
|
||||
+ GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
|
||||
+ GstGLFuncs *gl = context->gl_vtable;
|
||||
+
|
||||
+ shader = gst_gl_deinterlace_get_fragment_shader (deinterlace_filter, "vfir",
|
||||
+ vfir_fragment_source);
|
||||
+
|
||||
+ if (!shader)
|
||||
+ return;
|
||||
+
|
||||
+#if GST_GL_HAVE_OPENGL
|
||||
+ if (USING_OPENGL (context)) {
|
||||
+ gl->MatrixMode (GL_PROJECTION);
|
||||
+ gl->LoadIdentity ();
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ gst_gl_shader_use (shader);
|
||||
+
|
||||
+ gl->ActiveTexture (GL_TEXTURE0);
|
||||
+ gl->BindTexture (GL_TEXTURE_2D, texture);
|
||||
+
|
||||
+ gst_gl_shader_set_uniform_1i (shader, "tex", 0);
|
||||
+ gst_gl_shader_set_uniform_1f (shader, "width",
|
||||
+ GST_VIDEO_INFO_WIDTH (&filter->out_info));
|
||||
+ gst_gl_shader_set_uniform_1f (shader, "height",
|
||||
+ GST_VIDEO_INFO_HEIGHT (&filter->out_info));
|
||||
+
|
||||
+ gst_gl_filter_draw_texture (filter, texture, width, height);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+gst_gl_deinterlace_greedyh_callback (gint width, gint height, guint texture,
|
||||
+ gpointer stuff)
|
||||
+{
|
||||
+ GstGLShader *shader;
|
||||
+ GstGLFilter *filter = GST_GL_FILTER (stuff);
|
||||
+ GstGLDeinterlace *deinterlace_filter = GST_GL_DEINTERLACE (filter);
|
||||
+ GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;
|
||||
+ GstGLFuncs *gl = context->gl_vtable;
|
||||
guint temp;
|
||||
|
||||
- GLfloat verts[] = { -1.0, -1.0,
|
||||
- 1.0, -1.0,
|
||||
- 1.0, 1.0,
|
||||
- -1.0, 1.0
|
||||
- };
|
||||
- GLfloat texcoords0[] = { 0.0f, 0.0f,
|
||||
- 1.0f, 0.0f,
|
||||
- 1.0f, 1.0f,
|
||||
- 0.0f, 1.0f
|
||||
- };
|
||||
- GLfloat texcoords1[] = { 0.0f, 0.0f,
|
||||
- 1.0f, 0.0f,
|
||||
- 1.0f, 1.0f,
|
||||
- 0.0f, 1.0f
|
||||
- };
|
||||
+ shader =
|
||||
+ gst_gl_deinterlace_get_fragment_shader (deinterlace_filter, "greedhy",
|
||||
+ greedyh_fragment_source);
|
||||
|
||||
- gl->MatrixMode (GL_PROJECTION);
|
||||
- gl->LoadIdentity ();
|
||||
+ if (!shader)
|
||||
+ return;
|
||||
|
||||
- gst_gl_shader_use (deinterlace_filter->shader);
|
||||
+#if GST_GL_HAVE_OPENGL
|
||||
+ if (USING_OPENGL (context)) {
|
||||
+ gl->MatrixMode (GL_PROJECTION);
|
||||
+ gl->LoadIdentity ();
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ gst_gl_shader_use (shader);
|
||||
|
||||
if (G_UNLIKELY (deinterlace_filter->prev_tex == 0)) {
|
||||
gst_gl_context_gen_texture (GST_GL_BASE_FILTER (filter)->context,
|
||||
@@ -298,44 +496,24 @@ gst_gl_deinterlace_callback (gint width, gint height, guint texture,
|
||||
GST_VIDEO_INFO_HEIGHT (&filter->out_info));
|
||||
} else {
|
||||
gl->ActiveTexture (GL_TEXTURE1);
|
||||
- gst_gl_shader_set_uniform_1i (deinterlace_filter->shader, "tex_prev", 1);
|
||||
+ gst_gl_shader_set_uniform_1i (shader, "tex_prev", 1);
|
||||
gl->BindTexture (GL_TEXTURE_2D, deinterlace_filter->prev_tex);
|
||||
}
|
||||
|
||||
gl->ActiveTexture (GL_TEXTURE0);
|
||||
- gst_gl_shader_set_uniform_1i (deinterlace_filter->shader, "tex", 0);
|
||||
+ gl->BindTexture (GL_TEXTURE_2D, texture);
|
||||
|
||||
- gst_gl_shader_set_uniform_1f (deinterlace_filter->shader, "max_comb",
|
||||
- 5.0f / 255.0f);
|
||||
- gst_gl_shader_set_uniform_1f (deinterlace_filter->shader, "motion_threshold",
|
||||
- 25.0f / 255.0f);
|
||||
- gst_gl_shader_set_uniform_1f (deinterlace_filter->shader, "motion_sense",
|
||||
- 30.0f / 255.0f);
|
||||
+ gst_gl_shader_set_uniform_1i (shader, "tex", 0);
|
||||
+ gst_gl_shader_set_uniform_1f (shader, "max_comb", 5.0f / 255.0f);
|
||||
+ gst_gl_shader_set_uniform_1f (shader, "motion_threshold", 25.0f / 255.0f);
|
||||
+ gst_gl_shader_set_uniform_1f (shader, "motion_sense", 30.0f / 255.0f);
|
||||
|
||||
- gst_gl_shader_set_uniform_1f (deinterlace_filter->shader, "width",
|
||||
+ gst_gl_shader_set_uniform_1f (shader, "width",
|
||||
GST_VIDEO_INFO_WIDTH (&filter->out_info));
|
||||
- gst_gl_shader_set_uniform_1f (deinterlace_filter->shader, "height",
|
||||
+ gst_gl_shader_set_uniform_1f (shader, "height",
|
||||
GST_VIDEO_INFO_HEIGHT (&filter->out_info));
|
||||
|
||||
- gl->ClientActiveTexture (GL_TEXTURE0);
|
||||
-
|
||||
- gl->EnableClientState (GL_TEXTURE_COORD_ARRAY);
|
||||
- gl->EnableClientState (GL_VERTEX_ARRAY);
|
||||
-
|
||||
- gl->VertexPointer (2, GL_FLOAT, 0, &verts);
|
||||
- gl->TexCoordPointer (2, GL_FLOAT, 0, &texcoords0);
|
||||
-
|
||||
- gl->ClientActiveTexture (GL_TEXTURE1);
|
||||
- gl->EnableClientState (GL_TEXTURE_COORD_ARRAY);
|
||||
- gl->TexCoordPointer (2, GL_FLOAT, 0, &texcoords1);
|
||||
-
|
||||
- gl->DrawArrays (GL_TRIANGLE_FAN, 0, 4);
|
||||
-
|
||||
- gl->DisableClientState (GL_VERTEX_ARRAY);
|
||||
- gl->DisableClientState (GL_TEXTURE_COORD_ARRAY);
|
||||
-
|
||||
- gl->ClientActiveTexture (GL_TEXTURE0);
|
||||
- gl->DisableClientState (GL_TEXTURE_COORD_ARRAY);
|
||||
+ gst_gl_filter_draw_texture (filter, texture, width, height);
|
||||
|
||||
if (texture == filter->in_tex_id) {
|
||||
temp = filter->in_tex_id;
|
||||
diff --git a/ext/gl/gstgldeinterlace.h b/ext/gl/gstgldeinterlace.h
|
||||
index a81a2e7..58a9c0c 100644
|
||||
--- a/ext/gl/gstgldeinterlace.h
|
||||
+++ b/ext/gl/gstgldeinterlace.h
|
||||
@@ -38,9 +38,13 @@ typedef struct _GstGLDeinterlaceClass GstGLDeinterlaceClass;
|
||||
struct _GstGLDeinterlace
|
||||
{
|
||||
GstGLFilter filter;
|
||||
- GstGLShader *shader;
|
||||
+
|
||||
+ GLCB deinterlacefunc;
|
||||
+ GHashTable *shaderstable;
|
||||
GstBuffer *prev_buffer;
|
||||
guint prev_tex;
|
||||
+
|
||||
+ gint current_method;
|
||||
};
|
||||
|
||||
struct _GstGLDeinterlaceClass
|
||||
diff --git a/ext/gl/gstopengl.c b/ext/gl/gstopengl.c
|
||||
index 50676c4..135862a 100644
|
||||
--- a/ext/gl/gstopengl.c
|
||||
+++ b/ext/gl/gstopengl.c
|
||||
@@ -62,6 +62,7 @@
|
||||
#include "gstglstereosplit.h"
|
||||
#include "gstglstereomix.h"
|
||||
#include "gstglviewconvert.h"
|
||||
+#include "gstgldeinterlace.h"
|
||||
|
||||
#if HAVE_GRAPHENE
|
||||
#include "gstgltransformation.h"
|
||||
@@ -77,7 +78,6 @@
|
||||
#include "gstgltestsrc.h"
|
||||
#include "gstglfilterglass.h"
|
||||
/* #include "gstglfilterreflectedscreen.h" */
|
||||
-#include "gstgldeinterlace.h"
|
||||
#include "gstglmosaic.h"
|
||||
#if HAVE_PNG
|
||||
#include "gstgldifferencematte.h"
|
||||
@@ -226,6 +226,12 @@ plugin_init (GstPlugin * plugin)
|
||||
GST_RANK_NONE, GST_TYPE_GL_STEREO_MIX)) {
|
||||
return FALSE;
|
||||
}
|
||||
+
|
||||
+ if (!gst_element_register (plugin, "gldeinterlace",
|
||||
+ GST_RANK_NONE, GST_TYPE_GL_DEINTERLACE)) {
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
#if HAVE_JPEG
|
||||
#if HAVE_PNG
|
||||
if (!gst_element_register (plugin, "gloverlay",
|
||||
@@ -250,11 +256,6 @@ plugin_init (GstPlugin * plugin)
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
- if (!gst_element_register (plugin, "gldeinterlace",
|
||||
- GST_RANK_NONE, GST_TYPE_GL_DEINTERLACE)) {
|
||||
- return FALSE;
|
||||
- }
|
||||
-
|
||||
if (!gst_element_register (plugin, "glmosaic",
|
||||
GST_RANK_NONE, GST_TYPE_GL_MOSAIC)) {
|
||||
return FALSE;
|
||||
--
|
||||
1.9.1
|
||||
|
|
@ -1,244 +0,0 @@
|
|||
From 127e517568490fc147211d8b2fb4da01cecbbeb5 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Waters <matthew@centricular.com>
|
||||
Date: Thu, 31 Mar 2016 19:50:28 +1100
|
||||
Subject: [PATCH 5/6] glcolorconvert: implement multiple render targets for
|
||||
GLES3
|
||||
|
||||
There are numerous slight differences required between Desktop GL and GLES3 for
|
||||
multiple render targets.
|
||||
|
||||
1. gl_FragData doesn't exist at all and one is required to use
|
||||
'layout (location = ?) out ...' instead.
|
||||
2. gl_FragColor doesn't exist, same as 1
|
||||
3. texture2D() has been deprecated
|
||||
|
||||
Fortunately most of these have been taken care of with GL3 and the shader
|
||||
mangling already exists so just expand the conditions they are used in. The
|
||||
gl_FragData issue requires a new mangle pass though. We also use this new
|
||||
pass on desktop GL for consistency.
|
||||
|
||||
Upstream-Status: Backport [1.9.1]
|
||||
|
||||
---
|
||||
gst-libs/gst/gl/gstglcolorconvert.c | 125 ++++++++++++++++++++++++++++--------
|
||||
1 file changed, 99 insertions(+), 26 deletions(-)
|
||||
|
||||
diff --git a/gst-libs/gst/gl/gstglcolorconvert.c b/gst-libs/gst/gl/gstglcolorconvert.c
|
||||
index 490ec54..f478faa 100644
|
||||
--- a/gst-libs/gst/gl/gstglcolorconvert.c
|
||||
+++ b/gst-libs/gst/gl/gstglcolorconvert.c
|
||||
@@ -1802,10 +1802,11 @@ _mangle_sampler_type (const gchar * str, GstGLTextureTarget from,
|
||||
|
||||
static gchar *
|
||||
_mangle_varying_attribute (const gchar * str, guint shader_type,
|
||||
- GstGLAPI gl_api)
|
||||
+ GstGLAPI gl_api, guint gl_major, guint gl_minor)
|
||||
{
|
||||
- if (gl_api & GST_GL_API_OPENGL3) {
|
||||
- if (shader_type == GL_VERTEX_SHADER) {
|
||||
+ if (shader_type == GL_VERTEX_SHADER) {
|
||||
+ if ((gl_api & GST_GL_API_OPENGL3) || (gl_api & GST_GL_API_GLES2
|
||||
+ && gl_major >= 3)) {
|
||||
gchar *tmp, *tmp2;
|
||||
GRegex *regex;
|
||||
|
||||
@@ -1821,7 +1822,10 @@ _mangle_varying_attribute (const gchar * str, guint shader_type,
|
||||
|
||||
g_free (tmp);
|
||||
return tmp2;
|
||||
- } else if (shader_type == GL_FRAGMENT_SHADER) {
|
||||
+ }
|
||||
+ } else if (shader_type == GL_FRAGMENT_SHADER) {
|
||||
+ if ((gl_api & GST_GL_API_OPENGL3) || (gl_api & GST_GL_API_GLES2
|
||||
+ && gl_major > 3)) {
|
||||
gchar *tmp;
|
||||
GRegex *regex;
|
||||
|
||||
@@ -1837,28 +1841,48 @@ _mangle_varying_attribute (const gchar * str, guint shader_type,
|
||||
}
|
||||
|
||||
static gchar *
|
||||
-_mangle_frag_color (const gchar * str)
|
||||
+_mangle_frag_color_data (const gchar * str)
|
||||
{
|
||||
GRegex *regex;
|
||||
- gchar *ret;
|
||||
+ gchar *ret, *tmp;
|
||||
|
||||
regex = g_regex_new ("gl_FragColor", 0, 0, NULL);
|
||||
ret = g_regex_replace_literal (regex, str, -1, 0, "fragColor", 0, NULL);
|
||||
g_regex_unref (regex);
|
||||
|
||||
+ tmp = ret;
|
||||
+ /* search and replace 'gl_FragData[NUM]' into fragColor_NUM */
|
||||
+ regex = g_regex_new ("gl_FragData\\[(\\d+)\\]", 0, 0, NULL);
|
||||
+ ret = g_regex_replace (regex, tmp, -1, 0, "fragColor_\\1", 0, NULL);
|
||||
+ g_regex_unref (regex);
|
||||
+ g_free (tmp);
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
-_mangle_version_profile_from_gl_api (GstGLAPI gl_api, GstGLSLVersion * version,
|
||||
- GstGLSLProfile * profile)
|
||||
+_mangle_version_profile_from_gl_api (GstGLAPI gl_api, gint gl_major,
|
||||
+ gint gl_minor, GstGLSLVersion * version, GstGLSLProfile * profile)
|
||||
{
|
||||
+ *version = GST_GLSL_VERSION_NONE;
|
||||
+ *profile = GST_GLSL_PROFILE_NONE;
|
||||
+
|
||||
if (gl_api & GST_GL_API_OPENGL3) {
|
||||
- *version = GST_GLSL_VERSION_150;
|
||||
- *profile = GST_GLSL_PROFILE_NONE;
|
||||
+ if (gl_major > 3 || gl_minor >= 3) {
|
||||
+ *version = GST_GLSL_VERSION_330;
|
||||
+ *profile = GST_GLSL_PROFILE_CORE;
|
||||
+ } else {
|
||||
+ *version = GST_GLSL_VERSION_150;
|
||||
+ *profile = GST_GLSL_PROFILE_NONE;
|
||||
+ }
|
||||
} else if (gl_api & GST_GL_API_GLES2) {
|
||||
- *version = GST_GLSL_VERSION_100;
|
||||
- *profile = GST_GLSL_PROFILE_ES;
|
||||
+ if (gl_major >= 3) {
|
||||
+ *version = GST_GLSL_VERSION_300;
|
||||
+ *profile = GST_GLSL_PROFILE_ES;
|
||||
+ } else if (gl_major >= 2) {
|
||||
+ *version = GST_GLSL_VERSION_100;
|
||||
+ *profile = GST_GLSL_PROFILE_ES;
|
||||
+ }
|
||||
} else if (gl_api & GST_GL_API_OPENGL) {
|
||||
*version = GST_GLSL_VERSION_110;
|
||||
*profile = GST_GLSL_PROFILE_COMPATIBILITY;
|
||||
@@ -1867,22 +1891,28 @@ _mangle_version_profile_from_gl_api (GstGLAPI gl_api, GstGLSLVersion * version,
|
||||
|
||||
static gchar *
|
||||
_mangle_shader (const gchar * str, guint shader_type, GstGLTextureTarget from,
|
||||
- GstGLTextureTarget to, GstGLAPI gl_api, GstGLSLVersion * version,
|
||||
- GstGLSLProfile * profile)
|
||||
+ GstGLTextureTarget to, GstGLAPI gl_api, gint gl_major, gint gl_minor,
|
||||
+ GstGLSLVersion * version, GstGLSLProfile * profile)
|
||||
{
|
||||
gchar *tmp, *tmp2;
|
||||
|
||||
+ _mangle_version_profile_from_gl_api (gl_api, gl_major, gl_minor, version,
|
||||
+ profile);
|
||||
tmp = _mangle_texture_access (str, from, to, gl_api);
|
||||
tmp2 = _mangle_sampler_type (tmp, from, to);
|
||||
g_free (tmp);
|
||||
- tmp = _mangle_varying_attribute (tmp2, shader_type, gl_api);
|
||||
+ tmp =
|
||||
+ _mangle_varying_attribute (tmp2, shader_type, gl_api, gl_major, gl_minor);
|
||||
g_free (tmp2);
|
||||
- if (shader_type == GL_FRAGMENT_SHADER && gl_api & GST_GL_API_OPENGL3) {
|
||||
- tmp2 = _mangle_frag_color (tmp);
|
||||
- g_free (tmp);
|
||||
- tmp = tmp2;
|
||||
+ if (shader_type == GL_FRAGMENT_SHADER) {
|
||||
+ if ((*profile == GST_GLSL_PROFILE_ES && *version >= GST_GLSL_VERSION_300)
|
||||
+ || (*profile == GST_GLSL_PROFILE_CORE
|
||||
+ && *version >= GST_GLSL_VERSION_150)) {
|
||||
+ tmp2 = _mangle_frag_color_data (tmp);
|
||||
+ g_free (tmp);
|
||||
+ tmp = tmp2;
|
||||
+ }
|
||||
}
|
||||
- _mangle_version_profile_from_gl_api (gl_api, version, profile);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
@@ -1899,15 +1929,18 @@ _create_shader (GstGLColorConvert * convert)
|
||||
const gchar *strings[2];
|
||||
GError *error = NULL;
|
||||
GstGLAPI gl_api;
|
||||
+ gint gl_major, gl_minor;
|
||||
int i;
|
||||
|
||||
gl_api = gst_gl_context_get_gl_api (convert->context);
|
||||
+ gst_gl_context_get_gl_version (convert->context, &gl_major, &gl_minor);
|
||||
|
||||
ret = gst_gl_shader_new (convert->context);
|
||||
|
||||
tmp =
|
||||
_mangle_shader (text_vertex_shader, GL_VERTEX_SHADER, info->templ->target,
|
||||
- convert->priv->from_texture_target, gl_api, &version, &profile);
|
||||
+ convert->priv->from_texture_target, gl_api, gl_major, gl_minor, &version,
|
||||
+ &profile);
|
||||
|
||||
tmp1 = gst_glsl_version_profile_to_string (version, profile);
|
||||
version_str = g_strdup_printf ("#version %s\n", tmp1);
|
||||
@@ -1945,9 +1978,37 @@ _create_shader (GstGLColorConvert * convert)
|
||||
if (info->templ->uniforms)
|
||||
g_string_append (str, info->templ->uniforms);
|
||||
|
||||
- if (gl_api & GST_GL_API_OPENGL3) {
|
||||
- g_string_append_c (str, '\n');
|
||||
- g_string_append (str, "out vec4 fragColor;\n");
|
||||
+ g_string_append_c (str, '\n');
|
||||
+
|
||||
+ /* GL 3.3+ and GL ES 3.x */
|
||||
+ if ((profile == GST_GLSL_PROFILE_CORE && version >= GST_GLSL_VERSION_330)
|
||||
+ || (profile == GST_GLSL_PROFILE_ES && version >= GST_GLSL_VERSION_300)) {
|
||||
+ if (info->out_n_textures > 1) {
|
||||
+ gint i;
|
||||
+
|
||||
+ for (i = 0; i < info->out_n_textures; i++) {
|
||||
+ g_string_append_printf (str,
|
||||
+ "layout(location = %d) out vec4 fragColor_%d;\n", i, i);
|
||||
+ }
|
||||
+ } else {
|
||||
+ g_string_append (str, "layout (location = 0) out vec4 fragColor;\n");
|
||||
+ }
|
||||
+ } else if (profile == GST_GLSL_PROFILE_CORE
|
||||
+ && version >= GST_GLSL_VERSION_150) {
|
||||
+ /* no layout specifiers, use glBindFragDataLocation instead */
|
||||
+ if (info->out_n_textures > 1) {
|
||||
+ gint i;
|
||||
+
|
||||
+ for (i = 0; i < info->out_n_textures; i++) {
|
||||
+ gchar *var_name = g_strdup_printf ("fragColor_%d", i);
|
||||
+ g_string_append_printf (str, "out vec4 %s;\n", var_name);
|
||||
+ gst_gl_shader_bind_frag_data_location (ret, i, var_name);
|
||||
+ g_free (var_name);
|
||||
+ }
|
||||
+ } else {
|
||||
+ g_string_append (str, "out vec4 fragColor;\n");
|
||||
+ gst_gl_shader_bind_frag_data_location (ret, 0, "fragColor");
|
||||
+ }
|
||||
}
|
||||
|
||||
for (i = 0; i < MAX_FUNCTIONS; i++) {
|
||||
@@ -1959,7 +2020,19 @@ _create_shader (GstGLColorConvert * convert)
|
||||
g_string_append_c (str, '\n');
|
||||
}
|
||||
|
||||
- g_string_append (str, "\nvarying vec2 v_texcoord;\nvoid main (void) {\n");
|
||||
+ {
|
||||
+ const gchar *varying = NULL;
|
||||
+
|
||||
+ if ((profile == GST_GLSL_PROFILE_ES && version >= GST_GLSL_VERSION_300)
|
||||
+ || (profile == GST_GLSL_PROFILE_CORE
|
||||
+ && version >= GST_GLSL_VERSION_150)) {
|
||||
+ varying = "in";
|
||||
+ } else {
|
||||
+ varying = "varying";
|
||||
+ }
|
||||
+ g_string_append_printf (str, "\n%s vec2 v_texcoord;\nvoid main (void) {\n",
|
||||
+ varying);
|
||||
+ }
|
||||
if (info->frag_body) {
|
||||
g_string_append (str, "vec2 texcoord;\n");
|
||||
if (convert->priv->from_texture_target == GST_GL_TEXTURE_TARGET_RECTANGLE
|
||||
@@ -1975,7 +2048,7 @@ _create_shader (GstGLColorConvert * convert)
|
||||
tmp = g_string_free (str, FALSE);
|
||||
info->frag_prog = _mangle_shader (tmp, GL_FRAGMENT_SHADER,
|
||||
info->templ->target, convert->priv->from_texture_target, gl_api,
|
||||
- &version, &profile);
|
||||
+ gl_major, gl_minor, &version, &profile);
|
||||
g_free (tmp);
|
||||
|
||||
strings[1] = info->frag_prog;
|
||||
--
|
||||
1.9.1
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
From b069672ace2b762f400ca6d318571cbedf5141f2 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Waters <matthew@centricular.com>
|
||||
Date: Thu, 31 Mar 2016 20:00:37 +1100
|
||||
Subject: [PATCH 1/3] glcolorconvert: don't use the predefined variable name
|
||||
sample
|
||||
|
||||
Using 'sample' as a variable name is an error in GLES3
|
||||
|
||||
Upstream-Status: Backport [1.9.1]
|
||||
---
|
||||
gst-libs/gst/gl/gstglcolorconvert.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/gst-libs/gst/gl/gstglcolorconvert.c b/gst-libs/gst/gl/gstglcolorconvert.c
|
||||
index f478faa..c23624f 100644
|
||||
--- a/gst-libs/gst/gl/gstglcolorconvert.c
|
||||
+++ b/gst-libs/gst/gl/gstglcolorconvert.c
|
||||
@@ -261,9 +261,9 @@ static const struct shader_templ templ_RGB_to_PLANAR_YUV =
|
||||
" for (int j = 0; j < int(chroma_sampling.y); j++) {\n"
|
||||
" int n = (i+1)*(j+1);\n"
|
||||
" delta.y = float(j);\n"
|
||||
- " vec4 sample = texture2D(tex, (chroma_pos + delta) / unnormalization).%c%c%c%c;\n"
|
||||
+ " vec4 s = texture2D(tex, (chroma_pos + delta) / unnormalization).%c%c%c%c;\n"
|
||||
/* rolling average */
|
||||
- " uv_texel = (float(n-1) * uv_texel + sample) / float(n);\n"
|
||||
+ " uv_texel = (float(n-1) * uv_texel + s) / float(n);\n"
|
||||
" }\n"
|
||||
" }\n"
|
||||
"}\n"
|
||||
--
|
||||
1.9.1
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
From 38221080181229d520522a20bcb1663ca19f7aff Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Waters <matthew@centricular.com>
|
||||
Date: Thu, 31 Mar 2016 19:25:32 +1100
|
||||
Subject: [PATCH 2/3] glshader: add glBindFragDataLocation
|
||||
|
||||
There are some cases where it's needed for binding in/out variables in shaders.
|
||||
e.g. glsl 150 (gl 3.2) doesn't support the 'layout (location = ?)' specifiers in
|
||||
the shader source so we have to bind them ourselves.
|
||||
|
||||
Upstream-Status: Backport [1.9.1]
|
||||
---
|
||||
gst-libs/gst/gl/glprototypes/shaders.h | 10 ++++++++++
|
||||
gst-libs/gst/gl/gstglshader.c | 20 ++++++++++++++++++++
|
||||
gst-libs/gst/gl/gstglshader.h | 1 +
|
||||
3 files changed, 31 insertions(+)
|
||||
|
||||
diff --git a/gst-libs/gst/gl/glprototypes/shaders.h b/gst-libs/gst/gl/glprototypes/shaders.h
|
||||
index 817e479..6d828db 100644
|
||||
--- a/gst-libs/gst/gl/glprototypes/shaders.h
|
||||
+++ b/gst-libs/gst/gl/glprototypes/shaders.h
|
||||
@@ -362,3 +362,13 @@ GST_GL_EXT_FUNCTION (void, UniformMatrix3x4fv,
|
||||
GST_GL_EXT_FUNCTION (void, UniformMatrix4x3fv,
|
||||
(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value))
|
||||
GST_GL_EXT_END ()
|
||||
+
|
||||
+GST_GL_EXT_BEGIN (bind_frag_data,
|
||||
+ GST_GL_API_OPENGL | GST_GL_API_OPENGL3,
|
||||
+ 3, 0,
|
||||
+ 255, 255,
|
||||
+ "\0",
|
||||
+ "\0")
|
||||
+GST_GL_EXT_FUNCTION (void, BindFragDataLocation,
|
||||
+ (GLuint program, GLuint index, const GLchar * name))
|
||||
+GST_GL_EXT_END ()
|
||||
diff --git a/gst-libs/gst/gl/gstglshader.c b/gst-libs/gst/gl/gstglshader.c
|
||||
index 9d96784..9f09236 100644
|
||||
--- a/gst-libs/gst/gl/gstglshader.c
|
||||
+++ b/gst-libs/gst/gl/gstglshader.c
|
||||
@@ -1306,3 +1306,23 @@ gst_gl_shader_bind_attribute_location (GstGLShader * shader, GLuint index,
|
||||
|
||||
gl->BindAttribLocation (priv->program_handle, index, name);
|
||||
}
|
||||
+
|
||||
+void
|
||||
+gst_gl_shader_bind_frag_data_location (GstGLShader * shader,
|
||||
+ guint index, const gchar * name)
|
||||
+{
|
||||
+ GstGLShaderPrivate *priv;
|
||||
+ GstGLFuncs *gl;
|
||||
+
|
||||
+ g_return_if_fail (shader != NULL);
|
||||
+ if (!_ensure_program (shader))
|
||||
+ g_return_if_fail (shader->priv->program_handle);
|
||||
+ priv = shader->priv;
|
||||
+ gl = shader->context->gl_vtable;
|
||||
+ g_return_if_fail (gl->BindFragDataLocation);
|
||||
+
|
||||
+ GST_TRACE_OBJECT (shader, "binding program %i frag data \'%s\' location %i",
|
||||
+ (int) priv->program_handle, name, index);
|
||||
+
|
||||
+ gl->BindFragDataLocation (priv->program_handle, index, name);
|
||||
+}
|
||||
diff --git a/gst-libs/gst/gl/gstglshader.h b/gst-libs/gst/gl/gstglshader.h
|
||||
index 21410e2..2200b89 100644
|
||||
--- a/gst-libs/gst/gl/gstglshader.h
|
||||
+++ b/gst-libs/gst/gl/gstglshader.h
|
||||
@@ -104,6 +104,7 @@ void gst_gl_shader_set_uniform_matrix_4x3fv (GstGLShader *shader, const gchar *n
|
||||
|
||||
gint gst_gl_shader_get_attribute_location (GstGLShader *shader, const gchar *name);
|
||||
void gst_gl_shader_bind_attribute_location (GstGLShader * shader, guint index, const gchar * name);
|
||||
+void gst_gl_shader_bind_frag_data_location (GstGLShader * shader, guint index, const gchar * name);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
--
|
||||
1.9.1
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
From 764fd69f8482eca9f925cefe72ebae090ae59d43 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
|
||||
Date: Tue, 19 Apr 2016 19:27:33 +0300
|
||||
Subject: [PATCH 3/3] glcolorconvert: GLES3 deprecates texture2D() and it does
|
||||
not work at all in newer versions than 3.3
|
||||
|
||||
Use the newer texture() function instead. This fixes glimagesink and other
|
||||
things on various Android devices.
|
||||
|
||||
Upstream-Status: Backport [1.9.1]
|
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=765266
|
||||
---
|
||||
gst-libs/gst/gl/gstglcolorconvert.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/gst-libs/gst/gl/gstglcolorconvert.c b/gst-libs/gst/gl/gstglcolorconvert.c
|
||||
index c23624f..f472d5d 100644
|
||||
--- a/gst-libs/gst/gl/gstglcolorconvert.c
|
||||
+++ b/gst-libs/gst/gl/gstglcolorconvert.c
|
||||
@@ -1716,7 +1716,7 @@ _unbind_buffer (GstGLColorConvert * convert)
|
||||
|
||||
static gchar *
|
||||
_mangle_texture_access (const gchar * str, GstGLTextureTarget from,
|
||||
- GstGLTextureTarget to, GstGLAPI gl_api)
|
||||
+ GstGLTextureTarget to, GstGLAPI gl_api, guint gl_major, guint gl_minor)
|
||||
{
|
||||
const gchar *from_str = NULL, *to_str = NULL;
|
||||
gchar *ret, *tmp;
|
||||
@@ -1730,7 +1730,8 @@ _mangle_texture_access (const gchar * str, GstGLTextureTarget from,
|
||||
if (from == GST_GL_TEXTURE_TARGET_EXTERNAL_OES)
|
||||
from_str = "texture2D";
|
||||
|
||||
- if (gl_api & GST_GL_API_OPENGL3) {
|
||||
+ if ((gl_api & GST_GL_API_OPENGL3) || (gl_api & GST_GL_API_GLES2
|
||||
+ && gl_major >= 3)) {
|
||||
to_str = "texture";
|
||||
} else {
|
||||
if (to == GST_GL_TEXTURE_TARGET_2D)
|
||||
@@ -1898,7 +1899,7 @@ _mangle_shader (const gchar * str, guint shader_type, GstGLTextureTarget from,
|
||||
|
||||
_mangle_version_profile_from_gl_api (gl_api, gl_major, gl_minor, version,
|
||||
profile);
|
||||
- tmp = _mangle_texture_access (str, from, to, gl_api);
|
||||
+ tmp = _mangle_texture_access (str, from, to, gl_api, gl_major, gl_minor);
|
||||
tmp2 = _mangle_sampler_type (tmp, from, to);
|
||||
g_free (tmp);
|
||||
tmp =
|
||||
--
|
||||
1.9.1
|
||||
|
|
@ -1,495 +0,0 @@
|
|||
From 806bbe75b0b6947f589bce3960c28fee51b5c6c2 Mon Sep 17 00:00:00 2001
|
||||
From: Gwang Yoon Hwang <yoon@igalia.com>
|
||||
Date: Thu, 21 Jan 2016 22:18:17 +0900
|
||||
Subject: [PATCH] gl: implement GstGLMemoryEGL
|
||||
|
||||
Because current GstEGLImageMemory does not inherit GstGLMemory, GLUpload
|
||||
allocates additional GLMemory and upload the decoded contents from the decoder
|
||||
which uses EGLImage (e.g. gst-omx in RPi).
|
||||
|
||||
This work adds GstGLMemoryEGL to avoid this overhead. Decoders allocate
|
||||
GstGLMemoryEGL and decode its contents to the EGLImage of GstGLMemoryEGL. And
|
||||
GLUpload uses this memory without allocation of additional textures and blit
|
||||
operations.
|
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=760916
|
||||
---
|
||||
Upstream-Status: Backport
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
|
||||
gst-libs/gst/gl/egl/Makefile.am | 2 +
|
||||
gst-libs/gst/gl/egl/gstgldisplay_egl.c | 2 +
|
||||
gst-libs/gst/gl/egl/gstglmemoryegl.c | 241 +++++++++++++++++++++++++++++++++
|
||||
gst-libs/gst/gl/egl/gstglmemoryegl.h | 108 +++++++++++++++
|
||||
gst-libs/gst/gl/gstgl_fwd.h | 4 +
|
||||
gst-libs/gst/gl/gstgldisplay.c | 2 +
|
||||
gst-libs/gst/gl/gstglupload.c | 8 ++
|
||||
7 files changed, 367 insertions(+)
|
||||
create mode 100644 gst-libs/gst/gl/egl/gstglmemoryegl.c
|
||||
create mode 100644 gst-libs/gst/gl/egl/gstglmemoryegl.h
|
||||
|
||||
diff --git a/gst-libs/gst/gl/egl/Makefile.am b/gst-libs/gst/gl/egl/Makefile.am
|
||||
index b808178..878f16c 100644
|
||||
--- a/gst-libs/gst/gl/egl/Makefile.am
|
||||
+++ b/gst-libs/gst/gl/egl/Makefile.am
|
||||
@@ -5,6 +5,7 @@ noinst_LTLIBRARIES = libgstgl-egl.la
|
||||
libgstgl_egl_la_SOURCES = \
|
||||
gstgldisplay_egl.c \
|
||||
gstglcontext_egl.c \
|
||||
+ gstglmemoryegl.c \
|
||||
gsteglimagememory.c
|
||||
|
||||
noinst_HEADERS =
|
||||
@@ -13,6 +14,7 @@ libgstgl_eglincludedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/gl/egl
|
||||
libgstgl_eglinclude_HEADERS = \
|
||||
gstgldisplay_egl.h \
|
||||
gstglcontext_egl.h \
|
||||
+ gstglmemoryegl.h \
|
||||
gsteglimagememory.h \
|
||||
gstegl.h
|
||||
|
||||
diff --git a/gst-libs/gst/gl/egl/gstgldisplay_egl.c b/gst-libs/gst/gl/egl/gstgldisplay_egl.c
|
||||
index 9acf4f0..20816c2 100644
|
||||
--- a/gst-libs/gst/gl/egl/gstgldisplay_egl.c
|
||||
+++ b/gst-libs/gst/gl/egl/gstgldisplay_egl.c
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
#include <gst/gl/egl/gstgldisplay_egl.h>
|
||||
#include <gst/gl/egl/gsteglimagememory.h>
|
||||
+#include <gst/gl/egl/gstglmemoryegl.h>
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (gst_gl_display_debug);
|
||||
#define GST_CAT_DEFAULT gst_gl_display_debug
|
||||
@@ -51,6 +52,7 @@ gst_gl_display_egl_init (GstGLDisplayEGL * display_egl)
|
||||
display_egl->foreign_display = FALSE;
|
||||
|
||||
gst_egl_image_memory_init ();
|
||||
+ gst_gl_memory_egl_init_once ();
|
||||
}
|
||||
|
||||
static void
|
||||
diff --git a/gst-libs/gst/gl/egl/gstglmemoryegl.c b/gst-libs/gst/gl/egl/gstglmemoryegl.c
|
||||
new file mode 100644
|
||||
index 0000000..03cf432
|
||||
--- /dev/null
|
||||
+++ b/gst-libs/gst/gl/egl/gstglmemoryegl.c
|
||||
@@ -0,0 +1,241 @@
|
||||
+/*
|
||||
+ * GStreamer
|
||||
+ * Copyright (C) 2012 Collabora Ltd.
|
||||
+ * @author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
|
||||
+ * Copyright (C) 2014 Julien Isorce <julien.isorce@gmail.com>
|
||||
+ * Copyright (C) 2015 Igalia
|
||||
+ * Author: Gwang Yoon Hwang <yoon@igalia.com>
|
||||
+ *
|
||||
+ * This library is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU Library General Public
|
||||
+ * License as published by the Free Software Foundation; either
|
||||
+ * version 2 of the License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This library is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ * Library General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU Library General Public
|
||||
+ * License along with this library; if not, write to the
|
||||
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
+ * Boston, MA 02110-1301, USA.
|
||||
+ */
|
||||
+
|
||||
+#ifdef HAVE_CONFIG_H
|
||||
+#include "config.h"
|
||||
+#endif
|
||||
+
|
||||
+#include <string.h>
|
||||
+
|
||||
+#include <gst/gl/egl/gstglmemoryegl.h>
|
||||
+
|
||||
+static GstAllocator *_gl_memory_egl_allocator;
|
||||
+
|
||||
+GST_DEBUG_CATEGORY_STATIC (GST_CAT_GL_MEMORY);
|
||||
+#define GST_CAT_DEFAULT GST_CAT_GL_MEMORY
|
||||
+
|
||||
+#define parent_class gst_gl_memory_egl_allocator_parent_class
|
||||
+G_DEFINE_TYPE (GstGLMemoryEGLAllocator, gst_gl_memory_egl_allocator,
|
||||
+ GST_TYPE_GL_MEMORY_ALLOCATOR);
|
||||
+
|
||||
+gboolean
|
||||
+gst_is_gl_memory_egl (GstMemory * mem)
|
||||
+{
|
||||
+ return mem != NULL && mem->allocator != NULL
|
||||
+ && g_type_is_a (G_OBJECT_TYPE (mem->allocator),
|
||||
+ GST_TYPE_GL_MEMORY_EGL_ALLOCATOR);
|
||||
+}
|
||||
+
|
||||
+static GstGLMemoryEGL *
|
||||
+_gl_mem_get_parent (GstGLMemoryEGL * gl_mem)
|
||||
+{
|
||||
+ GstGLMemoryEGL *parent = (GstGLMemoryEGL *)gl_mem->mem.mem.mem.parent;
|
||||
+ return parent ? parent : gl_mem;
|
||||
+}
|
||||
+
|
||||
+EGLImageKHR
|
||||
+gst_gl_memory_egl_get_image (GstGLMemoryEGL * mem)
|
||||
+{
|
||||
+ g_return_val_if_fail (gst_is_gl_memory_egl (GST_MEMORY_CAST (mem)),
|
||||
+ EGL_NO_IMAGE_KHR);
|
||||
+ return _gl_mem_get_parent(mem)->image;
|
||||
+}
|
||||
+
|
||||
+EGLDisplay
|
||||
+gst_gl_memory_egl_get_display (GstGLMemoryEGL * mem)
|
||||
+{
|
||||
+ g_return_val_if_fail (gst_is_gl_memory_egl (GST_MEMORY_CAST (mem)), NULL);
|
||||
+ return GST_GL_CONTEXT_EGL(_gl_mem_get_parent(mem))->egl_display;
|
||||
+}
|
||||
+
|
||||
+GstVideoGLTextureOrientation
|
||||
+gst_gl_memory_egl_get_orientation (GstGLMemoryEGL * mem)
|
||||
+{
|
||||
+ g_return_val_if_fail (gst_is_gl_memory_egl (GST_MEMORY_CAST (mem)),
|
||||
+ GST_VIDEO_GL_TEXTURE_ORIENTATION_X_NORMAL_Y_NORMAL);
|
||||
+
|
||||
+ return _gl_mem_get_parent(mem)->orientation;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+gst_gl_memory_egl_set_orientation (GstGLMemoryEGL * mem,
|
||||
+ GstVideoGLTextureOrientation orientation)
|
||||
+{
|
||||
+ g_return_if_fail (gst_is_gl_memory_egl (GST_MEMORY_CAST (mem)));
|
||||
+
|
||||
+ _gl_mem_get_parent(mem)->orientation = orientation;
|
||||
+}
|
||||
+
|
||||
+static GstMemory *
|
||||
+_gl_mem_alloc (GstAllocator * allocator, gsize size,
|
||||
+ GstAllocationParams * params)
|
||||
+{
|
||||
+ g_warning ("Use gst_gl_base_memory_allocator_alloc() to allocate from this "
|
||||
+ "GstGLMemoryEGL allocator");
|
||||
+
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+_gl_mem_destroy (GstGLMemoryEGL * mem)
|
||||
+{
|
||||
+ /* Shared memory should not destroy all the data */
|
||||
+ if (!mem->mem.mem.mem.parent) {
|
||||
+ GstGLContextEGL *context = GST_GL_CONTEXT_EGL(mem->mem.mem.context);
|
||||
+ context->eglDestroyImage (context->egl_display, mem->image);
|
||||
+ }
|
||||
+
|
||||
+ GST_GL_BASE_MEMORY_ALLOCATOR_CLASS (parent_class)->destroy ((GstGLBaseMemory
|
||||
+ *) mem);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+_gl_mem_init (GstGLMemoryEGL * mem, GstAllocator * allocator,
|
||||
+ GstMemory * parent, GstGLContext * context, GstGLTextureTarget target,
|
||||
+ GstAllocationParams * params, GstVideoInfo * info,
|
||||
+ guint plane, GstVideoAlignment * valign, gpointer user_data,
|
||||
+ GDestroyNotify notify)
|
||||
+{
|
||||
+ gst_gl_memory_init ((GstGLMemory *) mem, allocator, parent,
|
||||
+ context, target, params, info, plane, valign, user_data, notify);
|
||||
+}
|
||||
+
|
||||
+static GstGLMemoryEGL *
|
||||
+_gl_mem_egl_alloc (GstGLBaseMemoryAllocator * allocator,
|
||||
+ GstGLVideoAllocationParams * params)
|
||||
+{
|
||||
+ guint alloc_flags = params->parent.alloc_flags;
|
||||
+ GstGLMemoryEGL *mem;
|
||||
+
|
||||
+ g_return_val_if_fail (alloc_flags & GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_VIDEO,
|
||||
+ NULL);
|
||||
+ g_return_val_if_fail ((alloc_flags &
|
||||
+ GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_GPU_HANDLE) == 0, NULL);
|
||||
+ g_return_val_if_fail ((alloc_flags &
|
||||
+ GST_GL_ALLOCATION_PARAMS_ALLOC_FLAG_WRAP_SYSMEM) == 0, NULL);
|
||||
+
|
||||
+ mem = g_new0 (GstGLMemoryEGL, 1);
|
||||
+ mem->image = EGL_NO_IMAGE_KHR;
|
||||
+
|
||||
+ _gl_mem_init (mem, GST_ALLOCATOR_CAST (allocator), NULL,
|
||||
+ params->parent.context, params->target, params->parent.alloc_params,
|
||||
+ params->v_info, params->plane, params->valign, params->parent.user_data,
|
||||
+ params->parent.notify);
|
||||
+
|
||||
+ return mem;
|
||||
+}
|
||||
+
|
||||
+static gboolean
|
||||
+_gl_mem_create (GstGLMemoryEGL * gl_mem, GError ** error)
|
||||
+{
|
||||
+ GstGLContextEGL *context = GST_GL_CONTEXT_EGL (gl_mem->mem.mem.context);
|
||||
+ GstGLBaseMemoryAllocatorClass *alloc_class;
|
||||
+
|
||||
+ if (!gst_gl_context_check_feature (GST_GL_CONTEXT (context),
|
||||
+ "EGL_KHR_image_base")) {
|
||||
+ g_set_error (error, GST_GL_CONTEXT_ERROR, GST_GL_CONTEXT_ERROR_WRONG_API,
|
||||
+ "EGL_KHR_image_base is not supported");
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ alloc_class = GST_GL_BASE_MEMORY_ALLOCATOR_CLASS (parent_class);
|
||||
+ if (!alloc_class->create ((GstGLBaseMemory *) gl_mem, error))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ gl_mem->image = context->eglCreateImage (context->egl_display,
|
||||
+ context->egl_context, EGL_GL_TEXTURE_2D_KHR,
|
||||
+ (EGLClientBuffer) GSIZE_TO_POINTER (gl_mem->mem.tex_id), NULL);
|
||||
+
|
||||
+ GST_TRACE ("Generating EGLImage handle:%p from a texture:%u",
|
||||
+ gl_mem->image, gl_mem->mem.tex_id);
|
||||
+
|
||||
+ if (eglGetError () != EGL_SUCCESS) {
|
||||
+ g_set_error (error, GST_GL_CONTEXT_ERROR, GST_GL_CONTEXT_ERROR_FAILED,
|
||||
+ "Failed to create EGLImage");
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+static GstMemory *
|
||||
+_gl_mem_copy (GstGLMemoryEGL * src, gssize offset, gssize size)
|
||||
+{
|
||||
+ GST_CAT_ERROR (GST_CAT_GL_MEMORY, "GstGLMemoryEGL does not support copy");
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+gst_gl_memory_egl_allocator_class_init (GstGLMemoryEGLAllocatorClass * klass)
|
||||
+{
|
||||
+ GstGLBaseMemoryAllocatorClass *gl_base;
|
||||
+ GstGLMemoryAllocatorClass *gl_tex;
|
||||
+ GstAllocatorClass *allocator_class;
|
||||
+
|
||||
+ gl_tex = (GstGLMemoryAllocatorClass *) klass;
|
||||
+ gl_base = (GstGLBaseMemoryAllocatorClass *) klass;
|
||||
+ allocator_class = (GstAllocatorClass *) klass;
|
||||
+
|
||||
+ gl_base->alloc = (GstGLBaseMemoryAllocatorAllocFunction) _gl_mem_egl_alloc;
|
||||
+ gl_base->create = (GstGLBaseMemoryAllocatorCreateFunction) _gl_mem_create;
|
||||
+ gl_base->destroy = (GstGLBaseMemoryAllocatorDestroyFunction) _gl_mem_destroy;
|
||||
+ gl_tex->copy = (GstGLBaseMemoryAllocatorCopyFunction) _gl_mem_copy;
|
||||
+
|
||||
+ allocator_class->alloc = _gl_mem_alloc;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+gst_gl_memory_egl_allocator_init (GstGLMemoryEGLAllocator * allocator)
|
||||
+{
|
||||
+ GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
|
||||
+
|
||||
+ alloc->mem_type = GST_GL_MEMORY_EGL_ALLOCATOR_NAME;
|
||||
+
|
||||
+ GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * gst_gl_memory_egl_init_once:
|
||||
+ *
|
||||
+ * Initializes the GL Memory allocator. It is safe to call this function
|
||||
+ * multiple times. This must be called before any other GstGLMemoryEGL operation.
|
||||
+ */
|
||||
+void
|
||||
+gst_gl_memory_egl_init_once (void)
|
||||
+{
|
||||
+ static volatile gsize _init = 0;
|
||||
+
|
||||
+ if (g_once_init_enter (&_init)) {
|
||||
+ gst_gl_memory_init_once ();
|
||||
+
|
||||
+ GST_DEBUG_CATEGORY_INIT (GST_CAT_GL_MEMORY, "glmemory", 0,
|
||||
+ "OpenGL Texture with EGLImage memory");
|
||||
+
|
||||
+ _gl_memory_egl_allocator = g_object_new (GST_TYPE_GL_MEMORY_EGL_ALLOCATOR, NULL);
|
||||
+
|
||||
+ gst_allocator_register (GST_GL_MEMORY_EGL_ALLOCATOR_NAME,
|
||||
+ gst_object_ref (_gl_memory_egl_allocator));
|
||||
+ g_once_init_leave (&_init, 1);
|
||||
+ }
|
||||
+}
|
||||
diff --git a/gst-libs/gst/gl/egl/gstglmemoryegl.h b/gst-libs/gst/gl/egl/gstglmemoryegl.h
|
||||
new file mode 100644
|
||||
index 0000000..7256d33
|
||||
--- /dev/null
|
||||
+++ b/gst-libs/gst/gl/egl/gstglmemoryegl.h
|
||||
@@ -0,0 +1,108 @@
|
||||
+/*
|
||||
+ * GStreamer
|
||||
+ * Copyright (C) 2012 Collabora Ltd.
|
||||
+ * @author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
|
||||
+ * Copyright (C) 2014 Julien Isorce <julien.isorce@gmail.com>
|
||||
+ *
|
||||
+ * This library is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU Library General Public
|
||||
+ * License as published by the Free Software Foundation; either
|
||||
+ * version 2 of the License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This library is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ * Library General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU Library General Public
|
||||
+ * License along with this library; if not, write to the
|
||||
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
+ * Boston, MA 02110-1301, USA.
|
||||
+ */
|
||||
+
|
||||
+#ifndef _GST_GL_MEMORY_EGL_H_
|
||||
+#define _GST_GL_MEMORY_EGL_H_
|
||||
+
|
||||
+#include <gst/gst.h>
|
||||
+#include <gst/gstallocator.h>
|
||||
+#include <gst/gstmemory.h>
|
||||
+#include <gst/video/video.h>
|
||||
+
|
||||
+#include <gst/gl/gl.h>
|
||||
+#include "gstglcontext_egl.h"
|
||||
+
|
||||
+#include <gst/gl/gstglmemory.h>
|
||||
+
|
||||
+G_BEGIN_DECLS
|
||||
+
|
||||
+#define GST_TYPE_GL_MEMORY_EGL_ALLOCATOR (gst_gl_memory_egl_allocator_get_type())
|
||||
+GType gst_gl_memory_egl_allocator_get_type(void);
|
||||
+
|
||||
+#define GST_IS_GL_MEMORY_EGL_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_MEMORY_EGL_ALLOCATOR))
|
||||
+#define GST_IS_GL_MEMORY_EGL_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_GL_MEMORY_EGL_ALLOCATOR))
|
||||
+#define GST_GL_MEMORY_EGL_ALLOCATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GL_MEMORY_EGL_ALLOCATOR, GstGLMemoryEGLAllocatorClass))
|
||||
+#define GST_GL_MEMORY_EGL_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_MEMORY_EGL_ALLOCATOR, GstGLMemoryEGLAllocator))
|
||||
+#define GST_GL_MEMORY_EGL_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_GL_MEMORY_EGL_ALLOCATOR, GstGLAllocatorClass))
|
||||
+#define GST_GL_MEMORY_EGL_ALLOCATOR_CAST(obj) ((GstGLMemoryEGLAllocator *)(obj))
|
||||
+
|
||||
+typedef void (*GstEGLImageDestroyNotify) (GstGLContextEGL * context,
|
||||
+ gpointer data);
|
||||
+
|
||||
+typedef struct _GstEGLImageMemory GstEGLImageMemory;
|
||||
+
|
||||
+
|
||||
+/**
|
||||
+ * GstGLMemoryEGL:
|
||||
+ *
|
||||
+ * Private instance
|
||||
+ */
|
||||
+struct _GstGLMemoryEGL
|
||||
+{
|
||||
+ GstGLMemory mem;
|
||||
+
|
||||
+ EGLImageKHR image;
|
||||
+ GstVideoGLTextureOrientation orientation;
|
||||
+};
|
||||
+
|
||||
+/**
|
||||
+ * GST_GL_MEMORY_EGL_ALLOCATOR:
|
||||
+ *
|
||||
+ * The name of the GL Memory EGL allocator
|
||||
+ */
|
||||
+#define GST_GL_MEMORY_EGL_ALLOCATOR_NAME "GLMemoryEGL"
|
||||
+
|
||||
+void gst_gl_memory_egl_init_once (void);
|
||||
+gboolean gst_is_gl_memory_egl (GstMemory * mem);
|
||||
+
|
||||
+EGLImageKHR gst_gl_memory_egl_get_image (GstGLMemoryEGL * mem);
|
||||
+EGLDisplay gst_gl_memory_egl_get_display (GstGLMemoryEGL * mem);
|
||||
+
|
||||
+GstVideoGLTextureOrientation gst_gl_memory_egl_get_orientation
|
||||
+ (GstGLMemoryEGL * mem);
|
||||
+
|
||||
+void gst_gl_memory_egl_set_orientation (GstGLMemoryEGL * mem,
|
||||
+ GstVideoGLTextureOrientation orientation);
|
||||
+
|
||||
+/**
|
||||
+ * GstGLAllocator
|
||||
+ *
|
||||
+ * Opaque #GstGLAllocator struct
|
||||
+ */
|
||||
+struct _GstGLMemoryEGLAllocator
|
||||
+{
|
||||
+ GstGLMemoryAllocator parent;
|
||||
+};
|
||||
+
|
||||
+/**
|
||||
+ * GstGLAllocatorClass:
|
||||
+ *
|
||||
+ * The #GstGLAllocatorClass only contains private data
|
||||
+ */
|
||||
+struct _GstGLMemoryEGLAllocatorClass
|
||||
+{
|
||||
+ GstGLMemoryAllocatorClass parent_class;
|
||||
+};
|
||||
+
|
||||
+G_END_DECLS
|
||||
+
|
||||
+#endif /* _GST_GL_MEMORY_EGL_H_ */
|
||||
diff --git a/gst-libs/gst/gl/gstgl_fwd.h b/gst-libs/gst/gl/gstgl_fwd.h
|
||||
index fb64ff6..73e17bd 100644
|
||||
--- a/gst-libs/gst/gl/gstgl_fwd.h
|
||||
+++ b/gst-libs/gst/gl/gstgl_fwd.h
|
||||
@@ -55,6 +55,10 @@ typedef struct _GstGLMemoryPBO GstGLMemoryPBO;
|
||||
typedef struct _GstGLMemoryPBOAllocator GstGLMemoryPBOAllocator;
|
||||
typedef struct _GstGLMemoryPBOAllocatorClass GstGLMemoryPBOAllocatorClass;
|
||||
|
||||
+typedef struct _GstGLMemoryEGL GstGLMemoryEGL;
|
||||
+typedef struct _GstGLMemoryEGLAllocator GstGLMemoryEGLAllocator;
|
||||
+typedef struct _GstGLMemoryEGLAllocatorClass GstGLMemoryEGLAllocatorClass;
|
||||
+
|
||||
typedef struct _GstGLSLStage GstGLSLStage;
|
||||
typedef struct _GstGLSLStagePrivate GstGLSLStagePrivate;
|
||||
typedef struct _GstGLSLStageClass GstGLSLStageClass;
|
||||
diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c
|
||||
index 60dec6a..34770d0 100644
|
||||
--- a/gst-libs/gst/gl/gstgldisplay.c
|
||||
+++ b/gst-libs/gst/gl/gstgldisplay.c
|
||||
@@ -68,6 +68,7 @@
|
||||
#if GST_GL_HAVE_PLATFORM_EGL
|
||||
#include <gst/gl/egl/gstgldisplay_egl.h>
|
||||
#include <gst/gl/egl/gsteglimagememory.h>
|
||||
+#include <gst/gl/egl/gstglmemoryegl.h>
|
||||
#endif
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (gst_context);
|
||||
@@ -144,6 +145,7 @@ gst_gl_display_init (GstGLDisplay * display)
|
||||
|
||||
#if GST_GL_HAVE_PLATFORM_EGL
|
||||
gst_egl_image_memory_init ();
|
||||
+ gst_gl_memory_egl_init_once ();
|
||||
#endif
|
||||
}
|
||||
|
||||
diff --git a/gst-libs/gst/gl/gstglupload.c b/gst-libs/gst/gl/gstglupload.c
|
||||
index 16ed5ea..73a9029 100644
|
||||
--- a/gst-libs/gst/gl/gstglupload.c
|
||||
+++ b/gst-libs/gst/gl/gstglupload.c
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
#if GST_GL_HAVE_PLATFORM_EGL
|
||||
#include "egl/gsteglimagememory.h"
|
||||
+#include "egl/gstglmemoryegl.h"
|
||||
#endif
|
||||
|
||||
#if GST_GL_HAVE_DMABUF
|
||||
@@ -301,6 +302,13 @@ _gl_memory_upload_propose_allocation (gpointer impl, GstQuery * decide_query,
|
||||
context));
|
||||
gst_query_add_allocation_param (query, allocator, ¶ms);
|
||||
gst_object_unref (allocator);
|
||||
+
|
||||
+#if GST_GL_HAVE_PLATFORM_EGL
|
||||
+ allocator =
|
||||
+ GST_ALLOCATOR (gst_allocator_find (GST_GL_MEMORY_EGL_ALLOCATOR_NAME));
|
||||
+ gst_query_add_allocation_param (query, allocator, ¶ms);
|
||||
+ gst_object_unref (allocator);
|
||||
+#endif
|
||||
}
|
||||
|
||||
n_pools = gst_query_get_n_allocation_pools (query);
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -23,43 +23,43 @@ Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
|
|||
sys/decklink/gstdecklinkvideosink.cpp | 2 +-
|
||||
3 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/sys/decklink/gstdecklink.cpp b/sys/decklink/gstdecklink.cpp
|
||||
index 64637f1..bac956f 100644
|
||||
--- a/sys/decklink/gstdecklink.cpp
|
||||
+++ b/sys/decklink/gstdecklink.cpp
|
||||
@@ -324,22 +324,22 @@ gst_decklink_mode_get_structure (GstDecklinkModeEnum e, BMDPixelFormat f)
|
||||
"height", G_TYPE_INT, mode->height,
|
||||
Index: gst-plugins-bad-1.10.1/sys/decklink/gstdecklink.cpp
|
||||
===================================================================
|
||||
--- gst-plugins-bad-1.10.1.orig/sys/decklink/gstdecklink.cpp
|
||||
+++ gst-plugins-bad-1.10.1/sys/decklink/gstdecklink.cpp
|
||||
@@ -476,22 +476,22 @@ gst_decklink_mode_get_structure (GstDeck
|
||||
"pixel-aspect-ratio", GST_TYPE_FRACTION, mode->par_n, mode->par_d,
|
||||
"interlace-mode", G_TYPE_STRING, mode->interlaced ? "interleaved" : "progressive",
|
||||
"interlace-mode", G_TYPE_STRING,
|
||||
mode->interlaced ? "interleaved" : "progressive",
|
||||
- "framerate", GST_TYPE_FRACTION, mode->fps_n, mode->fps_d, NULL);
|
||||
+ "framerate", GST_TYPE_FRACTION, mode->fps_n, mode->fps_d, (void *) NULL);
|
||||
+ "framerate", GST_TYPE_FRACTION, mode->fps_n, mode->fps_d, (void *)NULL);
|
||||
|
||||
switch (f) {
|
||||
case bmdFormat8BitYUV: /* '2vuy' */
|
||||
case bmdFormat8BitYUV: /* '2vuy' */
|
||||
gst_structure_set (s, "format", G_TYPE_STRING, "UYVY",
|
||||
"colorimetry", G_TYPE_STRING, mode->colorimetry,
|
||||
- "chroma-site", G_TYPE_STRING, "mpeg2", NULL);
|
||||
+ "chroma-site", G_TYPE_STRING, "mpeg2", (void *) NULL);
|
||||
+ "chroma-site", G_TYPE_STRING, "mpeg2", (void *)NULL);
|
||||
break;
|
||||
case bmdFormat10BitYUV: /* 'v210' */
|
||||
case bmdFormat10BitYUV: /* 'v210' */
|
||||
- gst_structure_set (s, "format", G_TYPE_STRING, "v210", NULL);
|
||||
+ gst_structure_set (s, "format", G_TYPE_STRING, "v210", (void *) NULL);
|
||||
+ gst_structure_set (s, "format", G_TYPE_STRING, "v210", (void *)NULL);
|
||||
break;
|
||||
case bmdFormat8BitARGB: /* 'ARGB' */
|
||||
case bmdFormat8BitARGB: /* 'ARGB' */
|
||||
- gst_structure_set (s, "format", G_TYPE_STRING, "ARGB", NULL);
|
||||
+ gst_structure_set (s, "format", G_TYPE_STRING, "ARGB", (void *) NULL);
|
||||
+ gst_structure_set (s, "format", G_TYPE_STRING, "ARGB", (void *)NULL);
|
||||
break;
|
||||
case bmdFormat8BitBGRA: /* 'BGRA' */
|
||||
case bmdFormat8BitBGRA: /* 'BGRA' */
|
||||
- gst_structure_set (s, "format", G_TYPE_STRING, "BGRA", NULL);
|
||||
+ gst_structure_set (s, "format", G_TYPE_STRING, "BGRA", (void *) NULL);
|
||||
+ gst_structure_set (s, "format", G_TYPE_STRING, "BGRA", (void *)NULL);
|
||||
break;
|
||||
case bmdFormat10BitRGB: /* 'r210' Big-endian RGB 10-bit per component with SMPTE video levels (64-960). Packed as 2:10:10:10 */
|
||||
case bmdFormat12BitRGB: /* 'R12B' Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component */
|
||||
diff --git a/sys/decklink/gstdecklinkaudiosrc.cpp b/sys/decklink/gstdecklinkaudiosrc.cpp
|
||||
index 9a701ee..26fb7ec 100644
|
||||
--- a/sys/decklink/gstdecklinkaudiosrc.cpp
|
||||
+++ b/sys/decklink/gstdecklinkaudiosrc.cpp
|
||||
@@ -312,7 +312,7 @@ gst_decklink_audio_src_set_caps (GstBaseSrc * bsrc, GstCaps * caps)
|
||||
case bmdFormat10BitRGB: /* 'r210' Big-endian RGB 10-bit per component with SMPTE video levels (64-960). Packed as 2:10:10:10 */
|
||||
case bmdFormat12BitRGB: /* 'R12B' Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component */
|
||||
Index: gst-plugins-bad-1.10.1/sys/decklink/gstdecklinkaudiosrc.cpp
|
||||
===================================================================
|
||||
--- gst-plugins-bad-1.10.1.orig/sys/decklink/gstdecklinkaudiosrc.cpp
|
||||
+++ gst-plugins-bad-1.10.1/sys/decklink/gstdecklinkaudiosrc.cpp
|
||||
@@ -322,7 +322,7 @@ gst_decklink_audio_src_set_caps (GstBase
|
||||
g_mutex_unlock (&self->input->lock);
|
||||
|
||||
if (videosrc) {
|
||||
|
@ -68,11 +68,11 @@ index 9a701ee..26fb7ec 100644
|
|||
gst_object_unref (videosrc);
|
||||
|
||||
switch (vconn) {
|
||||
diff --git a/sys/decklink/gstdecklinkvideosink.cpp b/sys/decklink/gstdecklinkvideosink.cpp
|
||||
index eebeff3..da6e486 100644
|
||||
--- a/sys/decklink/gstdecklinkvideosink.cpp
|
||||
+++ b/sys/decklink/gstdecklinkvideosink.cpp
|
||||
@@ -158,7 +158,7 @@ reset_framerate (GstCapsFeatures * features, GstStructure * structure,
|
||||
Index: gst-plugins-bad-1.10.1/sys/decklink/gstdecklinkvideosink.cpp
|
||||
===================================================================
|
||||
--- gst-plugins-bad-1.10.1.orig/sys/decklink/gstdecklinkvideosink.cpp
|
||||
+++ gst-plugins-bad-1.10.1/sys/decklink/gstdecklinkvideosink.cpp
|
||||
@@ -163,7 +163,7 @@ reset_framerate (GstCapsFeatures * featu
|
||||
gpointer user_data)
|
||||
{
|
||||
gst_structure_set (structure, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1,
|
||||
|
@ -81,6 +81,3 @@ index eebeff3..da6e486 100644
|
|||
|
||||
return TRUE;
|
||||
}
|
||||
--
|
||||
1.9.1
|
||||
|
||||
|
|
|
@ -12,16 +12,10 @@ SRC_URI = " \
|
|||
file://avoid-including-sys-poll.h-directly.patch \
|
||||
file://ensure-valid-sentinels-for-gst_structure_get-etc.patch \
|
||||
file://0001-gstreamer-gl.pc.in-don-t-append-GL_CFLAGS-to-CFLAGS.patch \
|
||||
file://0002-glplugin-enable-gldeinterlace-on-OpenGL-ES.patch \
|
||||
file://0003-glcolorconvert-implement-multiple-render-targets-for.patch \
|
||||
file://0004-glcolorconvert-don-t-use-the-predefined-variable-nam.patch \
|
||||
file://0005-glshader-add-glBindFragDataLocation.patch \
|
||||
file://0006-glcolorconvert-GLES3-deprecates-texture2D-and-it-doe.patch \
|
||||
file://0008-gl-implement-GstGLMemoryEGL.patch \
|
||||
file://0009-glimagesink-Downrank-to-marginal.patch \
|
||||
file://0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch \
|
||||
"
|
||||
SRC_URI[md5sum] = "955281a43e98c5464563fa049e0a0911"
|
||||
SRC_URI[sha256sum] = "7899fcb18e6a1af2888b19c90213af018a57d741c6e72ec56b133bc73ec8509b"
|
||||
SRC_URI[md5sum] = "491d2d5aab55ffc60c66e714d3d664ea"
|
||||
SRC_URI[sha256sum] = "133e0ed9fe21011b15d3898e3d3a9d17ab74eed31996da2e353353e688ca921d"
|
||||
|
||||
S = "${WORKDIR}/gst-plugins-bad-${PV}"
|
|
@ -13,8 +13,7 @@ SRC_URI = " \
|
|||
file://make-gio_unix_2_0-dependency-configurable.patch \
|
||||
file://0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "4d03dd81828ea6b98a44c8f1ab7f4976"
|
||||
SRC_URI[sha256sum] = "114871d4d63606b4af424a8433cd923e4ff66896b244bb7ac97b9da47f71e79e"
|
||||
SRC_URI[md5sum] = "eb03953ff239b53a7d69a604edbe5c8c"
|
||||
SRC_URI[sha256sum] = "66cfee294c7aaf9d7867eaba4841ca6254ea74f1a8b53e1289f4d3b9b6c976c9"
|
||||
|
||||
S = "${WORKDIR}/gst-plugins-base-${PV}"
|
|
@ -11,8 +11,7 @@ SRC_URI = " \
|
|||
file://ensure-valid-sentinel-for-gst_structure_get.patch \
|
||||
file://0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "473ebb1f15c67de99ddb6e4d027c0876"
|
||||
SRC_URI[sha256sum] = "a1d6579ba203a7734927c24b90bf6590d846c5a5fcec01a48201018c8ad2827a"
|
||||
SRC_URI[md5sum] = "7d24b1412d49fa7bab763b35f4640abd"
|
||||
SRC_URI[sha256sum] = "a7642ea7e7c17fb67e94d0c17e56757b6577fa7ed244ff8c11031841d3556cc2"
|
||||
|
||||
S = "${WORKDIR}/gst-plugins-good-${PV}"
|
|
@ -7,8 +7,7 @@ SRC_URI = " \
|
|||
http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-${PV}.tar.xz \
|
||||
file://0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "4fc66c77253b0ad5ce224bda654b2e7d"
|
||||
SRC_URI[sha256sum] = "6fa2599fdd072d31fbaf50c34af406e2be944a010b1f4eab67a5fe32a0310693"
|
||||
SRC_URI[md5sum] = "646ab511bc8e56425e63d3fc4812e582"
|
||||
SRC_URI[sha256sum] = "a5ecd59fc2091eeb52368de81cc6a91c1a1c19dc5bdde85ce90e1eed5d4183c2"
|
||||
|
||||
S = "${WORKDIR}/gst-plugins-ugly-${PV}"
|
|
@ -0,0 +1,6 @@
|
|||
include gstreamer1.0-rtsp-server.inc
|
||||
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d"
|
||||
|
||||
SRC_URI[md5sum] = "ae93aa9e5d89a53636a8c0217d8d8c30"
|
||||
SRC_URI[sha256sum] = "ddc0c2699598623c2d19d3a2856fb73365496a949783537b238f44bc51e5b005"
|
|
@ -1,6 +0,0 @@
|
|||
include gstreamer1.0-rtsp-server.inc
|
||||
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d"
|
||||
|
||||
SRC_URI[md5sum] = "e4b07b10dd65b6c26c9ca5f72e59297b"
|
||||
SRC_URI[sha256sum] = "010f06800c1c957851d1352e5ec7a8ba3ce6a857fec1b8afc7d1a9e5f53288bf"
|
|
@ -24,7 +24,6 @@ PACKAGECONFIG[debug] = "--enable-debug,--disable-debug"
|
|||
PACKAGECONFIG[tests] = "--enable-tests,--disable-tests"
|
||||
PACKAGECONFIG[valgrind] = "--enable-valgrind,--disable-valgrind,valgrind,"
|
||||
PACKAGECONFIG[gst-tracer-hooks] = "--enable-gst-tracer-hooks,--disable-gst-tracer-hooks,"
|
||||
PACKAGECONFIG[trace-historic] = "--enable-trace,--disable-trace,"
|
||||
|
||||
EXTRA_OECONF = " \
|
||||
--disable-dependency-tracking \
|
||||
|
|
|
@ -6,8 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d \
|
|||
SRC_URI = " \
|
||||
http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.xz \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "e88dad542df9d986822e982105d2b530"
|
||||
SRC_URI[sha256sum] = "66b37762d4fdcd63bce5a2bec57e055f92420e95037361609900278c0db7c53f"
|
||||
SRC_URI[md5sum] = "2c0cc6907aed5ea8005a8f332e34d92f"
|
||||
SRC_URI[sha256sum] = "f68df996e0e699382b935bb4783dd402c301377df18f57e28e0318c4b3bff6da"
|
||||
|
||||
S = "${WORKDIR}/gstreamer-${PV}"
|
Loading…
Reference in New Issue