From b094497c8d4c1509b3ec3596f2a17a7e5d267168 Mon Sep 17 00:00:00 2001 From: Javier Viguera Date: Fri, 24 Feb 2017 13:50:13 +0100 Subject: [PATCH] morty migration: gstreamer1.0-plugins-bad: update package Also apply patches from meta-fsl-bsp-release (krogoth_4.1.15-2.0.1) https://jira.digi.com/browse/DEL-3459 Signed-off-by: Javier Viguera --- ...pport-croping-and-alignment-handling.patch | 171 ---- ...agesink-Add-fps-print-in-glimagesink.patch | 69 -- ...fb-Support-fb-backend-for-gl-plugins.patch | 779 ------------------ ...d-Make-it-always-fullscreen-1024x768.patch | 57 -- .../0006-h263parse_fix_CPFMT_parsing.patch | 88 -- ...lter-Fix-video-is-tearing-after-enab.patch | 66 -- ...sink-loop-playback-failed-in-wayland.patch | 561 ------------- ...-rename-gstopencv.c-to-gstopencv.cpp.patch | 351 -------- ...tor-memory-leak-increasing-a-lot-aft.patch | 323 -------- ...78-Support-more-format-in-direct-viv.patch | 56 -- ...se-viv-direct-texture-to-bind-buffer.patch | 266 ------ ...fragment-shaders-for-glshader-plugin.patch | 125 --- .../Fix-warnnig-log-in-glfilter.patch | 57 -- ...memory-leak-in-camerabin-examples-01.patch | 63 -- ...memory-leak-in-camerabin-examples-02.patch | 109 --- ...-query-ALLOCATION-need_pool-to-FALSE.patch | 33 - ...r-eglCreateContext-isn-t-thread-safe.patch | 42 - ...ux-Need-get-pid-when-create-streams.patch} | 14 +- ...eed-detect-picture-coding-type-when.patch} | 13 +- ...ed-detect-picture-coding-type-when-.patch} | 13 +- .../0004-modifiy-the-videoparse-rank.patch} | 28 +- ...st-frame-rate-info-when-fixate-caps.patch} | 14 +- ...-stitching-support-based-on-Open-CV.patch} | 73 +- ...-property-to-set-sink-element-for-v.patch} | 34 +- ...plugin-not-built-in-wayland-backend.patch} | 12 +- ...nd-fix-loop-test-hang-in-glimagesink.patch | 140 ++++ ...wayland-resize-showed-blurred-screen.patch | 30 + ...1-support-video-crop-for-glimagesink.patch | 149 ++++ .../0012-Add-fps-print-in-glimagesink.patch | 81 ++ ...ort-video-rotation-using-transform-m.patch | 570 +++++++++++++ ...4-ion-DMA-Buf-allocator-based-on-ion.patch | 481 +++++++++++ ...rong-attribute-list-type-for-EGL-1.5.patch | 191 +++++ ...ix-horizontal-vertical-flip-matrizes.patch | 41 + ...magesink-cannot-show-frame-when-conn.patch | 68 ++ ..._allocator-refine-ion-allocator-code.patch | 369 +++++++++ ...tor-Remove-output-format-alpha-check.patch | 32 + .../gstreamer1.0-plugins-bad_1.4.5.bbappend | 41 - .../gstreamer1.0-plugins-bad_1.8.3.bbappend | 32 + 38 files changed, 2280 insertions(+), 3362 deletions(-) delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0001-Support-croping-and-alignment-handling.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0003-glimagesink-Add-fps-print-in-glimagesink.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0004-gl-fb-Support-fb-backend-for-gl-plugins.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0005-gl-wayland-Make-it-always-fullscreen-1024x768.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0006-h263parse_fix_CPFMT_parsing.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0007-glfilter-Fix-video-is-tearing-after-enab.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0008-gl-Fix-glimagesink-loop-playback-failed-in-wayland.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0014-opencv-rename-gstopencv.c-to-gstopencv.cpp.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0016-PATCH-gstaggregator-memory-leak-increasing-a-lot-aft.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0017-MMFMWK-6778-Support-more-format-in-direct-viv.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/1.4.5-Use-viv-direct-texture-to-bind-buffer.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/Adding-some-fragment-shaders-for-glshader-plugin.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/Fix-warnnig-log-in-glfilter.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/camerabin-examples-memory-leak-in-camerabin-examples-01.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/camerabin-examples-memory-leak-in-camerabin-examples-02.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/dvbsuboverlay-Set-query-ALLOCATION-need_pool-to-FALSE.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/egl-workaround-for-eglCreateContext-isn-t-thread-safe.patch rename meta-digi-dey/recipes-multimedia/gstreamer/{gstreamer1.0-plugins-bad-1.4.5/0002-mpegtsmux-Need-get-pid-when-create-streams.patch => gstreamer1.0-plugins-bad-1.8.3/0001-mpegtsmux-Need-get-pid-when-create-streams.patch} (78%) rename meta-digi-dey/recipes-multimedia/gstreamer/{gstreamer1.0-plugins-bad-1.4.5/0009-mpeg4videoparse-Need-detect-picture-coding-type-when.patch => gstreamer1.0-plugins-bad-1.8.3/0002-mpeg4videoparse-Need-detect-picture-coding-type-when.patch} (84%) rename meta-digi-dey/recipes-multimedia/gstreamer/{gstreamer1.0-plugins-bad-1.4.5/0010-mpegvideoparse-Need-detect-picture-coding-type-when-.patch => gstreamer1.0-plugins-bad-1.8.3/0003-mpegvideoparse-Need-detect-picture-coding-type-when-.patch} (83%) rename meta-digi-dey/recipes-multimedia/gstreamer/{gstreamer1.0-plugins-bad-1.4.5/0011-videoparse-modifiy-the-videoparse-rank.patch => gstreamer1.0-plugins-bad-1.8.3/0004-modifiy-the-videoparse-rank.patch} (73%) rename meta-digi-dey/recipes-multimedia/gstreamer/{gstreamer1.0-plugins-bad-1.4.5/0012-glfilter-Lost-frame-rate-info-when-fixate-caps.patch => gstreamer1.0-plugins-bad-1.8.3/0005-glfilter-Lost-frame-rate-info-when-fixate-caps.patch} (81%) rename meta-digi-dey/recipes-multimedia/gstreamer/{gstreamer1.0-plugins-bad-1.4.5/0015-opencv-Add-video-stitching-support.patch => gstreamer1.0-plugins-bad-1.8.3/0006-opencv-Add-video-stitching-support-based-on-Open-CV.patch} (97%) rename meta-digi-dey/recipes-multimedia/gstreamer/{gstreamer1.0-plugins-bad-1.4.5/camerabin-Add-one-property-to-set-sink-element-for-video.patch => gstreamer1.0-plugins-bad-1.8.3/0007-camerabin-Add-one-property-to-set-sink-element-for-v.patch} (87%) rename meta-digi-dey/recipes-multimedia/gstreamer/{gstreamer1.0-plugins-bad-1.4.5/Fix-for-gl-plugin-not-built-in-wayland-backend.patch => gstreamer1.0-plugins-bad-1.8.3/0008-Fix-for-gl-plugin-not-built-in-wayland-backend.patch} (79%) create mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0009-gl-wayland-fix-loop-test-hang-in-glimagesink.patch create mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0010-Fix-glimagesink-wayland-resize-showed-blurred-screen.patch create mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0011-support-video-crop-for-glimagesink.patch create mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0012-Add-fps-print-in-glimagesink.patch create mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0013-glimagesink-support-video-rotation-using-transform-m.patch create mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0014-ion-DMA-Buf-allocator-based-on-ion.patch create mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0015-EGL_DMA_Buf-Wrong-attribute-list-type-for-EGL-1.5.patch create mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0016-glimagesink-Fix-horizontal-vertical-flip-matrizes.patch create mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0017-glwindow-Fix-glimagesink-cannot-show-frame-when-conn.patch create mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0018-ion_allocator-refine-ion-allocator-code.patch create mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0019-videocompositor-Remove-output-format-alpha-check.patch delete mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.4.5.bbappend create mode 100644 meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.8.3.bbappend diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0001-Support-croping-and-alignment-handling.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0001-Support-croping-and-alignment-handling.patch deleted file mode 100644 index 5c341f79c..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0001-Support-croping-and-alignment-handling.patch +++ /dev/null @@ -1,171 +0,0 @@ -From e5b2bade360bcf12ac389463019162a6ce64d9ef Mon Sep 17 00:00:00 2001 -From: Jian -Date: Thu, 26 Mar 2015 14:22:07 +0800 -Subject: [PATCH] Support croping and alignment handling -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - - Upstream Status: Inappropriate [i.MX specific] - -Signed-off-by: Jian ---- - ext/gl/gstglimagesink.c | 57 ++++++++++++++++++++++++++++++- - ext/gl/gstglimagesink.h | 3 ++ - gst-libs/gst/gl/gstglvivdirecttexture.c | 22 ++++++------ - 3 files changed, 71 insertions(+), 11 deletions(-) - -diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c -index cd3a9ff..1d60e1d 100644 ---- a/ext/gl/gstglimagesink.c -+++ b/ext/gl/gstglimagesink.c -@@ -302,6 +302,8 @@ gst_glimage_sink_init (GstGLImageSink * glimage_sink) - glimage_sink->pool = NULL; - glimage_sink->stored_buffer = NULL; - glimage_sink->redisplay_texture = 0; -+ glimage_sink->cropmeta = NULL; -+ glimage_sink->videometa = NULL; - - g_mutex_init (&glimage_sink->drawing_lock); - } -@@ -602,6 +604,10 @@ gst_glimage_sink_change_state (GstElement * element, GstStateChange transition) - gst_object_unref (glimage_sink->display); - glimage_sink->display = NULL; - } -+ -+ glimage_sink->cropmeta = NULL; -+ glimage_sink->videometa = NULL; -+ - break; - } - case GST_STATE_CHANGE_READY_TO_NULL: -@@ -804,6 +810,9 @@ gst_glimage_sink_show_frame (GstVideoSink * vsink, GstBuffer * buf) - if (stored_buffer) - gst_buffer_unref (stored_buffer); - -+ glimage_sink->cropmeta = gst_buffer_get_video_crop_meta (buf); -+ glimage_sink->videometa = gst_buffer_get_video_meta (buf); -+ - /* Ask the underlying window to redraw its content */ - if (!gst_glimage_sink_redisplay (glimage_sink)) - goto redisplay_failed; -@@ -1155,7 +1164,7 @@ gst_glimage_sink_on_draw (GstGLImageSink * gl_sink) - #endif - #if GST_GL_HAVE_GLES2 - if (USING_GLES2 (gl_sink->context)) { -- const GLfloat vVertices[] = { 1.0f, 1.0f, 0.0f, -+ GLfloat vVertices[] = { 1.0f, 1.0f, 0.0f, - 1.0f, 0.0f, - -1.0f, 1.0f, 0.0f, - 0.0f, 0.0f, -@@ -1165,6 +1174,52 @@ gst_glimage_sink_on_draw (GstGLImageSink * gl_sink) - 1.0f, 1.0f - }; - -+ // recalculate the texcoords based on video crop and alignment -+ { -+ gint bufw, bufh; -+ gint x,y,width,height; -+ -+ if (gl_sink->videometa -+ && (gl_sink->videometa->format == GST_VIDEO_FORMAT_I420 -+ || gl_sink->videometa->format == GST_VIDEO_FORMAT_NV12)) { -+ bufw = gl_sink->videometa->stride[0]; -+ bufh = gl_sink->videometa->offset[1] / bufw; -+ } -+ else { -+ bufw = GST_VIDEO_SINK_WIDTH (gl_sink); -+ bufh = GST_VIDEO_SINK_HEIGHT (gl_sink); -+ } -+ -+ //g_print ("buffer res: %d, %d\n", bufw, bufh); -+ -+ if (gl_sink->cropmeta) { -+ x = gl_sink->cropmeta->x; -+ y = gl_sink->cropmeta->y; -+ width = gl_sink->cropmeta->width; -+ height = gl_sink->cropmeta->height; -+ } -+ else { -+ x = y = 0; -+ width = GST_VIDEO_SINK_WIDTH (gl_sink); -+ height = GST_VIDEO_SINK_HEIGHT (gl_sink); -+ } -+ -+ vVertices[8] = (float)(x) / bufw; -+ vVertices[9] = (float)(y) / bufh; -+ -+ vVertices[3] = (float)(x + width) / bufw; -+ vVertices[4] = vVertices[9]; -+ -+ vVertices[13] = vVertices[8]; -+ vVertices[14] = (float)(y + height) / bufh; -+ -+ vVertices[18] = vVertices[3]; -+ vVertices[19] = vVertices[14]; -+ -+ //g_print ("vVertices, (%f, %f), (%f, %f), (%f, %f), (%f, %f)\n", vVertices[8], vVertices[9], vVertices[3], vVertices[4], -+ // vVertices[13], vVertices[14], vVertices[18], vVertices[19]); -+ } -+ - GLushort indices[] = { 0, 1, 2, 0, 2, 3 }; - - gl->ClearColor (0.0, 0.0, 0.0, 0.0); -diff --git a/ext/gl/gstglimagesink.h b/ext/gl/gstglimagesink.h -index 25e6a13..1805e94 100644 ---- a/ext/gl/gstglimagesink.h -+++ b/ext/gl/gstglimagesink.h -@@ -82,6 +82,9 @@ struct _GstGLImageSink - guint window_width; - guint window_height; - -+ GstVideoCropMeta *cropmeta; -+ GstVideoMeta *videometa; -+ - #if GST_GL_HAVE_GLES2 - GstGLShader *redisplay_shader; - GLint redisplay_attr_position_loc; -diff --git a/gst-libs/gst/gl/gstglvivdirecttexture.c b/gst-libs/gst/gl/gstglvivdirecttexture.c -index 4806335..9131101 100644 ---- a/gst-libs/gst/gl/gstglvivdirecttexture.c -+++ b/gst-libs/gst/gl/gstglvivdirecttexture.c -@@ -89,8 +89,18 @@ gst_gl_viv_direct_bind_gstbuffer (GstGLContext * context, guint tex_id, GstVideo - PhyMemBlock *memblk = &memphy->block; - - GstVideoFormat fmt = GST_VIDEO_INFO_FORMAT (info); -- guint viv_fmt; -+ gint width, height; -+ GstVideoMeta *vmeta = gst_buffer_get_video_meta (buffer); -+ if (vmeta && (fmt == GST_VIDEO_FORMAT_I420 || fmt == GST_VIDEO_FORMAT_NV12)) { -+ width = vmeta->stride[0]; -+ height = vmeta->offset[1] / width; -+ } -+ else { -+ width = GST_VIDEO_INFO_WIDTH (info); -+ height = GST_VIDEO_INFO_HEIGHT (info); -+ } - -+ guint viv_fmt; - switch (fmt) { - case GST_VIDEO_FORMAT_I420: - viv_fmt = GL_VIV_I420; -@@ -107,15 +117,7 @@ gst_gl_viv_direct_bind_gstbuffer (GstGLContext * context, guint tex_id, GstVideo - return FALSE; - } - -- GstVivDirectTexture viv_tex = { -- tex_id, -- GST_VIDEO_INFO_WIDTH (info), -- GST_VIDEO_INFO_HEIGHT (info), -- viv_fmt, -- memblk->vaddr, -- memblk->paddr, -- FALSE}; -- -+ GstVivDirectTexture viv_tex = {tex_id, width, height, viv_fmt, memblk->vaddr, memblk->paddr, FALSE}; - gst_gl_context_thread_add (context, (GstGLContextThreadFunc) _do_viv_direct_tex_bind_mem, &viv_tex); - - return viv_tex.ret; --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0003-glimagesink-Add-fps-print-in-glimagesink.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0003-glimagesink-Add-fps-print-in-glimagesink.patch deleted file mode 100644 index e607a1ddf..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0003-glimagesink-Add-fps-print-in-glimagesink.patch +++ /dev/null @@ -1,69 +0,0 @@ -From 29da042a43dd49e1fb821afd8f6d5d63ad0f9f07 Mon Sep 17 00:00:00 2001 -From: Jian -Date: Mon, 27 Apr 2015 17:42:36 +0800 -Subject: [PATCH 1/3] [glimagesink] Add fps print in glimagesink -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Upstream Status: Inappropriate [i.MX specific] - -Signed-off-by: Jian ---- - ext/gl/gstglimagesink.c | 12 ++++++++++++ - ext/gl/gstglimagesink.h | 2 ++ - 2 files changed, 14 insertions(+) - -diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c -index d3cacce..3c0c6b3 100644 ---- a/ext/gl/gstglimagesink.c -+++ b/ext/gl/gstglimagesink.c -@@ -304,6 +304,7 @@ gst_glimage_sink_init (GstGLImageSink * glimage_sink) - glimage_sink->redisplay_texture = 0; - glimage_sink->cropmeta = NULL; - glimage_sink->videometa = NULL; -+ glimage_sink->frame_showed = 0; - - g_mutex_init (&glimage_sink->drawing_lock); - } -@@ -611,6 +612,15 @@ gst_glimage_sink_change_state (GstElement * element, GstStateChange transition) - break; - } - case GST_STATE_CHANGE_READY_TO_NULL: -+ { -+ GstClockTime run_time = gst_element_get_start_time (GST_ELEMENT (glimage_sink)); -+ if (run_time > 0) { -+ g_print ("Total showed frames (%lld), playing for (%"GST_TIME_FORMAT"), fps (%.3f).\n", -+ glimage_sink->frame_showed, GST_TIME_ARGS (run_time), -+ (gfloat)GST_SECOND * glimage_sink->frame_showed / run_time); -+ } -+ } -+ - break; - default: - break; -@@ -827,6 +837,8 @@ gst_glimage_sink_show_frame (GstVideoSink * vsink, GstBuffer * buf) - return GST_FLOW_ERROR; - } - -+ glimage_sink->frame_showed ++; -+ - return GST_FLOW_OK; - - /* ERRORS */ -diff --git a/ext/gl/gstglimagesink.h b/ext/gl/gstglimagesink.h -index 1805e94..5990457 100644 ---- a/ext/gl/gstglimagesink.h -+++ b/ext/gl/gstglimagesink.h -@@ -85,6 +85,8 @@ struct _GstGLImageSink - GstVideoCropMeta *cropmeta; - GstVideoMeta *videometa; - -+ guint64 frame_showed; -+ - #if GST_GL_HAVE_GLES2 - GstGLShader *redisplay_shader; - GLint redisplay_attr_position_loc; --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0004-gl-fb-Support-fb-backend-for-gl-plugins.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0004-gl-fb-Support-fb-backend-for-gl-plugins.patch deleted file mode 100644 index cade26c0d..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0004-gl-fb-Support-fb-backend-for-gl-plugins.patch +++ /dev/null @@ -1,779 +0,0 @@ -From f70aa04abd040569038136a536d27ba928ad9339 Mon Sep 17 00:00:00 2001 -From: Jian -Date: Mon, 27 Apr 2015 17:41:57 +0800 -Subject: [PATCH 2/3] [gl fb] Support fb backend for gl plugins -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Upstream Status: Inappropriate [i.MX specific] - -Signed-off-by: Jian ---- - configure.ac | 23 ++- - gst-libs/gst/gl/Makefile.am | 6 + - gst-libs/gst/gl/fb/Makefile.am | 25 +++ - gst-libs/gst/gl/fb/gstgldisplay_fb.c | 109 ++++++++++++ - gst-libs/gst/gl/fb/gstgldisplay_fb.h | 66 +++++++ - gst-libs/gst/gl/fb/gstglwindow_fb_egl.c | 283 +++++++++++++++++++++++++++++++ - gst-libs/gst/gl/fb/gstglwindow_fb_egl.h | 68 ++++++++ - gst-libs/gst/gl/gstgldisplay.c | 8 + - gst-libs/gst/gl/gstgldisplay.h | 1 + - gst-libs/gst/gl/gstglwindow.c | 5 + - 10 files changed, 593 insertions(+), 1 deletion(-) - create mode 100644 gst-libs/gst/gl/fb/Makefile.am - create mode 100644 gst-libs/gst/gl/fb/gstgldisplay_fb.c - create mode 100644 gst-libs/gst/gl/fb/gstgldisplay_fb.h - create mode 100644 gst-libs/gst/gl/fb/gstglwindow_fb_egl.c - create mode 100644 gst-libs/gst/gl/fb/gstglwindow_fb_egl.h - -diff --git a/configure.ac b/configure.ac -index b1cfbd8..1dc21f2 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -654,6 +654,7 @@ HAVE_GL=no - HAVE_GLES2=no - HAVE_GLU=no - HAVE_WAYLAND_EGL=no -+HAV_FB_EGL=no - - HAVE_EGL_RPI=no - -@@ -740,6 +741,7 @@ case $host in - CFLAGS=$old_CFLAGS - - PKG_CHECK_MODULES(WAYLAND_EGL, wayland-client >= 1.0 wayland-cursor >= 1.0 wayland-egl >= 1.0, HAVE_WAYLAND_EGL=yes, HAVE_WAYLAND_EGL=no) -+ AC_CHECK_LIB(EGL, fbGetDisplay, HAVE_FB_EGL=yes, HAVE_FB_EGL=no) - ;; - esac - -@@ -958,6 +960,16 @@ case $host in - fi - fi - -+ if test "x$HAVE_FB_EGL" = "xyes"; then -+ if test "x$NEED_EGL" = "xno" -o "x$HAVE_EGL" = "xno"; then -+ AC_MSG_WARN([EGL is required by the fb backend for OpenGL support]) -+ else -+ HAVE_WINDOW_FB=yes -+ GL_LIBS="$GL_LIBS" -+ GL_CFLAGS="$GL_CFLAGS" -+ fi -+ fi -+ - if test "x$HAVE_EGL_RPI" = "xyes"; then - if test "x$NEED_DISPMANX" != "xno"; then - HAVE_WINDOW_DISPMANX=yes -@@ -972,7 +984,7 @@ case $host in - fi - else - if test "x$NEED_EGL" != "xno"; then -- if test "x$HAVE_WINDOW_WAYLAND" = "xyes" -o "x$HAVE_WINDOW_X11" = "xyes" -o "x$HAVE_WINDOW_DISPMANX" = "xyes"; then -+ if test "x$HAVE_WINDOW_WAYLAND" = "xyes" -o "x$HAVE_WINDOW_X11" = "xyes" -o "x$HAVE_WINDOW_DISPMANX" = "xyes" -o "x$HAVE_WINDOW_FB" = "xyes"; then - GL_LIBS="$GL_LIBS -lEGL $EGL_LIBS" - GL_CFLAGS="$GL_CFLAGS $EGL_CFLAGS" - USE_EGL=yes -@@ -1112,6 +1124,7 @@ GST_GL_HAVE_WINDOW_WAYLAND=0 - GST_GL_HAVE_WINDOW_ANDROID=0 - GST_GL_HAVE_WINDOW_DISPMANX=0 - GST_GL_HAVE_WINDOW_EAGL=0 -+GST_GL_HAVE_WINDOW_FB=0 - - if test "x$HAVE_WINDOW_X11" = "xyes"; then - GL_WINDOWS="x11 $GL_WINDOWS" -@@ -1141,6 +1154,10 @@ if test "x$HAVE_WINDOW_EAGL" = "xyes"; then - GL_WINDOWS="eagl $GL_WINDOWS" - GST_GL_HAVE_WINDOW_EAGL=1 - fi -+if test "x$HAVE_WINDOW_FB" = "xyes"; then -+ GL_WINDOWS="fb $GL_WINDOWS" -+ GST_GL_HAVE_WINDOW_FB=1 -+fi - - GL_CONFIG_DEFINES="$GL_CONFIG_DEFINES - #define GST_GL_HAVE_WINDOW_X11 $GST_GL_HAVE_WINDOW_X11 -@@ -1150,6 +1167,7 @@ GL_CONFIG_DEFINES="$GL_CONFIG_DEFINES - #define GST_GL_HAVE_WINDOW_ANDROID $GST_GL_HAVE_WINDOW_ANDROID - #define GST_GL_HAVE_WINDOW_DISPMANX $GST_GL_HAVE_WINDOW_DISPMANX - #define GST_GL_HAVE_WINDOW_EAGL $GST_GL_HAVE_WINDOW_EAGL -+#define GST_GL_HAVE_WINDOW_FB $GST_GL_HAVE_WINDOW_FB - " - - dnl PLATFORM's -@@ -1221,6 +1239,7 @@ if test "x$GL_APIS" = "x" -o "x$GL_PLATFORMS" = "x" -o "x$GL_WINDOWS" = "x"; the - HAVE_WINDOW_ANDROID=no - HAVE_WINDOW_COCOA=no - HAVE_WINDOW_EAGL=no -+ HAVE_WINDOW_FB=no - fi - - AC_SUBST(GL_LIBS) -@@ -1236,6 +1255,7 @@ AM_CONDITIONAL(HAVE_WINDOW_DISPMANX, test "x$HAVE_WINDOW_DISPMANX" = "xyes") - AM_CONDITIONAL(HAVE_WINDOW_WAYLAND, test "x$HAVE_WINDOW_WAYLAND" = "xyes") - AM_CONDITIONAL(HAVE_WINDOW_ANDROID, test "x$HAVE_WINDOW_ANDROID" = "xyes") - AM_CONDITIONAL(HAVE_WINDOW_EAGL, test "x$HAVE_WINDOW_EAGL" = "xyes") -+AM_CONDITIONAL(HAVE_WINDOW_FB, test "x$HAVE_WINDOW_FB" = "xyes") - - AM_CONDITIONAL(USE_OPENGL, test "x$USE_OPENGL" = "xyes") - AM_CONDITIONAL(USE_GLES2, test "x$USE_GLES2" = "xyes") -@@ -3206,6 +3226,7 @@ gst-libs/gst/gl/egl/Makefile - gst-libs/gst/gl/wayland/Makefile - gst-libs/gst/gl/win32/Makefile - gst-libs/gst/gl/x11/Makefile -+gst-libs/gst/gl/fb/Makefile - gst-libs/gst/insertbin/Makefile - gst-libs/gst/interfaces/Makefile - gst-libs/gst/codecparsers/Makefile -diff --git a/gst-libs/gst/gl/Makefile.am b/gst-libs/gst/gl/Makefile.am -index 86bc439..d5e5baa 100644 ---- a/gst-libs/gst/gl/Makefile.am -+++ b/gst-libs/gst/gl/Makefile.am -@@ -92,11 +92,17 @@ SUBDIRS += eagl - libgstgl_@GST_API_VERSION@_la_LIBADD += eagl/libgstgl-eagl.la - endif - -+if HAVE_WINDOW_FB -+SUBDIRS += fb -+libgstgl_@GST_API_VERSION@_la_LIBADD += fb/libgstgl-fb.la -+endif -+ - if USE_EGL - SUBDIRS += egl - libgstgl_@GST_API_VERSION@_la_LIBADD += egl/libgstgl-egl.la - endif - -+ - nodist_libgstgl_@GST_API_VERSION@include_HEADERS = \ - $(built_header_configure) - -diff --git a/gst-libs/gst/gl/fb/Makefile.am b/gst-libs/gst/gl/fb/Makefile.am -new file mode 100644 -index 0000000..8e4656c ---- /dev/null -+++ b/gst-libs/gst/gl/fb/Makefile.am -@@ -0,0 +1,25 @@ -+## Process this file with automake to produce Makefile.in -+ -+noinst_LTLIBRARIES = libgstgl-fb.la -+ -+libgstgl_fb_la_SOURCES = \ -+ gstgldisplay_fb.c \ -+ gstglwindow_fb_egl.c -+ -+noinst_HEADERS = \ -+ gstgldisplay_fb.h \ -+ gstglwindow_fb_egl.h -+ -+libgstgl_fbincludedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/gl/fb -+ -+libgstgl_fb_la_CFLAGS = \ -+ -I$(top_srcdir)/gst-libs \ -+ -I$(top_builddir)/gst-libs \ -+ $(GL_CFLAGS) \ -+ $(GST_PLUGINS_BASE_CFLAGS) \ -+ $(GST_BASE_CFLAGS) \ -+ $(GST_CFLAGS) -+ -+libgstgl_fb_la_LDFLAGS = \ -+ $(GST_LIB_LDFLAGS) \ -+ $(GST_ALL_LDFLAGS) -diff --git a/gst-libs/gst/gl/fb/gstgldisplay_fb.c b/gst-libs/gst/gl/fb/gstgldisplay_fb.c -new file mode 100644 -index 0000000..3be9756 ---- /dev/null -+++ b/gst-libs/gst/gl/fb/gstgldisplay_fb.c -@@ -0,0 +1,109 @@ -+/* -+ * GStreamer -+ * Copyright (C) 2014 Matthew Waters -+ * -+ * 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 -+ -+GST_DEBUG_CATEGORY_STATIC (gst_gl_display_debug); -+#define GST_CAT_DEFAULT gst_gl_display_debug -+ -+G_DEFINE_TYPE (GstGLDisplayFB, gst_gl_display_fb, GST_TYPE_GL_DISPLAY); -+ -+static void gst_gl_display_fb_finalize (GObject * object); -+static guintptr gst_gl_display_fb_get_handle (GstGLDisplay * display); -+ -+static void -+gst_gl_display_fb_class_init (GstGLDisplayFBClass * klass) -+{ -+ GST_GL_DISPLAY_CLASS (klass)->get_handle = -+ GST_DEBUG_FUNCPTR (gst_gl_display_fb_get_handle); -+ -+ G_OBJECT_CLASS (klass)->finalize = gst_gl_display_fb_finalize; -+} -+ -+static void -+gst_gl_display_fb_init (GstGLDisplayFB * display_fb) -+{ -+ GstGLDisplay *display = (GstGLDisplay *) display_fb; -+ -+ display->type = GST_GL_DISPLAY_TYPE_FB; -+ display_fb->name = NULL; -+ display_fb->disp_idx = 0; -+ display_fb->display = NULL; -+} -+ -+static void -+gst_gl_display_fb_finalize (GObject * object) -+{ -+ GstGLDisplayFB *display_fb = GST_GL_DISPLAY_FB (object); -+ -+ if (display_fb->name) -+ g_free (display_fb->name); -+ -+ if (display_fb->display) -+ fbDestroyDisplay (display_fb->display); -+ -+ G_OBJECT_CLASS (gst_gl_display_fb_parent_class)->finalize (object); -+} -+ -+/** -+ * gst_gl_display_fb_new: -+ * @name: (allow-none): a display name -+ * -+ * Create a new #GstGLDisplayFB from the x11 display name. See XOpenDisplay() -+ * for details on what is a valid name. -+ * -+ * Returns: (transfer full): a new #GstGLDisplayFB or %NULL -+ */ -+GstGLDisplayFB * -+gst_gl_display_fb_new (gchar *name) -+{ -+ GstGLDisplayFB *display; -+ const gchar *fb_name = NULL; -+ -+ GST_DEBUG_CATEGORY_GET (gst_gl_display_debug, "gldisplay"); -+ GST_DEBUG ("creating Fb EGL display"); -+ -+ fb_name = name; -+ if (!fb_name) fb_name = "fb0"; -+ -+ display = g_object_new (GST_TYPE_GL_DISPLAY_FB, NULL); -+ display->name = g_strdup (fb_name); -+ sscanf (display->name, "fb%d", &display->disp_idx); -+ display->display = fbGetDisplayByIndex (display->disp_idx); -+ if (!display->display) { -+ GST_ERROR ("Failed to open FB display, \'%s\'", fb_name); -+ return NULL; -+ } -+ -+ GST_DEBUG ("Created fb EGL display %d", display->display); -+ -+ return display; -+} -+ -+static guintptr -+gst_gl_display_fb_get_handle (GstGLDisplay * display) -+{ -+ GST_DEBUG ("Get fb EGL display %d", GST_GL_DISPLAY_FB (display)->display); -+ return (guintptr) GST_GL_DISPLAY_FB (display)->display; -+} -diff --git a/gst-libs/gst/gl/fb/gstgldisplay_fb.h b/gst-libs/gst/gl/fb/gstgldisplay_fb.h -new file mode 100644 -index 0000000..f0a5ce5 ---- /dev/null -+++ b/gst-libs/gst/gl/fb/gstgldisplay_fb.h -@@ -0,0 +1,66 @@ -+/* -+ * GStreamer -+ * Copyright (C) 2014 Matthew Waters -+ * -+ * 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_DISPLAY_FB_H__ -+#define __GST_GL_DISPLAY_FB_H__ -+ -+#include -+#include -+ -+G_BEGIN_DECLS -+ -+GType gst_gl_display_fb_get_type (void); -+ -+#define GST_TYPE_GL_DISPLAY_FB (gst_gl_display_fb_get_type()) -+#define GST_GL_DISPLAY_FB(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_DISPLAY_FB,GstGLDisplayFB)) -+#define GST_GL_DISPLAY_FB_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_GL_DISPLAY_FB,GstGLDisplayFBClass)) -+#define GST_IS_GL_DISPLAY_FB(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_DISPLAY_FB)) -+#define GST_IS_GL_DISPLAY_FB_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_GL_DISPLAY_FB)) -+#define GST_GL_DISPLAY_FB_CAST(obj) ((GstGLDisplayFB*)(obj)) -+ -+typedef struct _GstGLDisplayFB GstGLDisplayFB; -+typedef struct _GstGLDisplayFBClass GstGLDisplayFBClass; -+ -+/** -+ * GstGLDisplayFB: -+ * -+ * the contents of a #GstGLDisplayFB are private and should only be accessed -+ * through the provided API -+ */ -+struct _GstGLDisplayFB -+{ -+ GstGLDisplay parent; -+ -+ /* */ -+ gchar *name; -+ gint disp_idx; -+ EGLNativeDisplayType display; -+}; -+ -+struct _GstGLDisplayFBClass -+{ -+ GstGLDisplayClass object_class; -+}; -+ -+GstGLDisplayFB *gst_gl_display_fb_new (gchar *name); -+ -+G_END_DECLS -+ -+#endif /* __GST_GL_DISPLAY_FB_H__ */ -diff --git a/gst-libs/gst/gl/fb/gstglwindow_fb_egl.c b/gst-libs/gst/gl/fb/gstglwindow_fb_egl.c -new file mode 100644 -index 0000000..edb5fb9 ---- /dev/null -+++ b/gst-libs/gst/gl/fb/gstglwindow_fb_egl.c -@@ -0,0 +1,283 @@ -+/* -+ * GStreamer -+ * Copyright (C) 2008 Julien Isorce -+ * Copyright (C) 2012 Matthew Waters -+ * -+ * 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. -+ */ -+ -+#include "../gstgl_fwd.h" -+#include -+ -+#include "gstglwindow_fb_egl.h" -+ -+#define GST_CAT_DEFAULT gst_gl_window_debug -+ -+#define gst_gl_window_fb_egl_parent_class parent_class -+G_DEFINE_TYPE (GstGLWindowFbEGL, gst_gl_window_fb_egl, -+ GST_GL_TYPE_WINDOW); -+ -+static guintptr gst_gl_window_fb_egl_get_window_handle (GstGLWindow * -+ window); -+static void gst_gl_window_fb_egl_set_window_handle (GstGLWindow * window, -+ guintptr handle); -+static void gst_gl_window_fb_egl_draw (GstGLWindow * window, guint width, -+ guint height); -+static void gst_gl_window_fb_egl_run (GstGLWindow * window); -+static void gst_gl_window_fb_egl_quit (GstGLWindow * window); -+static void gst_gl_window_fb_egl_send_message_async (GstGLWindow * window, -+ GstGLWindowCB callback, gpointer data, GDestroyNotify destroy); -+static void gst_gl_window_fb_egl_close (GstGLWindow * window); -+static gboolean gst_gl_window_fb_egl_open (GstGLWindow * window, -+ GError ** error); -+ -+static void -+gst_gl_window_fb_egl_class_init (GstGLWindowFbEGLClass * klass) -+{ -+ GstGLWindowClass *window_class = (GstGLWindowClass *) klass; -+ -+ window_class->get_window_handle = -+ GST_DEBUG_FUNCPTR (gst_gl_window_fb_egl_get_window_handle); -+ window_class->set_window_handle = -+ GST_DEBUG_FUNCPTR (gst_gl_window_fb_egl_set_window_handle); -+ window_class->draw_unlocked = -+ GST_DEBUG_FUNCPTR (gst_gl_window_fb_egl_draw); -+ window_class->draw = GST_DEBUG_FUNCPTR (gst_gl_window_fb_egl_draw); -+ window_class->run = GST_DEBUG_FUNCPTR (gst_gl_window_fb_egl_run); -+ window_class->quit = GST_DEBUG_FUNCPTR (gst_gl_window_fb_egl_quit); -+ window_class->send_message_async = -+ GST_DEBUG_FUNCPTR (gst_gl_window_fb_egl_send_message_async); -+ window_class->close = GST_DEBUG_FUNCPTR (gst_gl_window_fb_egl_close); -+ window_class->open = GST_DEBUG_FUNCPTR (gst_gl_window_fb_egl_open); -+} -+ -+static void -+gst_gl_window_fb_egl_init (GstGLWindowFbEGL * window) -+{ -+ GstGLWindowFbEGL *window_egl; -+ -+ window_egl = GST_GL_WINDOW_FB_EGL (window); -+ -+ window_egl->width = 0; -+ window_egl->height = 0; -+ window_egl->fullscreen = FALSE; -+ window_egl->display = 0; -+ window_egl->main_context = NULL; -+ window_egl->loop = NULL; -+} -+ -+/* Must be called in the gl thread */ -+GstGLWindowFbEGL * -+gst_gl_window_fb_egl_new (GstGLDisplay * display) -+{ -+ GstGLWindowFbEGL *window; -+ const gchar *fb_name = NULL; -+ -+ if (!display) -+ return NULL; -+ -+ window = g_object_new (GST_GL_TYPE_WINDOW_FB_EGL, NULL); -+ window->display = gst_gl_display_get_handle (display); -+ if (!window->display) { -+ GST_ERROR ("failed to get display for egl window"); -+ return NULL; -+ } -+ -+ return window; -+} -+ -+static void -+gst_gl_window_fb_egl_close (GstGLWindow * window) -+{ -+ GstGLWindowFbEGL *window_egl; -+ -+ window_egl = GST_GL_WINDOW_FB_EGL (window); -+ -+ g_main_loop_unref (window_egl->loop); -+ g_main_context_unref (window_egl->main_context); -+ -+ if (window_egl->win_id) { -+ fbDestroyWindow (window_egl->win_id); -+ } -+} -+ -+static gboolean -+gst_gl_window_fb_egl_open (GstGLWindow * window, GError ** error) -+{ -+ GstGLWindowFbEGL *window_egl; -+ -+ window_egl = GST_GL_WINDOW_FB_EGL (window); -+ -+ if (!window_egl->display) { -+ GST_ERROR ("No display for window_egl."); -+ return FALSE; -+ } -+ -+ window_egl->win_id = fbCreateWindow (window_egl->display, -1, -1, 0, 0); -+ if (!window_egl->win_id) { -+ GST_ERROR ("Failed to create window_egl"); -+ return FALSE; -+ } -+ -+ fbGetDisplayGeometry (window_egl->display, &window_egl->width, &window_egl->height); -+ window_egl->req_width = window_egl->width; -+ window_egl->req_height = window_egl->height; -+ GST_DEBUG ("Open FB display succesfully, resolution is (%dx%d),display %d, window %d.", -+ window_egl->width, window_egl->height, window_egl->display, window_egl->win_id); -+ -+ window_egl->main_context = g_main_context_new (); -+ window_egl->loop = g_main_loop_new (window_egl->main_context, FALSE); -+ -+ return TRUE; -+} -+ -+static void -+gst_gl_window_fb_egl_run (GstGLWindow * window) -+{ -+ GstGLWindowFbEGL *window_egl; -+ -+ window_egl = GST_GL_WINDOW_FB_EGL (window); -+ -+ GST_LOG ("starting main loop"); -+ g_main_loop_run (window_egl->loop); -+ GST_LOG ("exiting main loop"); -+} -+ -+static void -+gst_gl_window_fb_egl_quit (GstGLWindow * window) -+{ -+ GstGLWindowFbEGL *window_egl; -+ -+ window_egl = GST_GL_WINDOW_FB_EGL (window); -+ -+ GST_LOG ("sending quit"); -+ -+ g_main_loop_quit (window_egl->loop); -+ -+ GST_LOG ("quit sent"); -+} -+ -+typedef struct _GstGLMessage -+{ -+ GstGLWindowCB callback; -+ gpointer data; -+ GDestroyNotify destroy; -+} GstGLMessage; -+ -+static gboolean -+_run_message (GstGLMessage * message) -+{ -+ if (message->callback) -+ message->callback (message->data); -+ -+ if (message->destroy) -+ message->destroy (message->data); -+ -+ g_slice_free (GstGLMessage, message); -+ -+ return FALSE; -+} -+ -+static void -+gst_gl_window_fb_egl_send_message_async (GstGLWindow * window, -+ GstGLWindowCB callback, gpointer data, GDestroyNotify destroy) -+{ -+ GstGLWindowFbEGL *window_egl; -+ GstGLMessage *message; -+ -+ window_egl = GST_GL_WINDOW_FB_EGL (window); -+ message = g_slice_new (GstGLMessage); -+ -+ message->callback = callback; -+ message->data = data; -+ message->destroy = destroy; -+ -+ g_main_context_invoke (window_egl->main_context, (GSourceFunc) _run_message, -+ message); -+} -+ -+static guintptr -+gst_gl_window_fb_egl_get_window_handle (GstGLWindow * window) -+{ -+ GST_DEBUG ("fb egl get window: %d", GST_GL_WINDOW_FB_EGL (window)->win_id); -+ return (guintptr) GST_GL_WINDOW_FB_EGL (window)->win_id; -+} -+ -+static void -+gst_gl_window_fb_egl_set_window_handle (GstGLWindow * window, -+ guintptr handle) -+{ -+} -+ -+struct draw -+{ -+ GstGLWindowFbEGL *window; -+ guint width, height; -+}; -+ -+static void -+draw_cb (gpointer data) -+{ -+ struct draw *draw_data = data; -+ GstGLWindowFbEGL *window_egl = draw_data->window; -+ GstGLWindow *window = GST_GL_WINDOW (window_egl); -+ GstGLContext *context = gst_gl_window_get_context (window); -+ GstGLContextClass *context_class = GST_GL_CONTEXT_GET_CLASS (context); -+ -+#if 0 -+ if (draw_data->width != window_egl->req_width || draw_data->height != window_egl->req_height) { -+ if (draw_data->width == 0) -+ window_egl->req_width = window_egl->width; -+ else -+ window_egl->req_width = draw_data->width; -+ -+ if (draw_data->height == 0) -+ window_egl->req_height = window_egl->height; -+ else -+ window_egl->req_height = draw_data->height; -+ -+ if (window->resize) -+ window->resize (window->resize_data, window_egl->req_width, window_egl->req_height); -+ } -+#endif -+ -+ //FIXME: default full screen currently -+ if (!window_egl->fullscreen && window->resize) { -+ window->resize (window->resize_data, window_egl->width, window_egl->height); -+ window_egl->fullscreen = TRUE; -+ } -+ -+ if (window->draw) -+ window->draw (window->draw_data); -+ -+ GST_DEBUG ("####### draw data"); -+ context_class->swap_buffers (context); -+ -+ gst_object_unref (context); -+} -+ -+static void -+gst_gl_window_fb_egl_draw (GstGLWindow * window, guint width, guint height) -+{ -+ struct draw draw_data; -+ -+ draw_data.window = GST_GL_WINDOW_FB_EGL (window); -+ draw_data.width = width; -+ draw_data.height = height; -+ -+ gst_gl_window_send_message (window, (GstGLWindowCB) draw_cb, &draw_data); -+} -+ -diff --git a/gst-libs/gst/gl/fb/gstglwindow_fb_egl.h b/gst-libs/gst/gl/fb/gstglwindow_fb_egl.h -new file mode 100644 -index 0000000..bcd71ab ---- /dev/null -+++ b/gst-libs/gst/gl/fb/gstglwindow_fb_egl.h -@@ -0,0 +1,68 @@ -+/* -+ * GStreamer -+ * Copyright (C) 2012 Matthew Waters -+ * -+ * 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_WINDOW_FB_EGL_H__ -+#define __GST_GL_WINDOW_FB_EGL_H__ -+ -+#include -+#include "EGL/eglvivante.h" -+ -+G_BEGIN_DECLS -+ -+#define GST_GL_TYPE_WINDOW_FB_EGL (gst_gl_window_fb_egl_get_type()) -+#define GST_GL_WINDOW_FB_EGL(o) (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_WINDOW_FB_EGL, GstGLWindowFbEGL)) -+#define GST_GL_WINDOW_FB_EGL_CLASS(k) (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_WINDOW_FB_EGL, GstGLWindowFbEGLClass)) -+#define GST_GL_IS_WINDOW_FB_EGL(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_WINDOW_FB_EGL)) -+#define GST_GL_IS_WINDOW_FB_EGL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_WINDOW_FB_EGL)) -+#define GST_GL_WINDOW_FB_EGL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_WINDOW_FB_EGL, GstGLWindowFbEGL_Class)) -+ -+typedef struct _GstGLWindowFbEGL GstGLWindowFbEGL; -+typedef struct _GstGLWindowFbEGLClass GstGLWindowFbEGLClass; -+ -+struct _GstGLWindowFbEGL { -+ /*< private >*/ -+ GstGLWindow parent; -+ -+ /* */ -+ gint width, req_width; -+ gint height, req_height; -+ gboolean fullscreen; -+ EGLNativeDisplayType display; -+ EGLNativeWindowType win_id; -+ -+ GMainContext *main_context; -+ GMainLoop *loop; -+}; -+ -+struct _GstGLWindowFbEGLClass { -+ /*< private >*/ -+ GstGLWindowClass parent_class; -+ -+ /*< private >*/ -+ gpointer _reserved[GST_PADDING]; -+}; -+ -+GType gst_gl_window_fb_egl_get_type (void); -+ -+GstGLWindowFbEGL * gst_gl_window_fb_egl_new (GstGLDisplay * display); -+ -+G_END_DECLS -+ -+#endif /* __GST_GL_WINDOW_FB_EGL_H__ */ -diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c -index 6b7b835..9de8411 100644 ---- a/gst-libs/gst/gl/gstgldisplay.c -+++ b/gst-libs/gst/gl/gstgldisplay.c -@@ -157,6 +157,14 @@ gst_gl_display_new (void) - if (!display && (!user_choice || g_strstr_len (user_choice, 7, "wayland"))) - display = g_object_new (GST_TYPE_GL_DISPLAY, NULL); - #endif -+#if GST_GL_HAVE_WINDOW_FB -+ if (!display && (!user_choice || g_strstr_len (user_choice, 2, "fb"))) { -+ const gchar *fb_name = NULL; -+ fb_name = g_getenv ("GST_GL_FB"); -+ if (!fb_name) fb_name = "fb0"; -+ display = GST_GL_DISPLAY (gst_gl_display_fb_new (fb_name)); -+ } -+#endif - #if GST_GL_HAVE_PLATFORM_EGL - if (!display && (!platform_choice - || g_strstr_len (platform_choice, 3, "egl"))) -diff --git a/gst-libs/gst/gl/gstgldisplay.h b/gst-libs/gst/gl/gstgldisplay.h -index 09489a6..d4d3db5 100644 ---- a/gst-libs/gst/gl/gstgldisplay.h -+++ b/gst-libs/gst/gl/gstgldisplay.h -@@ -49,6 +49,7 @@ typedef enum - GST_GL_DISPLAY_TYPE_WIN32 = (1 << 3), - GST_GL_DISPLAY_TYPE_DISPMANX = (1 << 4), - GST_GL_DISPLAY_TYPE_EGL = (1 << 5), -+ GST_GL_DISPLAY_TYPE_FB = (1 << 6), - - GST_GL_DISPLAY_TYPE_ANY = G_MAXUINT32 - } GstGLDisplayType; -diff --git a/gst-libs/gst/gl/gstglwindow.c b/gst-libs/gst/gl/gstglwindow.c -index a35ca05..86ebf78 100644 ---- a/gst-libs/gst/gl/gstglwindow.c -+++ b/gst-libs/gst/gl/gstglwindow.c -@@ -187,6 +187,11 @@ gst_gl_window_new (GstGLDisplay * display) - if (!window && (!user_choice || g_strstr_len (user_choice, 4, "eagl"))) - window = GST_GL_WINDOW (gst_gl_window_eagl_new ()); - #endif -+#if GST_GL_HAVE_WINDOW_FB -+ if (!window && (!user_choice || g_strstr_len (user_choice, 2, "fb"))) -+ window = GST_GL_WINDOW (gst_gl_window_fb_egl_new (display)); -+#endif -+ - if (!window) { - /* subclass returned a NULL window */ - GST_WARNING ("Could not create window. user specified %s, creating dummy" --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0005-gl-wayland-Make-it-always-fullscreen-1024x768.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0005-gl-wayland-Make-it-always-fullscreen-1024x768.patch deleted file mode 100644 index 6af56b4e6..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0005-gl-wayland-Make-it-always-fullscreen-1024x768.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 6bdbf69076950eb3024b1b271f3ff205df3937e4 Mon Sep 17 00:00:00 2001 -From: Jian -Date: Mon, 27 Apr 2015 17:43:16 +0800 -Subject: [PATCH 3/3] [gl wayland] Make it always fullscreen (1024x768) -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -gl wayland backend has problem for window resolution, -currently make if always 1024x768. - -Upstream Status: Inappropriate [i.MX specific] - -Signed-off-by: Jian ---- - gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c | 12 ++++++++++-- - 1 file changed, 10 insertions(+), 2 deletions(-) - -diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c -index d5853b0..5d9b457 100644 ---- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c -+++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c -@@ -195,9 +195,9 @@ create_surface (GstGLWindowWaylandEGL * window_egl) - &shell_surface_listener, window_egl); - - if (window_egl->window.window_width <= 0) -- window_egl->window.window_width = 320; -+ window_egl->window.window_width = 1024; - if (window_egl->window.window_height <= 0) -- window_egl->window.window_height = 240; -+ window_egl->window.window_height = 768; - - window_egl->window.native = - wl_egl_window_create (window_egl->window.surface, -@@ -483,11 +483,19 @@ draw_cb (gpointer data) - GstGLContext *context = gst_gl_window_get_context (window); - GstGLContextClass *context_class = GST_GL_CONTEXT_GET_CLASS (context); - -+#if 0 - if (window_egl->window.window_width != draw_data->width - || window_egl->window.window_height != draw_data->height) { - GST_DEBUG ("dimensions don't match, attempting resize"); - window_resize (window_egl, draw_data->width, draw_data->height); - } -+#endif -+ -+ // Fix to fullscreen here -+ if (!window_egl->window.fullscreen) { -+ window_resize (window_egl, window_egl->window.window_width, window_egl->window.window_height); -+ window_egl->window.fullscreen = 1; -+ } - - if (window->draw) - window->draw (window->draw_data); --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0006-h263parse_fix_CPFMT_parsing.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0006-h263parse_fix_CPFMT_parsing.patch deleted file mode 100644 index b5009b1d4..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0006-h263parse_fix_CPFMT_parsing.patch +++ /dev/null @@ -1,88 +0,0 @@ -From: Lyon Wang -Date: Tue May 12 15:47:33 2015 +0800 - - h263parse: fix custom picture format (CPFMT) parsing - - In the H263 spec, CPFMT is present only if the use of a custom - picture format is signalled in PLUSEPTYPE and UFEP is "001", - so we need to check params->format and only if the value is - 6 (custom source format) the CPFMT should be read, otherwise - it's not present and wrong data will be parsed. - - When reading the CPFMT, the width and height were not - calculated correctly (wrong bitmask). - - https://bugzilla.gnome.org//show_bug.cgi?id=749253 - Upstream Status: accepted and has been pushed to the master - -diff --git a/gst/videoparsers/h263parse.c b/gst/videoparsers/h263parse.c -index d794f7a..98a30e7 100644 ---- a/gst/videoparsers/h263parse.c -+++ b/gst/videoparsers/h263parse.c -@@ -271,29 +271,46 @@ gst_h263_parse_get_params (H263Params * params, GstBuffer * buffer, - } - - if (ufep == 1) { -- guint32 cpfmt = 0; -+ if (params->format == 6) { -+ /* A fixed length codeword of 23 bits that is present only if the use of -+ * a custom picture format is signalled in PLUSPTYPE and UFEP is 001 */ -+ guint32 cpfmt = 0; - -- /* 5.1.5 CPFMT : Custom Picture Format (23 bits) */ -- if (!gst_bit_reader_get_bits_uint32 (&br, &cpfmt, 23)) -- goto more; -- if (!(cpfmt & 0x200)) { -- GST_WARNING ("Corrupted CPFMT (0x%x)", cpfmt); -- goto beach; -- } -- temp8 = cpfmt >> 19; -- params->width = (((cpfmt >> 10) & 0x1f) + 1) * 4; -- params->height = ((cpfmt & 0x1f) + 1) * 4; -- -- if (temp8 == 0xf) { -- guint32 epar = 0; -- /* 5.1.6 EPAR : Extended Pixel Aspect Ratio (16bits) */ -- if (!gst_bit_reader_get_bits_uint32 (&br, &epar, 16)) -+ /* 5.1.5 CPFMT : Custom Picture Format (23 bits) */ -+ if (!gst_bit_reader_get_bits_uint32 (&br, &cpfmt, 23)) - goto more; -- params->parnum = epar >> 8; -- params->pardenom = epar & 0xf; -+ if (!(cpfmt & 0x200)) { -+ GST_WARNING ("Corrupted CPFMT (0x%x)", cpfmt); -+ goto beach; -+ } -+ temp8 = cpfmt >> 19; -+ /* Bits 5-13: Picture Width Indication: Range [0, ... , 511]; -+ * Number of pixels per line = (PWI + 1) * 4 */ -+ params->width = (((cpfmt >> 10) & 0x1ff) + 1) * 4; -+ /* Bits 15-23 Picture Height Indication: Range [1, ... , 288]; -+ * Number of lines = PHI * 4 */ -+ params->height = (cpfmt & 0x1ff) * 4; -+ -+ if (temp8 == 0xf) { -+ guint32 epar = 0; -+ /* 5.1.6 EPAR : Extended Pixel Aspect Ratio (16bits) */ -+ if (!gst_bit_reader_get_bits_uint32 (&br, &epar, 16)) -+ goto more; -+ params->parnum = epar >> 8; -+ params->pardenom = epar & 0xf; -+ } else { -+ params->parnum = partable[temp8][0]; -+ params->pardenom = partable[temp8][1]; -+ } - } else { -- params->parnum = partable[temp8][0]; -- params->pardenom = partable[temp8][1]; -+ /* Fill in width/height based on format */ -+ params->width = sizetable[params->format][0]; -+ params->height = sizetable[params->format][1]; -+ GST_DEBUG (" Picture width x height: %d x %d", -+ params->width, params->height); -+ /* Fill in default Pixel aspect ratios */ -+ params->parnum = 12; -+ params->pardenom = 11; - } - - if (params->custompcfpresent) { diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0007-glfilter-Fix-video-is-tearing-after-enab.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0007-glfilter-Fix-video-is-tearing-after-enab.patch deleted file mode 100644 index 203166ee4..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0007-glfilter-Fix-video-is-tearing-after-enab.patch +++ /dev/null @@ -1,66 +0,0 @@ -From b74f9d15cad37abddd9050a14fb12c1dac0a43eb Mon Sep 17 00:00:00 2001 -From: Jian -Date: Thu, 21 May 2015 12:55:15 +0800 -Subject: [PATCH] MMFMWK-6582 [glfilter] Fix video is tearing after enable - graphic effect -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Need to finish current gl draw before send the buffer -to downstream elements - -Upstream Status: Inappropriate [i.MX specific] - -Signed-off-by: Jian ---- - gst-libs/gst/gl/gstglfilter.c | 7 +++++++ - gst-libs/gst/gl/gstglfilter.h | 2 ++ - 2 files changed, 9 insertions(+) - -diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c -index d038dcc..feff9de 100644 ---- a/gst-libs/gst/gl/gstglfilter.c -+++ b/gst-libs/gst/gl/gstglfilter.c -@@ -300,6 +300,8 @@ gst_gl_filter_reset (GstGLFilter * filter) - if (filter->context) - gst_object_unref (filter->context); - filter->context = NULL; -+ -+ filter->sync_draw = FALSE; - } - - static gboolean -@@ -1197,6 +1199,7 @@ gst_gl_filter_filter_texture (GstGLFilter * filter, GstBuffer * inbuf, - GST_DEBUG ("Physical continious buffer, attempting viv direct texture binding"); - gst_gl_viv_direct_bind_gstbuffer (filter->context, filter->out_tex_id, &filter->out_info, outbuf); - to_download = FALSE; -+ filter->sync_draw = TRUE; - out_tex = filter->out_tex_id; - } - else { -@@ -1434,4 +1437,8 @@ gst_gl_filter_draw_texture (GstGLFilter * filter, GLuint texture, - gl->DisableVertexAttribArray (filter->draw_attr_texture_loc); - } - #endif -+ -+ if (filter->sync_draw) { -+ gl->Finish (); -+ } - } -diff --git a/gst-libs/gst/gl/gstglfilter.h b/gst-libs/gst/gl/gstglfilter.h -index c786493..1543d61 100644 ---- a/gst-libs/gst/gl/gstglfilter.h -+++ b/gst-libs/gst/gl/gstglfilter.h -@@ -90,6 +90,8 @@ struct _GstGLFilter - GLint draw_attr_position_loc; - GLint draw_attr_texture_loc; - #endif -+ -+ gboolean sync_draw; - }; - - /** --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0008-gl-Fix-glimagesink-loop-playback-failed-in-wayland.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0008-gl-Fix-glimagesink-loop-playback-failed-in-wayland.patch deleted file mode 100644 index 3d2df025e..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0008-gl-Fix-glimagesink-loop-playback-failed-in-wayland.patch +++ /dev/null @@ -1,561 +0,0 @@ -From 060f597eda27c8e4492c265f249e21d4ad5f3cc3 Mon Sep 17 00:00:00 2001 -From: Jian -Date: Mon, 25 May 2015 16:30:53 +0800 -Subject: [PATCH] [gl] Fix glimagesink loop playback failed in wayland -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -gl/wayland: add GstGLDisplayWayland -Simple implementation split from GstGLWindowWayland - -Upstream Status: Back Port - -https://bugzilla.gnome.org/show_bug.cgi?id=749411 - -Signed-off-by: Jian ---- - gst-libs/gst/gl/gstgldisplay.c | 5 +- - gst-libs/gst/gl/wayland/Makefile.am | 2 + - gst-libs/gst/gl/wayland/gstgldisplay_wayland.c | 157 +++++++++++++++++++++ - gst-libs/gst/gl/wayland/gstgldisplay_wayland.h | 74 ++++++++++ - gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c | 129 ++++++----------- - 5 files changed, 280 insertions(+), 87 deletions(-) - create mode 100644 gst-libs/gst/gl/wayland/gstgldisplay_wayland.c - create mode 100644 gst-libs/gst/gl/wayland/gstgldisplay_wayland.h - -diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c -index 9de8411..a200c14 100644 ---- a/gst-libs/gst/gl/gstgldisplay.c -+++ b/gst-libs/gst/gl/gstgldisplay.c -@@ -59,6 +59,9 @@ - #if GST_GL_HAVE_WINDOW_X11 - #include - #endif -+#if GST_GL_HAVE_WINDOW_WAYLAND -+#include -+#endif - #if GST_GL_HAVE_PLATFORM_EGL - #include - #include -@@ -155,7 +158,7 @@ gst_gl_display_new (void) - #endif - #if GST_GL_HAVE_WINDOW_WAYLAND - if (!display && (!user_choice || g_strstr_len (user_choice, 7, "wayland"))) -- display = g_object_new (GST_TYPE_GL_DISPLAY, NULL); -+ display = GST_GL_DISPLAY (gst_gl_display_wayland_new (NULL)); - #endif - #if GST_GL_HAVE_WINDOW_FB - if (!display && (!user_choice || g_strstr_len (user_choice, 2, "fb"))) { -diff --git a/gst-libs/gst/gl/wayland/Makefile.am b/gst-libs/gst/gl/wayland/Makefile.am -index 9006e67..1b284fb 100644 ---- a/gst-libs/gst/gl/wayland/Makefile.am -+++ b/gst-libs/gst/gl/wayland/Makefile.am -@@ -3,10 +3,12 @@ - noinst_LTLIBRARIES = libgstgl-wayland.la - - libgstgl_wayland_la_SOURCES = \ -+ gstgldisplay_wayland.c \ - gstglwindow_wayland_egl.c \ - wayland_event_source.c - - noinst_HEADERS = \ -+ gstgldisplay_wayland.h \ - gstglwindow_wayland_egl.h \ - wayland_event_source.h - -diff --git a/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c b/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c -new file mode 100644 -index 0000000..90cf1ea ---- /dev/null -+++ b/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c -@@ -0,0 +1,157 @@ -+/* -+ * GStreamer -+ * Copyright (C) 2013 Matthew Waters -+ * -+ * 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 -+ -+GST_DEBUG_CATEGORY_STATIC (gst_gl_display_debug); -+#define GST_CAT_DEFAULT gst_gl_display_debug -+ -+G_DEFINE_TYPE (GstGLDisplayWayland, gst_gl_display_wayland, -+ GST_TYPE_GL_DISPLAY); -+ -+static void gst_gl_display_wayland_finalize (GObject * object); -+static guintptr gst_gl_display_wayland_get_handle (GstGLDisplay * display); -+ -+static void -+registry_handle_global (void *data, struct wl_registry *registry, -+ uint32_t name, const char *interface, uint32_t version) -+{ -+ GstGLDisplayWayland *display = data; -+ -+ GST_TRACE_OBJECT (display, "registry_handle_global with registry %p, " -+ "interface %s, version %u", registry, interface, version); -+ -+ if (g_strcmp0 (interface, "wl_compositor") == 0) { -+ display->compositor = -+ wl_registry_bind (registry, name, &wl_compositor_interface, 1); -+ } else if (g_strcmp0 (interface, "wl_shell") == 0) { -+ display->shell = wl_registry_bind (registry, name, &wl_shell_interface, 1); -+ } -+} -+ -+static const struct wl_registry_listener registry_listener = { -+ registry_handle_global -+}; -+ -+static void -+_connect_listeners (GstGLDisplayWayland * display) -+{ -+ display->registry = wl_display_get_registry (display->display); -+ wl_registry_add_listener (display->registry, ®istry_listener, display); -+ -+ wl_display_roundtrip (display->display); -+} -+ -+static void -+gst_gl_display_wayland_class_init (GstGLDisplayWaylandClass * klass) -+{ -+ GST_GL_DISPLAY_CLASS (klass)->get_handle = -+ GST_DEBUG_FUNCPTR (gst_gl_display_wayland_get_handle); -+ -+ G_OBJECT_CLASS (klass)->finalize = gst_gl_display_wayland_finalize; -+} -+ -+static void -+gst_gl_display_wayland_init (GstGLDisplayWayland * display_wayland) -+{ -+ GstGLDisplay *display = (GstGLDisplay *) display_wayland; -+ -+ display->type = GST_GL_DISPLAY_TYPE_WAYLAND; -+ display_wayland->foreign_display = FALSE; -+} -+ -+static void -+gst_gl_display_wayland_finalize (GObject * object) -+{ -+ GstGLDisplayWayland *display_wayland = GST_GL_DISPLAY_WAYLAND (object); -+ -+ if (!display_wayland->foreign_display && display_wayland->display) { -+ wl_display_flush (display_wayland->display); -+ wl_display_disconnect (display_wayland->display); -+ } -+ -+ G_OBJECT_CLASS (gst_gl_display_wayland_parent_class)->finalize (object); -+} -+ -+/** -+ * gst_gl_display_wayland_new: -+ * @name: (allow-none): a display name -+ * -+ * Create a new #GstGLDisplayWayland from the wayland display name. See wl_display_connect() -+ * for details on what is a valid name. -+ * -+ * Returns: (transfer full): a new #GstGLDisplayWayland or %NULL -+ */ -+GstGLDisplayWayland * -+gst_gl_display_wayland_new (const gchar * name) -+{ -+ GstGLDisplayWayland *ret; -+ -+ GST_DEBUG_CATEGORY_GET (gst_gl_display_debug, "gldisplay"); -+ -+ ret = g_object_new (GST_TYPE_GL_DISPLAY_WAYLAND, NULL); -+ ret->display = wl_display_connect (name); -+ -+ if (!ret->display) { -+ GST_ERROR ("Failed to open X11 display connection with name, \'%s\'", name); -+ return NULL; -+ } -+ -+ _connect_listeners (ret); -+ -+ return ret; -+} -+ -+/** -+ * gst_gl_display_wayland_new_with_display: -+ * @display: an existing, wayland display -+ * -+ * Creates a new display connection from a wl_display Display. -+ * -+ * Returns: (transfer full): a new #GstGLDisplayWayland -+ */ -+GstGLDisplayWayland * -+gst_gl_display_wayland_new_with_display (struct wl_display * display) -+{ -+ GstGLDisplayWayland *ret; -+ -+ g_return_val_if_fail (display != NULL, NULL); -+ -+ GST_DEBUG_CATEGORY_GET (gst_gl_display_debug, "gldisplay"); -+ -+ ret = g_object_new (GST_TYPE_GL_DISPLAY_WAYLAND, NULL); -+ -+ ret->display = display; -+ ret->foreign_display = TRUE; -+ -+ _connect_listeners (ret); -+ -+ return ret; -+} -+ -+static guintptr -+gst_gl_display_wayland_get_handle (GstGLDisplay * display) -+{ -+ return (guintptr) GST_GL_DISPLAY_WAYLAND (display)->display; -+} -diff --git a/gst-libs/gst/gl/wayland/gstgldisplay_wayland.h b/gst-libs/gst/gl/wayland/gstgldisplay_wayland.h -new file mode 100644 -index 0000000..67b3883 ---- /dev/null -+++ b/gst-libs/gst/gl/wayland/gstgldisplay_wayland.h -@@ -0,0 +1,74 @@ -+/* -+ * GStreamer -+ * Copyright (C) 2013 Matthew Waters -+ * -+ * 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_DISPLAY_WAYLAND_H__ -+#define __GST_GL_DISPLAY_WAYLAND_H__ -+ -+#include -+ -+#include -+ -+#include -+#include -+ -+G_BEGIN_DECLS -+ -+GType gst_gl_display_wayland_get_type (void); -+ -+#define GST_TYPE_GL_DISPLAY_WAYLAND (gst_gl_display_wayland_get_type()) -+#define GST_GL_DISPLAY_WAYLAND(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_DISPLAY_WAYLAND,GstGLDisplayWayland)) -+#define GST_GL_DISPLAY_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_GL_DISPLAY_WAYLAND,GstGLDisplayWaylandClass)) -+#define GST_IS_GL_DISPLAY_WAYLAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_DISPLAY_WAYLAND)) -+#define GST_IS_GL_DISPLAY_WAYLAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_GL_DISPLAY_WAYLAND)) -+#define GST_GL_DISPLAY_WAYLAND_CAST(obj) ((GstGLDisplayWayland*)(obj)) -+ -+typedef struct _GstGLDisplayWayland GstGLDisplayWayland; -+typedef struct _GstGLDisplayWaylandClass GstGLDisplayWaylandClass; -+ -+/** -+ * GstGLDisplayWayland: -+ * -+ * the contents of a #GstGLDisplayWayland are private and should only be accessed -+ * through the provided API -+ */ -+struct _GstGLDisplayWayland -+{ -+ GstGLDisplay parent; -+ -+ struct wl_display *display; -+ struct wl_registry *registry; -+ struct wl_compositor *compositor; -+ struct wl_shell *shell; -+ -+ /* */ -+ gboolean foreign_display; -+}; -+ -+struct _GstGLDisplayWaylandClass -+{ -+ GstGLDisplayClass object_class; -+}; -+ -+GstGLDisplayWayland *gst_gl_display_wayland_new (const gchar * name); -+GstGLDisplayWayland *gst_gl_display_wayland_new_with_display (struct wl_display *display); -+ -+G_END_DECLS -+ -+#endif /* __GST_GL_DISPLAY_WAYLAND_H__ */ -diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c -index 5d9b457..f1dd0d0 100644 ---- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c -+++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c -@@ -32,6 +32,7 @@ - #include "../gstgl_fwd.h" - #include - -+#include "gstgldisplay_wayland.h" - #include "gstglwindow_wayland_egl.h" - - const gchar *WlEGLErrorString (); -@@ -41,13 +42,13 @@ const gchar *WlEGLErrorString (); - #define gst_gl_window_wayland_egl_parent_class parent_class - G_DEFINE_TYPE (GstGLWindowWaylandEGL, gst_gl_window_wayland_egl, - GST_GL_TYPE_WINDOW); -+static void gst_gl_window_wayland_egl_finalize (GObject * object); - - static guintptr gst_gl_window_wayland_egl_get_window_handle (GstGLWindow * - window); - static void gst_gl_window_wayland_egl_set_window_handle (GstGLWindow * window, - guintptr handle); --static void gst_gl_window_wayland_egl_draw (GstGLWindow * window, guint width, -- guint height); -+static void gst_gl_window_wayland_egl_draw (GstGLWindow * window, guint width, guint height); - static void gst_gl_window_wayland_egl_run (GstGLWindow * window); - static void gst_gl_window_wayland_egl_quit (GstGLWindow * window); - static void gst_gl_window_wayland_egl_send_message_async (GstGLWindow * window, -@@ -57,6 +58,7 @@ static gboolean gst_gl_window_wayland_egl_open (GstGLWindow * window, - GError ** error); - static guintptr gst_gl_window_wayland_egl_get_display (GstGLWindow * window); - -+#if 0 - static void - pointer_handle_enter (void *data, struct wl_pointer *pointer, uint32_t serial, - struct wl_surface *surface, wl_fixed_t sx_w, wl_fixed_t sy_w) -@@ -149,11 +151,15 @@ seat_handle_capabilities (void *data, struct wl_seat *seat, - static const struct wl_seat_listener seat_listener = { - seat_handle_capabilities, - }; -- -+#endif - static void - handle_ping (void *data, struct wl_shell_surface *shell_surface, - uint32_t serial) - { -+ GstGLWindowWaylandEGL *window_egl = data; -+ -+ GST_TRACE_OBJECT (window_egl, "ping received serial %u", serial); -+ - wl_shell_surface_pong (shell_surface, serial); - } - -@@ -166,7 +172,8 @@ handle_configure (void *data, struct wl_shell_surface *shell_surface, - { - GstGLWindowWaylandEGL *window_egl = data; - -- GST_DEBUG ("configure event %ix%i", width, height); -+ GST_DEBUG ("configure event on surface %p, %ix%i", shell_surface, width, -+ height); - - window_resize (window_egl, width, height); - } -@@ -185,11 +192,13 @@ static const struct wl_shell_surface_listener shell_surface_listener = { - static gboolean - create_surface (GstGLWindowWaylandEGL * window_egl) - { -+ GstGLDisplayWayland *display = -+ GST_GL_DISPLAY_WAYLAND (GST_GL_WINDOW (window_egl)->display); -+ - window_egl->window.surface = -- wl_compositor_create_surface (window_egl->display.compositor); -+ wl_compositor_create_surface (display->compositor); - window_egl->window.shell_surface = -- wl_shell_get_shell_surface (window_egl->display.shell, -- window_egl->window.surface); -+ wl_shell_get_shell_surface (display->shell, window_egl->window.surface); - - wl_shell_surface_add_listener (window_egl->window.shell_surface, - &shell_surface_listener, window_egl); -@@ -225,46 +234,13 @@ destroy_surface (GstGLWindowWaylandEGL * window_egl) - - if (window_egl->window.callback) - wl_callback_destroy (window_egl->window.callback); -- -- g_source_destroy (window_egl->wl_source); -- g_source_unref (window_egl->wl_source); -- window_egl->wl_source = NULL; -- g_main_loop_unref (window_egl->loop); -- window_egl->loop = NULL, g_main_context_unref (window_egl->main_context); -- window_egl->main_context = NULL; --} -- --static void --registry_handle_global (void *data, struct wl_registry *registry, -- uint32_t name, const char *interface, uint32_t version) --{ -- GstGLWindowWaylandEGL *window_egl = data; -- struct display *d = &window_egl->display; -- -- if (g_strcmp0 (interface, "wl_compositor") == 0) { -- d->compositor = -- wl_registry_bind (registry, name, &wl_compositor_interface, 1); -- } else if (g_strcmp0 (interface, "wl_shell") == 0) { -- d->shell = wl_registry_bind (registry, name, &wl_shell_interface, 1); -- } else if (g_strcmp0 (interface, "wl_seat") == 0) { -- d->seat = wl_registry_bind (registry, name, &wl_seat_interface, 1); -- wl_seat_add_listener (d->seat, &seat_listener, window_egl); -- } else if (g_strcmp0 (interface, "wl_shm") == 0) { -- d->shm = wl_registry_bind (registry, name, &wl_shm_interface, 1); -- d->cursor_theme = wl_cursor_theme_load (NULL, 32, d->shm); -- d->default_cursor = -- wl_cursor_theme_get_cursor (d->cursor_theme, "left_ptr"); -- } - } - --static const struct wl_registry_listener registry_listener = { -- registry_handle_global --}; -- - static void - gst_gl_window_wayland_egl_class_init (GstGLWindowWaylandEGLClass * klass) - { - GstGLWindowClass *window_class = (GstGLWindowClass *) klass; -+ GObjectClass *gobject_class = (GObjectClass *) klass; - - window_class->get_window_handle = - GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_get_window_handle); -@@ -281,11 +257,26 @@ gst_gl_window_wayland_egl_class_init (GstGLWindowWaylandEGLClass * klass) - window_class->open = GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_open); - window_class->get_display = - GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_get_display); -+ -+ gobject_class->finalize = gst_gl_window_wayland_egl_finalize; - } - - static void - gst_gl_window_wayland_egl_init (GstGLWindowWaylandEGL * window) - { -+ window->main_context = g_main_context_new (); -+ window->loop = g_main_loop_new (window->main_context, FALSE); -+} -+ -+static void -+gst_gl_window_wayland_egl_finalize (GObject * object) -+{ -+ GstGLWindowWaylandEGL *window_egl = GST_GL_WINDOW_WAYLAND_EGL (object); -+ -+ g_main_loop_unref (window_egl->loop); -+ g_main_context_unref (window_egl->main_context); -+ -+ G_OBJECT_CLASS (parent_class)->finalize (object); - } - - /* Must be called in the gl thread */ -@@ -310,60 +301,33 @@ gst_gl_window_wayland_egl_close (GstGLWindow * window) - - destroy_surface (window_egl); - -- if (window_egl->display.cursor_surface) -- wl_surface_destroy (window_egl->display.cursor_surface); -- -- if (window_egl->display.cursor_theme) -- wl_cursor_theme_destroy (window_egl->display.cursor_theme); -- -- if (window_egl->display.shell) -- wl_shell_destroy (window_egl->display.shell); -- -- if (window_egl->display.compositor) -- wl_compositor_destroy (window_egl->display.compositor); -- -- if (window_egl->display.display) { -- wl_display_flush (window_egl->display.display); -- wl_display_disconnect (window_egl->display.display); -- } -+ g_source_destroy (window_egl->wl_source); -+ g_source_unref (window_egl->wl_source); -+ window_egl->wl_source = NULL; - } - - static gboolean - gst_gl_window_wayland_egl_open (GstGLWindow * window, GError ** error) - { -+ GstGLDisplayWayland *display = GST_GL_DISPLAY_WAYLAND (window->display); - GstGLWindowWaylandEGL *window_egl = GST_GL_WINDOW_WAYLAND_EGL (window); - -- window_egl->display.display = wl_display_connect (NULL); -- if (!window_egl->display.display) { -+ if (!display->display) { - g_set_error (error, GST_GL_WINDOW_ERROR, - GST_GL_WINDOW_ERROR_RESOURCE_UNAVAILABLE, -- "Failed to connect to Wayland display server"); -- goto error; -+ "Failed to retreive Wayland display"); -+ return FALSE; - } - -- window_egl->display.registry = -- wl_display_get_registry (window_egl->display.display); -- wl_registry_add_listener (window_egl->display.registry, ®istry_listener, -- window_egl); -- -- wl_display_dispatch (window_egl->display.display); -+ wl_display_roundtrip (display->display); - - create_surface (window_egl); - -- window_egl->display.cursor_surface = -- wl_compositor_create_surface (window_egl->display.compositor); -- -- window_egl->wl_source = -- wayland_event_source_new (window_egl->display.display); -- window_egl->main_context = g_main_context_new (); -- window_egl->loop = g_main_loop_new (window_egl->main_context, FALSE); -+ window_egl->wl_source = wayland_event_source_new (display->display); - - g_source_attach (window_egl->wl_source, window_egl->main_context); - - return TRUE; -- --error: -- return FALSE; - } - - static void -@@ -461,11 +425,6 @@ window_resize (GstGLWindowWaylandEGL * window_egl, guint width, guint height) - - window_egl->window.window_width = width; - window_egl->window.window_height = height; -- --#if 0 -- wl_shell_surface_resize (window_egl->window.shell_surface, -- window_egl->display.seat, window_egl->display.serial, 0); --#endif - } - - struct draw -@@ -520,9 +479,7 @@ gst_gl_window_wayland_egl_draw (GstGLWindow * window, guint width, guint height) - static guintptr - gst_gl_window_wayland_egl_get_display (GstGLWindow * window) - { -- GstGLWindowWaylandEGL *window_egl; -- -- window_egl = GST_GL_WINDOW_WAYLAND_EGL (window); -+ GstGLDisplayWayland *display = GST_GL_DISPLAY_WAYLAND (window->display); - -- return (guintptr) window_egl->display.display; -+ return (guintptr) display->display; - } --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0014-opencv-rename-gstopencv.c-to-gstopencv.cpp.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0014-opencv-rename-gstopencv.c-to-gstopencv.cpp.patch deleted file mode 100644 index 69fc420ca..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0014-opencv-rename-gstopencv.c-to-gstopencv.cpp.patch +++ /dev/null @@ -1,351 +0,0 @@ -From b3a9be129e25b9c84b2a056b6c9fad50d6b60c88 Mon Sep 17 00:00:00 2001 -From: Song Bing -Date: Mon, 1 Jun 2015 14:52:45 +0800 -Subject: [PATCH 1/2] opencv: rename gstopencv.c to gstopencv.cpp -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -As Open CV plugin will include many Open CV C++ head files. - -Upstream Status: Waiting for review. - -https://bugzilla.gnome.org/show_bug.cgi?id=751203 ---- - ext/opencv/Makefile.am | 2 +- - ext/opencv/gstopencv.c | 113 ----------------------------------------- - ext/opencv/gstopencv.cpp | 113 +++++++++++++++++++++++++++++++++++++++++ - ext/opencv/gsttemplatematch.c | 14 ++--- - ext/opencv/gsttemplatematch.h | 2 +- - 5 files changed, 122 insertions(+), 122 deletions(-) - delete mode 100644 ext/opencv/gstopencv.c - create mode 100644 ext/opencv/gstopencv.cpp - -diff --git a/ext/opencv/Makefile.am b/ext/opencv/Makefile.am -index 3ba1c34..3c3418e 100644 ---- a/ext/opencv/Makefile.am -+++ b/ext/opencv/Makefile.am -@@ -1,7 +1,7 @@ - plugin_LTLIBRARIES = libgstopencv.la - - # sources used to compile this plug-in --libgstopencv_la_SOURCES = gstopencv.c \ -+libgstopencv_la_SOURCES = gstopencv.cpp \ - gstopencvvideofilter.c \ - gstopencvutils.c \ - gstcvdilate.c \ -diff --git a/ext/opencv/gstopencv.c b/ext/opencv/gstopencv.c -deleted file mode 100644 -index 3184518..0000000 ---- a/ext/opencv/gstopencv.c -+++ /dev/null -@@ -1,113 +0,0 @@ --/* GStreamer -- * Copyright (C) <2009> Kapil Agrawal -- * -- * gstopencv.c: plugin registering -- * -- * 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 "gstcvdilate.h" --#include "gstcvequalizehist.h" --#include "gstcverode.h" --#include "gstcvlaplace.h" --#include "gstcvsmooth.h" --#include "gstcvsobel.h" --#include "gstedgedetect.h" --#include "gstfaceblur.h" --#include "gstfacedetect.h" --#include "gstmotioncells.h" --#include "gstpyramidsegment.h" --#include "gsttemplatematch.h" --#include "gsttextoverlay.h" --#include "gsthanddetect.h" --#include "gstskindetect.h" --#include "gstretinex.h" --#include "gstsegmentation.h" --#include "gstgrabcut.h" --#include "gstdisparity.h" -- --static gboolean --plugin_init (GstPlugin * plugin) --{ -- if (!gst_cv_dilate_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_cv_equalize_hist_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_cv_erode_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_cv_laplace_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_cv_smooth_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_cv_sobel_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_edge_detect_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_face_blur_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_face_detect_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_motion_cells_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_pyramid_segment_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_template_match_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_opencv_text_overlay_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_handdetect_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_skin_detect_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_retinex_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_segmentation_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_grabcut_plugin_init (plugin)) -- return FALSE; -- -- if (!gst_disparity_plugin_init (plugin)) -- return FALSE; -- -- return TRUE; --} -- --GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, -- GST_VERSION_MINOR, -- opencv, -- "GStreamer OpenCV Plugins", -- plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN) -diff --git a/ext/opencv/gstopencv.cpp b/ext/opencv/gstopencv.cpp -new file mode 100644 -index 0000000..3184518 ---- /dev/null -+++ b/ext/opencv/gstopencv.cpp -@@ -0,0 +1,113 @@ -+/* GStreamer -+ * Copyright (C) <2009> Kapil Agrawal -+ * -+ * gstopencv.c: plugin registering -+ * -+ * 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 "gstcvdilate.h" -+#include "gstcvequalizehist.h" -+#include "gstcverode.h" -+#include "gstcvlaplace.h" -+#include "gstcvsmooth.h" -+#include "gstcvsobel.h" -+#include "gstedgedetect.h" -+#include "gstfaceblur.h" -+#include "gstfacedetect.h" -+#include "gstmotioncells.h" -+#include "gstpyramidsegment.h" -+#include "gsttemplatematch.h" -+#include "gsttextoverlay.h" -+#include "gsthanddetect.h" -+#include "gstskindetect.h" -+#include "gstretinex.h" -+#include "gstsegmentation.h" -+#include "gstgrabcut.h" -+#include "gstdisparity.h" -+ -+static gboolean -+plugin_init (GstPlugin * plugin) -+{ -+ if (!gst_cv_dilate_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_cv_equalize_hist_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_cv_erode_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_cv_laplace_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_cv_smooth_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_cv_sobel_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_edge_detect_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_face_blur_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_face_detect_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_motion_cells_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_pyramid_segment_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_template_match_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_opencv_text_overlay_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_handdetect_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_skin_detect_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_retinex_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_segmentation_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_grabcut_plugin_init (plugin)) -+ return FALSE; -+ -+ if (!gst_disparity_plugin_init (plugin)) -+ return FALSE; -+ -+ return TRUE; -+} -+ -+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, -+ GST_VERSION_MINOR, -+ opencv, -+ "GStreamer OpenCV Plugins", -+ plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN) -diff --git a/ext/opencv/gsttemplatematch.c b/ext/opencv/gsttemplatematch.c -index 507b218..12c92cd 100644 ---- a/ext/opencv/gsttemplatematch.c -+++ b/ext/opencv/gsttemplatematch.c -@@ -176,7 +176,7 @@ gst_template_match_init (GstTemplateMatch * filter) - - gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad); - gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad); -- filter->template = NULL; -+ filter->templatename = NULL; - filter->display = TRUE; - filter->cvTemplateImage = NULL; - filter->cvDistImage = NULL; -@@ -215,7 +215,7 @@ gst_template_match_set_property (GObject * object, guint prop_id, - } - break; - case PROP_TEMPLATE: -- filter->template = (char *) g_value_get_string (value); -+ filter->templatename = (char *) g_value_get_string (value); - gst_template_match_load_template (filter); - break; - case PROP_DISPLAY: -@@ -238,7 +238,7 @@ gst_template_match_get_property (GObject * object, guint prop_id, - g_value_set_int (value, filter->method); - break; - case PROP_TEMPLATE: -- g_value_set_string (value, filter->template); -+ g_value_set_string (value, filter->templatename); - break; - case PROP_DISPLAY: - g_value_set_boolean (value, filter->display); -@@ -321,7 +321,7 @@ gst_template_match_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) - - /* FIXME Why template == NULL returns OK? - * shouldn't it be a passthrough instead? */ -- if ((!filter) || (!buf) || filter->template == NULL) { -+ if ((!filter) || (!buf) || filter->templatename == NULL) { - return GST_FLOW_OK; - } - GST_LOG_OBJECT (filter, "Buffer size %u", (guint) gst_buffer_get_size (buf)); -@@ -410,17 +410,17 @@ gst_template_match_match (IplImage * input, IplImage * template, - static void - gst_template_match_load_template (GstTemplateMatch * filter) - { -- if (filter->template) { -+ if (filter->templatename) { - - if (filter->cvTemplateImage) { - cvReleaseImage (&filter->cvTemplateImage); - } - filter->cvTemplateImage = -- cvLoadImage (filter->template, CV_LOAD_IMAGE_COLOR); -+ cvLoadImage (filter->templatename, CV_LOAD_IMAGE_COLOR); - - if (!filter->cvTemplateImage) { - GST_WARNING ("Couldn't load template image: %s. error: %s", -- filter->template, g_strerror (errno)); -+ filter->templatename, g_strerror (errno)); - } - } - } -diff --git a/ext/opencv/gsttemplatematch.h b/ext/opencv/gsttemplatematch.h -index 6b67000..4a716d8 100644 ---- a/ext/opencv/gsttemplatematch.h -+++ b/ext/opencv/gsttemplatematch.h -@@ -79,7 +79,7 @@ struct _GstTemplateMatch - gint method; - gboolean display; - -- gchar *template; -+ gchar *templatename; - - IplImage *cvImage, *cvGray, *cvTemplateImage, *cvDistImage; - }; --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0016-PATCH-gstaggregator-memory-leak-increasing-a-lot-aft.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0016-PATCH-gstaggregator-memory-leak-increasing-a-lot-aft.patch deleted file mode 100644 index 9e29d6be0..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0016-PATCH-gstaggregator-memory-leak-increasing-a-lot-aft.patch +++ /dev/null @@ -1,323 +0,0 @@ -From d7a28c5c7edcbceb13d35577d61a466ba750b3d9 Mon Sep 17 00:00:00 2001 -From: Mingke Wang -Date: Wed, 8 Jul 2015 15:34:57 +0800 -Subject: [PATCH] [PATCH] gstaggregator: memory leak increasing a lot after - overnight - -this patch picks from community fix: - -aggregator: Replace GMainContext with GAsyncQueue (v2) -The previous implementation kept accumulating GSources, -slowing down the iteration and leaking memory. - -Instead of trying to fix the main context flushing, replace -it with a GAsyncQueue which is simple to flush and has -less overhead. - -https://bugzilla.gnome.org/show_bug.cgi?id=736782 - -Upstream Status: Backport - -Signed-off-by: Mingke Wang - -diff --git a/gst-libs/gst/base/gstaggregator.c b/gst-libs/gst/base/gstaggregator.c -old mode 100644 -new mode 100755 -index e12ed93..47eb1e7 ---- a/gst-libs/gst/base/gstaggregator.c -+++ b/gst-libs/gst/base/gstaggregator.c -@@ -106,6 +106,48 @@ GST_DEBUG_CATEGORY_STATIC (aggregator_debug); - g_cond_broadcast(&(((GstAggregatorPad* )pad)->priv->event_cond)); \ - } - -+#define GST_AGGREGATOR_SETCAPS_LOCK(self) G_STMT_START { \ -+ GST_LOG_OBJECT (self, "Taking SETCAPS lock from thread %p", \ -+ g_thread_self()); \ -+ g_mutex_lock(&self->priv->setcaps_lock); \ -+ GST_LOG_OBJECT (self, "Took SETCAPS lock from thread %p", \ -+ g_thread_self()); \ -+ } G_STMT_END -+ -+#define GST_AGGREGATOR_SETCAPS_UNLOCK(self) G_STMT_START { \ -+ GST_LOG_OBJECT (self, "Releasing SETCAPS lock from thread %p", \ -+ g_thread_self()); \ -+ g_mutex_unlock(&self->priv->setcaps_lock); \ -+ GST_LOG_OBJECT (self, "Took SETCAPS lock from thread %p", \ -+ g_thread_self()); \ -+ } G_STMT_END -+ -+#define AGGREGATOR_QUEUE(self) (((GstAggregator*)self)->priv->queue) -+ -+#define QUEUE_PUSH(self) G_STMT_START { \ -+ GST_LOG_OBJECT (self, "Pushing to QUEUE in thread %p", \ -+ g_thread_self()); \ -+ g_async_queue_push (AGGREGATOR_QUEUE (self), GINT_TO_POINTER (1)); \ -+} G_STMT_END -+ -+#define QUEUE_POP(self) G_STMT_START { \ -+ GST_LOG_OBJECT (self, "Waiting on QUEUE in thread %p", \ -+ g_thread_self()); \ -+ g_async_queue_pop (AGGREGATOR_QUEUE (self)); \ -+ GST_LOG_OBJECT (self, "Waited on QUEUE in thread %p", \ -+ g_thread_self()); \ -+ } G_STMT_END -+ -+#define QUEUE_FLUSH(self) G_STMT_START { \ -+ GST_LOG_OBJECT (self, "Flushing QUEUE in thread %p", \ -+ g_thread_self()); \ -+ g_async_queue_lock (AGGREGATOR_QUEUE (self)); \ -+ while (g_async_queue_try_pop_unlocked (AGGREGATOR_QUEUE (self))); \ -+ g_async_queue_unlock (AGGREGATOR_QUEUE (self)); \ -+ GST_LOG_OBJECT (self, "Flushed QUEUE in thread %p", \ -+ g_thread_self()); \ -+ } G_STMT_END -+ - struct _GstAggregatorPadPrivate - { - gboolean pending_flush_start; -@@ -136,35 +178,15 @@ _aggpad_flush (GstAggregatorPad * aggpad, GstAggregator * agg) - *************************************/ - static GstElementClass *aggregator_parent_class = NULL; - --#define MAIN_CONTEXT_LOCK(self) G_STMT_START { \ -- GST_LOG_OBJECT (self, "Getting MAIN_CONTEXT_LOCK in thread %p", \ -- g_thread_self()); \ -- g_mutex_lock(&((GstAggregator*)self)->priv->mcontext_lock); \ -- GST_LOG_OBJECT (self, "Got MAIN_CONTEXT_LOCK in thread %p", \ -- g_thread_self()); \ --} G_STMT_END -- --#define MAIN_CONTEXT_UNLOCK(self) G_STMT_START { \ -- g_mutex_unlock(&((GstAggregator*)self)->priv->mcontext_lock); \ -- GST_LOG_OBJECT (self, "Unlocked MAIN_CONTEXT_LOCK in thread %p", \ -- g_thread_self()); \ --} G_STMT_END -- - struct _GstAggregatorPrivate - { - gint padcount; - -- GMainContext *mcontext; -+ GAsyncQueue *queue; - - /* Our state is >= PAUSED */ - gboolean running; - -- /* Ensure that when we remove all sources from the maincontext -- * we can not add any source, avoiding: -- * "g_source_attach: assertion '!SOURCE_DESTROYED (source)' failed" */ -- GMutex mcontext_lock; -- GList *gsources; -- - gint seqnum; - gboolean send_stream_start; - gboolean send_segment; -@@ -177,6 +199,9 @@ struct _GstAggregatorPrivate - - GstTagList *tags; - gboolean tags_changed; -+ -+ /* Lock to prevent two src setcaps from happening at the same time */ -+ GMutex setcaps_lock; - }; - - typedef struct -@@ -287,7 +312,9 @@ _check_all_pads_with_data_or_eos (GstAggregator * self, - void - gst_aggregator_set_src_caps (GstAggregator * self, GstCaps * caps) - { -+ GST_AGGREGATOR_SETCAPS_LOCK (self); - gst_caps_replace (&self->priv->srccaps, caps); -+ GST_AGGREGATOR_SETCAPS_UNLOCK (self); - } - - static void -@@ -390,29 +417,19 @@ _push_eos (GstAggregator * self) - - - static void --_destroy_gsource (GSource * source) --{ -- g_source_destroy (source); -- g_source_unref (source); --} -- --static void --_remove_all_sources (GstAggregator * self) --{ -- GstAggregatorPrivate *priv = self->priv; -- -- MAIN_CONTEXT_LOCK (self); -- g_list_free_full (priv->gsources, (GDestroyNotify) _destroy_gsource); -- priv->gsources = NULL; -- MAIN_CONTEXT_UNLOCK (self); --} -- --static gboolean - aggregate_func (GstAggregator * self) - { - GstAggregatorPrivate *priv = self->priv; - GstAggregatorClass *klass = GST_AGGREGATOR_GET_CLASS (self); - -+ if (self->priv->running == FALSE) { -+ GST_DEBUG_OBJECT (self, "Not running anymore"); -+ -+ return; -+ } -+ -+ QUEUE_POP (self); -+ - GST_LOG_OBJECT (self, "Checking aggregate"); - while (priv->send_eos && gst_aggregator_iterate_sinkpads (self, - (GstAggregatorPadForeachFunc) _check_all_pads_with_data_or_eos, -@@ -422,8 +439,7 @@ aggregate_func (GstAggregator * self) - priv->flow_return = klass->aggregate (self); - - if (priv->flow_return == GST_FLOW_EOS) { -- g_main_context_wakeup (self->priv->mcontext); -- _remove_all_sources (self); -+ QUEUE_FLUSH (self); - _push_eos (self); - } - -@@ -437,20 +453,6 @@ aggregate_func (GstAggregator * self) - if (priv->flow_return != GST_FLOW_OK) - break; - } -- -- return G_SOURCE_REMOVE; --} -- --static void --iterate_main_context_func (GstAggregator * self) --{ -- if (self->priv->running == FALSE) { -- GST_DEBUG_OBJECT (self, "Not running anymore"); -- -- return; -- } -- -- g_main_context_iteration (self->priv->mcontext, TRUE); - } - - static gboolean -@@ -481,15 +483,14 @@ _stop_srcpad_task (GstAggregator * self, GstEvent * flush_start) - flush_start ? "Pausing" : "Stopping"); - - self->priv->running = FALSE; -+ QUEUE_PUSH (self); - -- /* Clean the stack of GSource set on the MainContext */ -- g_main_context_wakeup (self->priv->mcontext); -- _remove_all_sources (self); - if (flush_start) { - res = gst_pad_push_event (self->srcpad, flush_start); - } - - gst_pad_stop_task (self->srcpad); -+ QUEUE_FLUSH (self); - - return res; - } -@@ -501,21 +502,7 @@ _start_srcpad_task (GstAggregator * self) - - self->priv->running = TRUE; - gst_pad_start_task (GST_PAD (self->srcpad), -- (GstTaskFunction) iterate_main_context_func, self, NULL); --} -- --static inline void --_add_aggregate_gsource (GstAggregator * self) --{ -- GSource *source; -- GstAggregatorPrivate *priv = self->priv; -- -- MAIN_CONTEXT_LOCK (self); -- source = g_idle_source_new (); -- g_source_set_callback (source, (GSourceFunc) aggregate_func, self, NULL); -- priv->gsources = g_list_prepend (priv->gsources, source); -- g_source_attach (source, priv->mcontext); -- MAIN_CONTEXT_UNLOCK (self); -+ (GstTaskFunction) aggregate_func, self, NULL); - } - - static GstFlowReturn -@@ -617,7 +604,7 @@ _sink_event (GstAggregator * self, GstAggregatorPad * aggpad, GstEvent * event) - gst_pad_push_event (self->srcpad, event); - priv->send_eos = TRUE; - event = NULL; -- _add_aggregate_gsource (self); -+ QUEUE_PUSH (self); - - GST_INFO_OBJECT (self, "Releasing source pad STREAM_LOCK"); - GST_PAD_STREAM_UNLOCK (self->srcpad); -@@ -645,7 +632,7 @@ _sink_event (GstAggregator * self, GstAggregatorPad * aggpad, GstEvent * event) - } - PAD_UNLOCK_EVENT (aggpad); - -- _add_aggregate_gsource (self); -+ QUEUE_PUSH (self); - goto eat; - } - case GST_EVENT_SEGMENT: -@@ -769,7 +756,7 @@ _release_pad (GstElement * element, GstPad * pad) - gst_element_remove_pad (element, pad); - - /* Something changed make sure we try to aggregate */ -- _add_aggregate_gsource (self); -+ QUEUE_PUSH (self); - } - - static GstPad * -@@ -1055,7 +1042,7 @@ gst_aggregator_finalize (GObject * object) - { - GstAggregator *self = (GstAggregator *) object; - -- g_mutex_clear (&self->priv->mcontext_lock); -+ g_mutex_clear (&self->priv->setcaps_lock); - - G_OBJECT_CLASS (aggregator_parent_class)->finalize (object); - } -@@ -1067,8 +1054,10 @@ gst_aggregator_dispose (GObject * object) - - G_OBJECT_CLASS (aggregator_parent_class)->dispose (object); - -- g_main_context_unref (self->priv->mcontext); -- _remove_all_sources (self); -+ if (AGGREGATOR_QUEUE (self)) { -+ g_async_queue_unref (AGGREGATOR_QUEUE (self)); -+ AGGREGATOR_QUEUE (self) = NULL; -+ } - } - - /* GObject vmethods implementations */ -@@ -1124,7 +1113,7 @@ gst_aggregator_init (GstAggregator * self, GstAggregatorClass * klass) - priv->tags_changed = FALSE; - _reset_flow_values (self); - -- priv->mcontext = g_main_context_new (); -+ AGGREGATOR_QUEUE (self) = g_async_queue_new (); - self->srcpad = gst_pad_new_from_template (pad_template, "src"); - - gst_pad_set_event_function (self->srcpad, -@@ -1136,7 +1125,7 @@ gst_aggregator_init (GstAggregator * self, GstAggregatorClass * klass) - - gst_element_add_pad (GST_ELEMENT (self), self->srcpad); - -- g_mutex_init (&self->priv->mcontext_lock); -+ g_mutex_init (&self->priv->setcaps_lock); - } - - /* we can't use G_DEFINE_ABSTRACT_TYPE because we need the klass in the _init -@@ -1205,7 +1194,7 @@ _chain (GstPad * pad, GstObject * object, GstBuffer * buffer) - aggpad->buffer = actual_buf; - PAD_UNLOCK_EVENT (aggpad); - -- _add_aggregate_gsource (self); -+ QUEUE_PUSH (self); - - GST_DEBUG_OBJECT (aggpad, "Done chaining"); - --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0017-MMFMWK-6778-Support-more-format-in-direct-viv.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0017-MMFMWK-6778-Support-more-format-in-direct-viv.patch deleted file mode 100644 index 3a6412ca0..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0017-MMFMWK-6778-Support-more-format-in-direct-viv.patch +++ /dev/null @@ -1,56 +0,0 @@ -From a639dc1c5bd4e5ff6f3c98995149f556e8528985 Mon Sep 17 00:00:00 2001 -From: Jian Li -Date: Tue, 4 Aug 2015 17:11:17 +0800 -Subject: [PATCH] MMFMWK-6778 Support more format in direct viv -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Supports I420, YV12, NV12, NV21, YUY2, UYVY, - RGBA, BGRA, RGB16 - -Upstream-Status: Inappropriate [i.MX specific] - -Signed-off-by: Jian Li ---- - gst-libs/gst/gl/gstglvivdirecttexture.c | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) - -diff --git a/gst-libs/gst/gl/gstglvivdirecttexture.c b/gst-libs/gst/gl/gstglvivdirecttexture.c -index 9131101..c19b617 100644 ---- a/gst-libs/gst/gl/gstglvivdirecttexture.c -+++ b/gst-libs/gst/gl/gstglvivdirecttexture.c -@@ -105,12 +105,30 @@ gst_gl_viv_direct_bind_gstbuffer (GstGLContext * context, guint tex_id, GstVideo - case GST_VIDEO_FORMAT_I420: - viv_fmt = GL_VIV_I420; - break; -+ case GST_VIDEO_FORMAT_YV12: -+ viv_fmt = GL_VIV_YV12; -+ break; - case GST_VIDEO_FORMAT_NV12: - viv_fmt = GL_VIV_NV12; - break; -+ case GST_VIDEO_FORMAT_NV21: -+ viv_fmt = GL_VIV_NV21; -+ break; -+ case GST_VIDEO_FORMAT_YUY2: -+ viv_fmt = GL_VIV_YUY2; -+ break; -+ case GST_VIDEO_FORMAT_UYVY: -+ viv_fmt = GL_VIV_UYVY; -+ break; - case GST_VIDEO_FORMAT_RGBA: - viv_fmt = GL_RGBA; - break; -+ case GST_VIDEO_FORMAT_BGRA: -+ viv_fmt = GL_BGRA_EXT; -+ break; -+ case GST_VIDEO_FORMAT_RGB16: -+ viv_fmt = GL_RGB565_OES; -+ break; - default: - GST_ERROR ("Not supported format %d for viv direct texture upload.", fmt); - viv_fmt = GL_NONE; --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/1.4.5-Use-viv-direct-texture-to-bind-buffer.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/1.4.5-Use-viv-direct-texture-to-bind-buffer.patch deleted file mode 100644 index 27a27cd61..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/1.4.5-Use-viv-direct-texture-to-bind-buffer.patch +++ /dev/null @@ -1,266 +0,0 @@ -From 60e055de185f0d911ad2bbd4e842fb5b088530e2 Mon Sep 17 00:00:00 2001 -From: Jian -Date: Wed, 4 Mar 2015 16:41:53 +0800 -Subject: [PATCH] Use viv direct texture to bind buffer -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - - Use viv direct texture to bind physical continious - buffer with texture to avoid memory copy from video - buffer to texture to gain good performance. - - Upstream Status: Inappropriate [i.MX specific] - - Signed-off-by: Jian ---- - gst-libs/gst/gl/Makefile.am | 4 +- - gst-libs/gst/gl/gstglfilter.c | 8 +- - gst-libs/gst/gl/gstglupload.c | 10 ++- - gst-libs/gst/gl/gstglvivdirecttexture.c | 123 +++++++++++++++++++++++++++++++ - gst-libs/gst/gl/gstglvivdirecttexture.h | 34 +++++++++ - 5 files changed, 176 insertions(+), 3 deletions(-) - create mode 100644 gst-libs/gst/gl/gstglvivdirecttexture.c - create mode 100644 gst-libs/gst/gl/gstglvivdirecttexture.h - -diff --git a/gst-libs/gst/gl/Makefile.am b/gst-libs/gst/gl/Makefile.am -index ed35144..86bc439 100644 ---- a/gst-libs/gst/gl/Makefile.am -+++ b/gst-libs/gst/gl/Makefile.am -@@ -24,7 +24,8 @@ libgstgl_@GST_API_VERSION@_la_SOURCES = \ - gstglapi.c \ - gstglfeature.c \ - gstglutils.c \ -- gstglframebuffer.c -+ gstglframebuffer.c \ -+ gstglvivdirecttexture.c - - libgstgl_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/gl - libgstgl_@GST_API_VERSION@include_HEADERS = \ -@@ -44,6 +45,7 @@ libgstgl_@GST_API_VERSION@include_HEADERS = \ - gstglfeature.h \ - gstglutils.h \ - gstglframebuffer.h \ -+ gstglvivdirecttexture.h \ - gstgl_fwd.h \ - gl.h - -diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c -index 26bf3f9..eef4ec7 100644 ---- a/gst-libs/gst/gl/gstglfilter.c -+++ b/gst-libs/gst/gl/gstglfilter.c -@@ -1202,7 +1202,13 @@ gst_gl_filter_filter_texture (GstGLFilter * filter, GstBuffer * inbuf, - - if (!to_download) { - out_tex = *(guint *) out_frame.data[0]; -- } else { -+ } else if (gst_is_physical_buffer (outbuf)) { -+ GST_DEBUG ("Physical continious buffer, attempting viv direct texture binding"); -+ gst_gl_viv_direct_bind_gstbuffer (filter->context, filter->out_tex_id, &filter->out_info, outbuf); -+ to_download = FALSE; -+ out_tex = filter->out_tex_id; -+ } -+ else { - GST_LOG ("Output Buffer does not contain correct memory, " - "attempting to wrap for download"); - -diff --git a/gst-libs/gst/gl/gstglupload.c b/gst-libs/gst/gl/gstglupload.c -index ecf6ebb..38185bb 100644 ---- a/gst-libs/gst/gl/gstglupload.c -+++ b/gst-libs/gst/gl/gstglupload.c -@@ -68,7 +68,7 @@ struct _GstGLUploadPrivate - gboolean released; - }; - --GST_DEBUG_CATEGORY_STATIC (gst_gl_upload_debug); -+GST_DEBUG_CATEGORY (gst_gl_upload_debug); - #define GST_CAT_DEFAULT gst_gl_upload_debug - - #define DEBUG_INIT \ -@@ -307,6 +307,14 @@ gst_gl_upload_perform_with_buffer (GstGLUpload * upload, GstBuffer * buffer, - } - } - -+ GST_LOG_OBJECT (upload, "Attempting viv direct upload"); -+ if (gst_is_physical_buffer (buffer)) { -+ if (gst_gl_viv_direct_bind_gstbuffer (upload->context, upload->priv->tex_id, &upload->in_info, buffer)) { -+ *tex_id = upload->priv->tex_id; -+ return TRUE; -+ } -+ } -+ - raw_data_upload: - GST_LOG_OBJECT (upload, "Attempting upload with raw data"); - /* GstVideoMeta map */ -diff --git a/gst-libs/gst/gl/gstglvivdirecttexture.c b/gst-libs/gst/gl/gstglvivdirecttexture.c -new file mode 100644 -index 0000000..4806335 ---- /dev/null -+++ b/gst-libs/gst/gl/gstglvivdirecttexture.c -@@ -0,0 +1,123 @@ -+/* -+ * GStreamer -+ * Copyright (c) 2015, Freescale Semiconductor, Inc. -+ * -+ * 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 "gl.h" -+ -+GST_DEBUG_CATEGORY_EXTERN (gst_gl_upload_debug); -+#define GST_CAT_DEFAULT gst_gl_upload_debug -+ -+typedef struct { -+ guint tex_id; -+ guint w; -+ guint h; -+ guint fmt; -+ void *vaddr; -+ guint paddr; -+ gboolean ret; -+} GstVivDirectTexture; -+ -+gboolean -+gst_is_physical_buffer (GstBuffer *buffer) -+{ -+ -+ GstMemory *mem; -+ -+ mem = gst_buffer_peek_memory (buffer, 0); -+ if (!mem->allocator) -+ return FALSE; -+ -+ return g_type_check_instance_is_a (mem->allocator, g_type_from_name("GstAllocatorPhyMem")); -+} -+ -+static void -+_do_viv_direct_tex_bind_mem (GstGLContext * context, GstVivDirectTexture * viv_tex) -+{ -+ GST_DEBUG ("viv direct upload, tex_id %d, fmt: %d, res: (%dx%d)", viv_tex->tex_id, viv_tex->fmt, viv_tex->w, viv_tex->h); -+ GST_DEBUG ("Physical memory buffer, vaddr: %p, paddr: %p", viv_tex->vaddr, viv_tex->paddr); -+ -+ glBindTexture (GL_TEXTURE_2D, viv_tex->tex_id); -+ glTexDirectVIVMap (GL_TEXTURE_2D, viv_tex->w, viv_tex->h, viv_tex->fmt, &viv_tex->vaddr, &viv_tex->paddr); -+ glTexDirectInvalidateVIV (GL_TEXTURE_2D); -+ viv_tex->ret = TRUE; -+ -+ return; -+} -+ -+gboolean -+gst_gl_viv_direct_bind_gstbuffer (GstGLContext * context, guint tex_id, GstVideoInfo * info, GstBuffer * buffer) -+{ -+ typedef struct { -+ guint8 *vaddr; -+ guint8 *paddr; -+ guint8 *caddr; -+ gsize size; -+ gpointer *user_data; -+ } PhyMemBlock; -+ //Note: structure PhyMemBlock is copied from gst1.0-fsl-plugin/libs/allocator/gstallocatorphymem.h -+ -+ typedef struct { -+ GstMemory mem; -+ guint8 *vaddr; -+ guint8 *paddr; -+ PhyMemBlock block; -+ } GstMemoryPhy; -+ //Note: structure GstMemoryPhy is copied from gst1.0-fsl-plugin/libs/allocator/gstallocatorphymem.c -+ -+ GstMemory *mem = gst_buffer_peek_memory (buffer, 0); -+ GstMemoryPhy *memphy = (GstMemoryPhy*) mem; -+ PhyMemBlock *memblk = &memphy->block; -+ -+ GstVideoFormat fmt = GST_VIDEO_INFO_FORMAT (info); -+ guint viv_fmt; -+ -+ switch (fmt) { -+ case GST_VIDEO_FORMAT_I420: -+ viv_fmt = GL_VIV_I420; -+ break; -+ case GST_VIDEO_FORMAT_NV12: -+ viv_fmt = GL_VIV_NV12; -+ break; -+ case GST_VIDEO_FORMAT_RGBA: -+ viv_fmt = GL_RGBA; -+ break; -+ default: -+ GST_ERROR ("Not supported format %d for viv direct texture upload.", fmt); -+ viv_fmt = GL_NONE; -+ return FALSE; -+ } -+ -+ GstVivDirectTexture viv_tex = { -+ tex_id, -+ GST_VIDEO_INFO_WIDTH (info), -+ GST_VIDEO_INFO_HEIGHT (info), -+ viv_fmt, -+ memblk->vaddr, -+ memblk->paddr, -+ FALSE}; -+ -+ gst_gl_context_thread_add (context, (GstGLContextThreadFunc) _do_viv_direct_tex_bind_mem, &viv_tex); -+ -+ return viv_tex.ret; -+} -+ -diff --git a/gst-libs/gst/gl/gstglvivdirecttexture.h b/gst-libs/gst/gl/gstglvivdirecttexture.h -new file mode 100644 -index 0000000..c94403b ---- /dev/null -+++ b/gst-libs/gst/gl/gstglvivdirecttexture.h -@@ -0,0 +1,34 @@ -+/* -+ * GStreamer -+ * Copyright (c) 2015, Freescale Semiconductor, Inc. -+ * -+ * 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_VIVDIRECT_H__ -+#define __GST_GL_VIVDIRECT_H__ -+ -+#include -+#include -+ -+G_BEGIN_DECLS -+ -+gboolean gst_is_physical_buffer (GstBuffer *buffer); -+gboolean gst_gl_viv_direct_bind_gstbuffer (GstGLContext * context, guint tex_id, GstVideoInfo * info, GstBuffer * buffer) -+ -+G_END_DECLS -+ -+#endif /* __GST_GL_VIVDIRECT_H__ */ --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/Adding-some-fragment-shaders-for-glshader-plugin.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/Adding-some-fragment-shaders-for-glshader-plugin.patch deleted file mode 100644 index 69186411e..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/Adding-some-fragment-shaders-for-glshader-plugin.patch +++ /dev/null @@ -1,125 +0,0 @@ -From 8489b90f5ed6b7f9b98b123b521d41aec00cc8bd Mon Sep 17 00:00:00 2001 -From: Jian -Date: Wed, 25 Mar 2015 13:45:57 +0800 -Subject: [PATCH] Adding some fragment shaders for glshader plugin -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - - Upstream Status: Inappropriate [i.MX specific] - -Signed-off-by: Jian ---- - ext/gl/Makefile.am | 3 +++ - ext/gl/shaders/fisheye_shader.fs | 14 ++++++++++++++ - ext/gl/shaders/gray_shader.fs | 12 ++++++++++++ - ext/gl/shaders/tunnel_shader.fs | 14 ++++++++++++++ - ext/gl/shaders/twirl_shader.fs | 21 +++++++++++++++++++++ - 5 files changed, 64 insertions(+) - create mode 100755 ext/gl/shaders/fisheye_shader.fs - create mode 100755 ext/gl/shaders/gray_shader.fs - create mode 100755 ext/gl/shaders/tunnel_shader.fs - create mode 100755 ext/gl/shaders/twirl_shader.fs - -diff --git a/ext/gl/Makefile.am b/ext/gl/Makefile.am -index b1796f6..b8442f8 100644 ---- a/ext/gl/Makefile.am -+++ b/ext/gl/Makefile.am -@@ -110,6 +110,9 @@ libgstopengl_la_LIBADD = \ - $(LIBM) \ - $(GRAPHENE_LIBS) - -+data_DATA = shaders/gray_shader.fs shaders/fisheye_shader.fs shaders/tunnel_shader.fs shaders/twirl_shader.fs -+EXTRA_DIST = shaders/gray_shader.fs shaders/fisheye_shader.fs shaders/tunnel_shader.fs shaders/twirl_shader.fs -+ - libgstopengl_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) - libgstopengl_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) - -diff --git a/ext/gl/shaders/fisheye_shader.fs b/ext/gl/shaders/fisheye_shader.fs -new file mode 100755 -index 0000000..a57a203 ---- /dev/null -+++ b/ext/gl/shaders/fisheye_shader.fs -@@ -0,0 +1,14 @@ -+precision mediump float; -+varying vec2 v_texcoord; -+uniform sampler2D tex; -+void main () { -+ vec2 texturecoord = v_texcoord.xy; -+ vec2 normcoord; -+ normcoord = texturecoord - 0.5; -+ float r = length (normcoord); -+ normcoord *= r * 1.414; -+ texturecoord = normcoord + 0.5; -+ vec4 color = texture2D (tex, texturecoord); -+ gl_FragColor = color; -+} -+ -diff --git a/ext/gl/shaders/gray_shader.fs b/ext/gl/shaders/gray_shader.fs -new file mode 100755 -index 0000000..75e9790 ---- /dev/null -+++ b/ext/gl/shaders/gray_shader.fs -@@ -0,0 +1,12 @@ -+precision mediump float; -+varying vec2 v_texcoord; -+uniform sampler2D tex; -+void main () { -+ vec4 color = texture2D (tex, v_texcoord.xy); -+ float y = dot(color.rgb, vec3(0.2125, 0.7154, 0.0721)); -+ color.r = y; -+ color.g = y; -+ color.b = y; -+ gl_FragColor = color; -+} -+ -diff --git a/ext/gl/shaders/tunnel_shader.fs b/ext/gl/shaders/tunnel_shader.fs -new file mode 100755 -index 0000000..5888c92 ---- /dev/null -+++ b/ext/gl/shaders/tunnel_shader.fs -@@ -0,0 +1,14 @@ -+precision mediump float; -+varying vec2 v_texcoord; -+uniform sampler2D tex; -+void main () { -+ vec2 texturecoord = v_texcoord.xy; -+ vec2 normcoord; -+ normcoord = (texturecoord - 0.5); -+ float r = length(normcoord); -+ normcoord *= clamp (r, 0.0, 0.275) / r; -+ texturecoord = normcoord + 0.5; -+ vec4 color = texture2D (tex, texturecoord); -+ gl_FragColor = color; -+} -+ -diff --git a/ext/gl/shaders/twirl_shader.fs b/ext/gl/shaders/twirl_shader.fs -new file mode 100755 -index 0000000..2b9d5fd ---- /dev/null -+++ b/ext/gl/shaders/twirl_shader.fs -@@ -0,0 +1,21 @@ -+precision mediump float; -+varying vec2 v_texcoord; -+uniform sampler2D tex; -+void main () { -+ vec2 texturecoord = v_texcoord.xy; -+ vec2 normcoord; -+ normcoord = texturecoord - 0.5; -+ float r = length (normcoord); -+ // calculate rotation angle: maximum (about pi/2) at the origin and -+ // gradually decrease it up to 0.6 of each quadrant -+ float phi = (1.0 - smoothstep (0.0, 0.3, r)) * 1.6; -+ // precalculate sin phi and cos phi, save some alu -+ float s = sin(phi); -+ float c = cos(phi); -+ // rotate -+ normcoord *= mat2(c, s, -s, c); -+ texturecoord = normcoord + 0.5; -+ vec4 color = texture2D (tex, texturecoord); -+ gl_FragColor = color; -+} -+ --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/Fix-warnnig-log-in-glfilter.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/Fix-warnnig-log-in-glfilter.patch deleted file mode 100644 index a8b956389..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/Fix-warnnig-log-in-glfilter.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 1be24d5658bd01b2e622be54b7d7f862560d8181 Mon Sep 17 00:00:00 2001 -From: Jian -Date: Wed, 25 Mar 2015 16:05:09 +0800 -Subject: [PATCH] Fix warnnig log in glfilter -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Upstream Status: Inappropriate [i.MX specific] - -Signed-off-by: Jian ---- - gst-libs/gst/gl/gstglfilter.c | 19 +++++-------------- - 1 file changed, 5 insertions(+), 14 deletions(-) - -diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c -index eef4ec7..d038dcc 100644 ---- a/gst-libs/gst/gl/gstglfilter.c -+++ b/gst-libs/gst/gl/gstglfilter.c -@@ -759,12 +759,13 @@ gst_gl_filter_transform_caps (GstBaseTransform * bt, - - tmp = gst_caps_new_empty (); - -- tmp = gst_caps_merge (tmp, glcaps); -+ tmp = gst_caps_merge (tmp, gst_gl_filter_caps_remove_format_info (glcaps)); - #if GST_GL_HAVE_PLATFORM_EGL -- tmp = gst_caps_merge (tmp, eglcaps); -+ tmp = gst_caps_merge (tmp, gst_gl_filter_caps_remove_format_info (eglcaps)); - #endif -- tmp = gst_caps_merge (tmp, uploadcaps); -- tmp = gst_caps_merge (tmp, raw_caps); -+ tmp = -+ gst_caps_merge (tmp, gst_gl_filter_caps_remove_format_info (uploadcaps)); -+ tmp = gst_caps_merge (tmp, gst_gl_filter_caps_remove_format_info (raw_caps)); - - tmp = gst_caps_merge (tmp, gst_gl_filter_caps_remove_format_info (caps)); - -@@ -775,16 +776,6 @@ gst_gl_filter_transform_caps (GstBaseTransform * bt, - result = tmp; - } - -- /* if output still intersects input then prefer the intersection */ -- f = gst_caps_get_features (caps, 0); -- -- if (!gst_caps_features_is_any (f) -- && !gst_caps_features_is_equal (f, -- GST_CAPS_FEATURES_MEMORY_SYSTEM_MEMORY)) { -- tmp = gst_caps_intersect_full (result, caps, GST_CAPS_INTERSECT_FIRST); -- result = gst_caps_merge (tmp, result); -- } -- - GST_DEBUG_OBJECT (bt, "returning caps: %" GST_PTR_FORMAT, result); - - return result; --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/camerabin-examples-memory-leak-in-camerabin-examples-01.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/camerabin-examples-memory-leak-in-camerabin-examples-01.patch deleted file mode 100644 index 24e58c0c5..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/camerabin-examples-memory-leak-in-camerabin-examples-01.patch +++ /dev/null @@ -1,63 +0,0 @@ -From b50d8cf5301afc160fbe7cb720b362c40e42978f Mon Sep 17 00:00:00 2001 -From: Song Bing -Date: Tue, 10 Feb 2015 15:53:21 +0800 -Subject: [PATCH 1/2] camerabin examples: memory leak in camerabin examples - code - -should unref after set object. The object will be refed when set -property. - -Upstream Status: Accepted - https://bugzilla.gnome.org/show_bug.cgi?id=744219 - -Signed-off-by: Song Bing - ---- - tests/examples/camerabin2/gst-camerabin2-test.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/tests/examples/camerabin2/gst-camerabin2-test.c b/tests/examples/camerabin2/gst-camerabin2-test.c -index dfbd055..b68ec51 100644 ---- a/tests/examples/camerabin2/gst-camerabin2-test.c -+++ b/tests/examples/camerabin2/gst-camerabin2-test.c -@@ -595,6 +595,7 @@ setup_pipeline_element (GstElement * element, const gchar * property_name, - elem = gst_parse_launch (element_name, &error); - if (elem) { - g_object_set (element, property_name, elem, NULL); -+ g_object_unref (elem); - } else { - GST_WARNING ("can't create element '%s' for property '%s'", element_name, - property_name); -@@ -695,6 +696,7 @@ setup_pipeline (void) - - if (setup_pipeline_element (wrapper, "video-source", videosrc_name, NULL)) { - g_object_set (camerabin, "camera-source", wrapper, NULL); -+ g_object_unref (wrapper); - } else { - GST_WARNING ("Failed to set videosrc to %s", videosrc_name); - } -@@ -718,15 +720,19 @@ setup_pipeline (void) - - if (imagepp_name) { - ipp = create_ipp_bin (); -- if (ipp) -+ if (ipp) { - g_object_set (camerabin, "image-filter", ipp, NULL); -+ g_object_unref (ipp); -+ } - else - GST_WARNING ("Could not create ipp elements"); - } - - prof = load_encoding_profile (); -- if (prof) -+ if (prof) { - g_object_set (G_OBJECT (camerabin), "video-profile", prof, NULL); -+ gst_encoding_profile_unref (prof); -+ } - - GST_INFO_OBJECT (camerabin, "elements created"); - --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/camerabin-examples-memory-leak-in-camerabin-examples-02.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/camerabin-examples-memory-leak-in-camerabin-examples-02.patch deleted file mode 100644 index 12fcaf6b9..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/camerabin-examples-memory-leak-in-camerabin-examples-02.patch +++ /dev/null @@ -1,109 +0,0 @@ -From 2213750b7568c08846a71866fc53d9807545d298 Mon Sep 17 00:00:00 2001 -From: Song Bing -Date: Tue, 10 Feb 2015 15:55:50 +0800 -Subject: [PATCH 2/2] camerabin examples: memory leak in camerabin examples - code - -should unref caps after set to profile. profile will ref it. - -Upstream Status: Accepted - https://bugzilla.gnome.org/show_bug.cgi?id=744219 - -Signed-off-by: Song Bing ---- - tests/examples/camerabin2/gst-camera2.c | 53 ++++++++++++++++++++----------- - 1 file changed, 34 insertions(+), 19 deletions(-) - -diff --git a/tests/examples/camerabin2/gst-camera2.c b/tests/examples/camerabin2/gst-camera2.c -index 45047f5..2eb544c 100644 ---- a/tests/examples/camerabin2/gst-camera2.c -+++ b/tests/examples/camerabin2/gst-camera2.c -@@ -56,16 +56,21 @@ static GstEncodingProfile * - create_ogg_profile (void) - { - GstEncodingContainerProfile *container; -+ GstCaps *caps = NULL; - -- container = gst_encoding_container_profile_new ("ogg", NULL, -- gst_caps_new_empty_simple ("application/ogg"), NULL); -+ caps = gst_caps_new_empty_simple ("application/ogg"); -+ container = gst_encoding_container_profile_new ("ogg", NULL, caps, NULL); -+ gst_caps_unref (caps); - -+ caps = gst_caps_new_empty_simple ("video/x-theora"); - gst_encoding_container_profile_add_profile (container, (GstEncodingProfile *) -- gst_encoding_video_profile_new (gst_caps_new_empty_simple -- ("video/x-theora"), NULL, NULL, 1)); -+ gst_encoding_video_profile_new (caps, NULL, NULL, 1)); -+ gst_caps_unref (caps); -+ -+ caps = gst_caps_new_empty_simple ("audio/x-vorbis"); - gst_encoding_container_profile_add_profile (container, (GstEncodingProfile *) -- gst_encoding_audio_profile_new (gst_caps_new_empty_simple -- ("audio/x-vorbis"), NULL, NULL, 1)); -+ gst_encoding_audio_profile_new (caps, NULL, NULL, 1)); -+ gst_caps_unref (caps); - - return (GstEncodingProfile *) container; - } -@@ -74,16 +79,21 @@ static GstEncodingProfile * - create_webm_profile (void) - { - GstEncodingContainerProfile *container; -+ GstCaps *caps = NULL; - -- container = gst_encoding_container_profile_new ("webm", NULL, -- gst_caps_new_empty_simple ("video/webm"), NULL); -+ caps = gst_caps_new_empty_simple ("video/webm"); -+ container = gst_encoding_container_profile_new ("webm", NULL, caps, NULL); -+ gst_caps_unref (caps); - -+ caps = gst_caps_new_empty_simple ("video/x-vp8"); - gst_encoding_container_profile_add_profile (container, (GstEncodingProfile *) -- gst_encoding_video_profile_new (gst_caps_new_empty_simple ("video/x-vp8"), -- NULL, NULL, 1)); -+ gst_encoding_video_profile_new (caps, NULL, NULL, 1)); -+ gst_caps_unref (caps); -+ -+ caps = gst_caps_new_empty_simple ("audio/x-vorbis"); - gst_encoding_container_profile_add_profile (container, (GstEncodingProfile *) -- gst_encoding_audio_profile_new (gst_caps_new_empty_simple -- ("audio/x-vorbis"), NULL, NULL, 1)); -+ gst_encoding_audio_profile_new (caps, NULL, NULL, 1)); -+ gst_caps_unref (caps); - - return (GstEncodingProfile *) container; - } -@@ -92,17 +102,22 @@ static GstEncodingProfile * - create_mp4_profile (void) - { - GstEncodingContainerProfile *container; -+ GstCaps *caps = NULL; - -- container = gst_encoding_container_profile_new ("mp4", NULL, -- gst_caps_new_simple ("video/quicktime", "variant", G_TYPE_STRING, "iso", -- NULL), NULL); -+ caps = gst_caps_new_simple ("video/quicktime", "variant", G_TYPE_STRING, "iso", -+ NULL); -+ container = gst_encoding_container_profile_new ("mp4", NULL, caps, NULL); -+ gst_caps_unref (caps); - -+ caps = gst_caps_new_empty_simple ("video/x-h264"); - gst_encoding_container_profile_add_profile (container, (GstEncodingProfile *) -- gst_encoding_video_profile_new (gst_caps_new_empty_simple -- ("video/x-h264"), NULL, NULL, 1)); -+ gst_encoding_video_profile_new (caps, NULL, NULL, 1)); -+ gst_caps_unref (caps); -+ -+ caps = gst_caps_new_simple ("audio/mpeg", "version", G_TYPE_INT, 4, NULL); - gst_encoding_container_profile_add_profile (container, (GstEncodingProfile *) -- gst_encoding_audio_profile_new (gst_caps_new_simple ("audio/mpeg", -- "version", G_TYPE_INT, 4, NULL), NULL, NULL, 1)); -+ gst_encoding_audio_profile_new (caps, NULL, NULL, 1)); -+ gst_caps_unref (caps); - - return (GstEncodingProfile *) container; - } --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/dvbsuboverlay-Set-query-ALLOCATION-need_pool-to-FALSE.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/dvbsuboverlay-Set-query-ALLOCATION-need_pool-to-FALSE.patch deleted file mode 100644 index f0420866b..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/dvbsuboverlay-Set-query-ALLOCATION-need_pool-to-FALSE.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 518cc8a9af3797fbed2916497bb1cf83725265c4 Mon Sep 17 00:00:00 2001 -From: Song Bing -Date: Tue, 3 Mar 2015 10:12:11 +0800 -Subject: [PATCH] dvbsuboverlay: Set query ALLOCATION need_pool to FALSE - -Set query ALLOCATION need_pool to FALSE as it only need query if can -support video overlay composition meta. - -https://bugzilla.gnome.org/show_bug.cgi?id=745495 - -Upstream Status: Accepted  - -Signed-off-by: Song Bing ---- - gst/dvbsuboverlay/gstdvbsuboverlay.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/gst/dvbsuboverlay/gstdvbsuboverlay.c b/gst/dvbsuboverlay/gstdvbsuboverlay.c -index 3965b65..341b153 100644 ---- a/gst/dvbsuboverlay/gstdvbsuboverlay.c -+++ b/gst/dvbsuboverlay/gstdvbsuboverlay.c -@@ -720,7 +720,7 @@ gst_dvbsub_overlay_negotiate (GstDVBSubOverlay * overlay, GstCaps * caps) - GstQuery *query; - - /* find supported meta */ -- query = gst_query_new_allocation (caps, TRUE); -+ query = gst_query_new_allocation (caps, FALSE); - - if (!gst_pad_peer_query (overlay->srcpad, query)) { - /* no problem, we use the query defaults */ --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/egl-workaround-for-eglCreateContext-isn-t-thread-safe.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/egl-workaround-for-eglCreateContext-isn-t-thread-safe.patch deleted file mode 100644 index 35ffb0dc6..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/egl-workaround-for-eglCreateContext-isn-t-thread-safe.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 0d979b3a2a4e2db571545e84aeb854b326fa2234 Mon Sep 17 00:00:00 2001 -From: Song Bing -Date: Tue, 17 Mar 2015 10:21:28 +0800 -Subject: [PATCH] [egl] workaround for eglCreateContext () isn't thread safe - -Workaround for eglCreateContext () isn't thread safe - -Upstream Status: Inappropriate [i.MX specific] - -Signed-off-by: Song Bing b06498@freescale.com ---- - gst-libs/gst/gl/egl/gstglcontext_egl.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/gst-libs/gst/gl/egl/gstglcontext_egl.c b/gst-libs/gst/gl/egl/gstglcontext_egl.c -index 4ccec8d..7ba1782 100644 ---- a/gst-libs/gst/gl/egl/gstglcontext_egl.c -+++ b/gst-libs/gst/gl/egl/gstglcontext_egl.c -@@ -208,6 +208,8 @@ failure: - return FALSE; - } - -+static GMutex test_mutex; -+ - static gboolean - gst_gl_context_egl_create_context (GstGLContext * context, - GstGLAPI gl_api, GstGLContext * other_context, GError ** error) -@@ -336,9 +338,11 @@ gst_gl_context_egl_create_context (GstGLContext * context, - } - context_attrib[i++] = EGL_NONE; - -+ g_mutex_lock (&test_mutex); - egl->egl_context = - eglCreateContext (egl->egl_display, egl->egl_config, - (EGLContext) external_gl_context, context_attrib); -+ g_mutex_unlock (&test_mutex); - - if (egl->egl_context != EGL_NO_CONTEXT) { - GST_INFO ("gl context created: %" G_GUINTPTR_FORMAT, --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0002-mpegtsmux-Need-get-pid-when-create-streams.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0001-mpegtsmux-Need-get-pid-when-create-streams.patch similarity index 78% rename from meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0002-mpegtsmux-Need-get-pid-when-create-streams.patch rename to meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0001-mpegtsmux-Need-get-pid-when-create-streams.patch index a412b276f..07415c57f 100644 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0002-mpegtsmux-Need-get-pid-when-create-streams.patch +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0001-mpegtsmux-Need-get-pid-when-create-streams.patch @@ -1,4 +1,4 @@ -From 315a61197dafe6df4ee6e81b1fff46b3696cc9c6 Mon Sep 17 00:00:00 2001 +From a3118c47585d98891454731f66e62d79fff153d9 Mon Sep 17 00:00:00 2001 From: Song Bing Date: Wed, 22 Apr 2015 18:06:35 +0800 Subject: [PATCH] mpegtsmux: Need get pid when create streams. @@ -11,15 +11,16 @@ https://bugzilla.gnome.org/show_bug.cgi?id=748288 UpStream Status: Pending +Signed-off-by: Lyon Wang --- - gst/mpegtsmux/mpegtsmux.c | 15 +++++++++++++++ + gst/mpegtsmux/mpegtsmux.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/gst/mpegtsmux/mpegtsmux.c b/gst/mpegtsmux/mpegtsmux.c -index af246a2..c9918a8 100644 +index 4c68e3e95f96..d93374520e36 100644 --- a/gst/mpegtsmux/mpegtsmux.c +++ b/gst/mpegtsmux/mpegtsmux.c -@@ -769,6 +769,21 @@ mpegtsmux_create_streams (MpegTsMux * mux) +@@ -833,6 +833,21 @@ mpegtsmux_create_streams (MpegTsMux * mux) } else { ts_data->prog_id = DEFAULT_PROG_ID; } @@ -40,7 +41,4 @@ index af246a2..c9918a8 100644 + } } - ts_data->prog = mux->programs[ts_data->prog_id]; --- -1.7.9.5 - + ts_data->prog = diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0009-mpeg4videoparse-Need-detect-picture-coding-type-when.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0002-mpeg4videoparse-Need-detect-picture-coding-type-when.patch similarity index 84% rename from meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0009-mpeg4videoparse-Need-detect-picture-coding-type-when.patch rename to meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0002-mpeg4videoparse-Need-detect-picture-coding-type-when.patch index 183f7d014..6017a9c1a 100644 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0009-mpeg4videoparse-Need-detect-picture-coding-type-when.patch +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0002-mpeg4videoparse-Need-detect-picture-coding-type-when.patch @@ -1,8 +1,7 @@ -From 6e49c3547f2a99882542c64fdcd4d77c88b44c17 Mon Sep 17 00:00:00 2001 +From ede36691cbd17db3f8a65d7ed61402111dea6140 Mon Sep 17 00:00:00 2001 From: Song Bing Date: Wed, 20 May 2015 15:13:20 +0800 -Subject: [PATCH 1/2] mpeg4videoparse: Need detect picture coding type when - drain +Subject: [PATCH] mpeg4videoparse: Need detect picture coding type when drain MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -16,12 +15,13 @@ drain. Upstream Status: Waiting for review. https://bugzilla.gnome.org/show_bug.cgi?id=749617 +Signed-off-by: Lyon Wang --- - gst/videoparsers/gstmpeg4videoparse.c | 12 ++++++++++++ + gst/videoparsers/gstmpeg4videoparse.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/gst/videoparsers/gstmpeg4videoparse.c b/gst/videoparsers/gstmpeg4videoparse.c -index 1afaa17..a5a41c7 100644 +index a1fd3b2a3b4c..453effddd680 100644 --- a/gst/videoparsers/gstmpeg4videoparse.c +++ b/gst/videoparsers/gstmpeg4videoparse.c @@ -502,6 +502,18 @@ next: @@ -43,6 +43,3 @@ index 1afaa17..a5a41c7 100644 framesize = size; ret = TRUE; } else { --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0010-mpegvideoparse-Need-detect-picture-coding-type-when-.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0003-mpegvideoparse-Need-detect-picture-coding-type-when-.patch similarity index 83% rename from meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0010-mpegvideoparse-Need-detect-picture-coding-type-when-.patch rename to meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0003-mpegvideoparse-Need-detect-picture-coding-type-when-.patch index 3a5921bec..25b6dfed8 100644 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0010-mpegvideoparse-Need-detect-picture-coding-type-when-.patch +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0003-mpegvideoparse-Need-detect-picture-coding-type-when-.patch @@ -1,8 +1,7 @@ -From af20e70625ca3cd521c32feb0d53f18bdfbaf5e0 Mon Sep 17 00:00:00 2001 +From cd3bd818c9bfd28bd5eef99181d6343a6a6f2c91 Mon Sep 17 00:00:00 2001 From: Song Bing Date: Wed, 20 May 2015 15:15:08 +0800 -Subject: [PATCH 2/2] mpegvideoparse: Need detect picture coding type when - drain +Subject: [PATCH] mpegvideoparse: Need detect picture coding type when drain MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -12,12 +11,13 @@ Need detect picture coding type when drain Upstream Status: Waiting for review. https://bugzilla.gnome.org/show_bug.cgi?id=749617 +Signed-off-by: Lyon Wang --- - gst/videoparsers/gstmpegvideoparse.c | 16 ++++++++++++++++ + gst/videoparsers/gstmpegvideoparse.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gst/videoparsers/gstmpegvideoparse.c b/gst/videoparsers/gstmpegvideoparse.c -index dadab94..5ba4e9f 100644 +index bf71a3e7cf1d..7ba624eb8c74 100644 --- a/gst/videoparsers/gstmpegvideoparse.c +++ b/gst/videoparsers/gstmpegvideoparse.c @@ -717,6 +717,22 @@ need_more: @@ -43,6 +43,3 @@ index dadab94..5ba4e9f 100644 ret = TRUE; } else { GST_LOG_OBJECT (mpvparse, "need more data"); --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0011-videoparse-modifiy-the-videoparse-rank.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0004-modifiy-the-videoparse-rank.patch similarity index 73% rename from meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0011-videoparse-modifiy-the-videoparse-rank.patch rename to meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0004-modifiy-the-videoparse-rank.patch index ba896262d..33f5f15ec 100644 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0011-videoparse-modifiy-the-videoparse-rank.patch +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0004-modifiy-the-videoparse-rank.patch @@ -1,11 +1,10 @@ -From 7146faaa2c7a6add79c290870e5de90cb5f72479 Mon Sep 17 00:00:00 2001 +From 6d38b354a7b6496b208d03fdb45e49b70d825080 Mon Sep 17 00:00:00 2001 From: Lyon Wang Date: Fri, 29 May 2015 09:54:56 +0800 -Subject: [PATCH] [videoparse] modifiy the videoparse rank +Subject: [PATCH] modifiy the videoparse rank - Modify the videparsers rank down to avoid link them in . h263parse rank down to 63 -. h264parse rank down to 63 . mpegvideoparse rank down to 63 . mpeg4videpparse rank down to 63 . pngparse, rank down to 63 @@ -13,13 +12,27 @@ Subject: [PATCH] [videoparse] modifiy the videoparse rank Upstream status: [i.MX specific] internal use only +Signed-off-by: Lyon Wang + +[vidoeparse] Roll-back h264parse rank + +Roll back the h264parse rank. +MMFMWK-7012 +For SW video decoder, it only support aligment au, +But in GST1.6, rtph264depay output aligment nal format video. +Need link h264parse to convert it to au alginment, +make the sw decodear work + +http://sw-jira.freescale.net/browse/MMFMWK-7012 +Upstream Status: [i.MX specific] + Signed-off-by: Lyon Wang --- - gst/videoparsers/plugin.c | 21 +++++++++++++++++++-- + gst/videoparsers/plugin.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/gst/videoparsers/plugin.c b/gst/videoparsers/plugin.c -index 79d1df6..c070b93 100644 +index 79d1df65d577..6fb01614fb4a 100644 --- a/gst/videoparsers/plugin.c +++ b/gst/videoparsers/plugin.c @@ -35,7 +35,7 @@ static gboolean @@ -40,7 +53,7 @@ index 79d1df6..c070b93 100644 + ret |= gst_element_register (plugin, "h263parse", + GST_RANK_MARGINAL - 1, GST_TYPE_H263_PARSE); + ret |= gst_element_register (plugin, "h264parse", -+ GST_RANK_MARGINAL - 1, GST_TYPE_H264_PARSE); ++ GST_RANK_PRIMARY + 1, GST_TYPE_H264_PARSE); + ret |= gst_element_register (plugin, "diracparse", + GST_RANK_NONE, GST_TYPE_DIRAC_PARSE); + ret |= gst_element_register (plugin, "mpegvideoparse", @@ -57,6 +70,3 @@ index 79d1df6..c070b93 100644 return ret; } --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0012-glfilter-Lost-frame-rate-info-when-fixate-caps.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0005-glfilter-Lost-frame-rate-info-when-fixate-caps.patch similarity index 81% rename from meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0012-glfilter-Lost-frame-rate-info-when-fixate-caps.patch rename to meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0005-glfilter-Lost-frame-rate-info-when-fixate-caps.patch index 9c4a35959..29e9a1cf6 100644 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0012-glfilter-Lost-frame-rate-info-when-fixate-caps.patch +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0005-glfilter-Lost-frame-rate-info-when-fixate-caps.patch @@ -1,4 +1,4 @@ -From 901e9e6fa16ed9558022f64bdc3cc6b8ac761c71 Mon Sep 17 00:00:00 2001 +From a4f0b87d5c4bbe1de5e7cf223d107afbae126110 Mon Sep 17 00:00:00 2001 From: Song Bing Date: Mon, 8 Jun 2015 17:06:22 +0800 Subject: [PATCH] glfilter: Lost frame rate info when fixate caps @@ -12,15 +12,16 @@ down stream element fail, such avimux. Upstream Status: Waiting for review. https://bugzilla.gnome.org/show_bug.cgi?id=750545 +Signed-off-by: Lyon Wang --- - gst-libs/gst/gl/gstglfilter.c | 13 ++++++++++++- + gst-libs/gst/gl/gstglfilter.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c -index feff9de..d46e272 100644 +index d25bb72988f1..6840f4ca97a7 100644 --- a/gst-libs/gst/gl/gstglfilter.c +++ b/gst-libs/gst/gl/gstglfilter.c -@@ -356,7 +356,8 @@ gst_gl_filter_fixate_caps (GstBaseTransform * bt, +@@ -247,7 +247,8 @@ gst_gl_filter_fixate_caps (GstBaseTransform * bt, GstPadDirection direction, GstCaps * caps, GstCaps * othercaps) { GstStructure *ins, *outs; @@ -30,7 +31,7 @@ index feff9de..d46e272 100644 GValue fpar = { 0, }, tpar = { 0,}; -@@ -369,6 +370,16 @@ gst_gl_filter_fixate_caps (GstBaseTransform * bt, +@@ -260,6 +261,16 @@ gst_gl_filter_fixate_caps (GstBaseTransform * bt, ins = gst_caps_get_structure (caps, 0); outs = gst_caps_get_structure (othercaps, 0); @@ -47,6 +48,3 @@ index feff9de..d46e272 100644 from_par = gst_structure_get_value (ins, "pixel-aspect-ratio"); to_par = gst_structure_get_value (outs, "pixel-aspect-ratio"); --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0015-opencv-Add-video-stitching-support.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0006-opencv-Add-video-stitching-support-based-on-Open-CV.patch similarity index 97% rename from meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0015-opencv-Add-video-stitching-support.patch rename to meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0006-opencv-Add-video-stitching-support-based-on-Open-CV.patch index 719c22a73..ab7ae4b9a 100644 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/0015-opencv-Add-video-stitching-support.patch +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0006-opencv-Add-video-stitching-support-based-on-Open-CV.patch @@ -1,35 +1,35 @@ -From aa485cfba8a06f767498bf707175134629fe2377 Mon Sep 17 00:00:00 2001 +From 348adcf57d05bf396b457be2af3496d416a7c20b Mon Sep 17 00:00:00 2001 From: Song Bing Date: Mon, 1 Jun 2015 13:30:11 +0800 -Subject: [PATCH 2/2] opencv: Add video stitching support. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit +Subject: [PATCH] opencv: Add video stitching support based on Open CV -Add video stitching element. - -Upstream Status: Waiting for review. +Add video stitching element based on Open CV. https://bugzilla.gnome.org/show_bug.cgi?id=751203 + +Conflicts: + ext/opencv/Makefile.am + +Signed-off-by: Lyon Wang --- - docs/plugins/Makefile.am | 1 + - ext/opencv/Makefile.am | 12 +- - ext/opencv/gstcvstitching.cpp | 834 ++++++++++++++++++++++++++++++++++++++ - ext/opencv/gstcvstitching.h | 130 ++++++ - ext/opencv/gstopencv.cpp | 4 + - ext/opencv/gstopencvaggregator.c | 708 ++++++++++++++++++++++++++++++++ - ext/opencv/gstopencvaggregator.h | 118 ++++++ - 7 files changed, 1806 insertions(+), 1 deletion(-) + docs/plugins/Makefile.am | 1 + + ext/opencv/Makefile.am | 14 +- + ext/opencv/gstcvstitching.cpp | 834 +++++++++++++++++++++++++++++++++++++++ + ext/opencv/gstcvstitching.h | 130 ++++++ + ext/opencv/gstopencv.cpp | 4 + + ext/opencv/gstopencvaggregator.c | 705 +++++++++++++++++++++++++++++++++ + ext/opencv/gstopencvaggregator.h | 118 ++++++ + 7 files changed, 1804 insertions(+), 2 deletions(-) create mode 100644 ext/opencv/gstcvstitching.cpp create mode 100644 ext/opencv/gstcvstitching.h create mode 100644 ext/opencv/gstopencvaggregator.c create mode 100644 ext/opencv/gstopencvaggregator.h diff --git a/docs/plugins/Makefile.am b/docs/plugins/Makefile.am -index b093bcf..77593ed 100644 +index 7607b558fd42..95f2661d0a42 100644 --- a/docs/plugins/Makefile.am +++ b/docs/plugins/Makefile.am -@@ -98,6 +98,7 @@ EXTRA_HFILES = \ +@@ -97,6 +97,7 @@ EXTRA_HFILES = \ $(top_srcdir)/ext/opencv/gstpyramidsegment.h \ $(top_srcdir)/ext/opencv/gsttemplatematch.h \ $(top_srcdir)/ext/opencv/gsttextoverlay.h \ @@ -38,10 +38,10 @@ index b093bcf..77593ed 100644 $(top_srcdir)/ext/rsvg/gstrsvgdec.h \ $(top_srcdir)/ext/rsvg/gstrsvgoverlay.h \ diff --git a/ext/opencv/Makefile.am b/ext/opencv/Makefile.am -index 3c3418e..38f67fd 100644 +index 0eee38c450d5..8cea91fda70f 100644 --- a/ext/opencv/Makefile.am +++ b/ext/opencv/Makefile.am -@@ -24,10 +24,15 @@ libgstopencv_la_SOURCES = gstopencv.cpp \ +@@ -24,11 +24,15 @@ libgstopencv_la_SOURCES = gstopencv.cpp \ gstsegmentation.cpp \ gstgrabcut.cpp \ gstdisparity.cpp \ @@ -50,21 +50,22 @@ index 3c3418e..38f67fd 100644 motioncells_wrapper.cpp \ MotionCells.cpp --libgstopencv_la_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CXXFLAGS) $(OPENCV_CFLAGS) -+libgstopencv_la_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \ -+ $(GST_CXXFLAGS) $(OPENCV_CFLAGS) \ +-libgstopencv_la_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CXXFLAGS) $(OPENCV_CFLAGS) \ +- -DGST_HAAR_CASCADES_DIR=\"$(pkgdatadir)/@GST_API_VERSION@/opencv_haarcascades\" ++libgstopencv_la_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CXXFLAGS) $(OPENCV_CFLAGS) \ ++ -DGST_HAAR_CASCADES_DIR=\"$(pkgdatadir)/@GST_API_VERSION@/opencv_haarcascades\" \ + -I$(top_srcdir)/gst-libs \ + -I$(top_builddir)/gst-libs # flags used to compile this facedetect # add other _CFLAGS and _LIBS as needed -@@ -36,11 +41,14 @@ libgstopencv_la_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_C +@@ -37,10 +41,14 @@ libgstopencv_la_CXXFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_C # OpenCV's define isn't good enough to avoid 'unused' gcc warnings (at v2.1.0) libgstopencv_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \ $(GST_CFLAGS) $(OPENCV_CFLAGS) \ + -I$(top_srcdir)/gst-libs \ + -I$(top_builddir)/gst-libs \ - -DGST_HAAR_CASCADES_DIR=\"$(pkgdatadir)/@GST_API_VERSION@/opencv_haarcascades\" \ ++ -DGST_HAAR_CASCADES_DIR=\"$(pkgdatadir)/@GST_API_VERSION@/opencv_haarcascades\" \ -DCV_INLINE="static inline" \ -DCV_NO_BACKWARD_COMPATIBILITY @@ -84,7 +85,7 @@ index 3c3418e..38f67fd 100644 MotionCells.h diff --git a/ext/opencv/gstcvstitching.cpp b/ext/opencv/gstcvstitching.cpp new file mode 100644 -index 0000000..47105f7 +index 000000000000..47105f723594 --- /dev/null +++ b/ext/opencv/gstcvstitching.cpp @@ -0,0 +1,834 @@ @@ -924,7 +925,7 @@ index 0000000..47105f7 +} diff --git a/ext/opencv/gstcvstitching.h b/ext/opencv/gstcvstitching.h new file mode 100644 -index 0000000..ec955d0 +index 000000000000..ec955d063611 --- /dev/null +++ b/ext/opencv/gstcvstitching.h @@ -0,0 +1,130 @@ @@ -1059,7 +1060,7 @@ index 0000000..ec955d0 +G_END_DECLS +#endif /* __GST_CV_STITCHING_H__ */ diff --git a/ext/opencv/gstopencv.cpp b/ext/opencv/gstopencv.cpp -index 3184518..f01aa1d 100644 +index 4077ba6e2ca8..6ae73c46ec00 100644 --- a/ext/opencv/gstopencv.cpp +++ b/ext/opencv/gstopencv.cpp @@ -42,6 +42,7 @@ @@ -1082,10 +1083,10 @@ index 3184518..f01aa1d 100644 diff --git a/ext/opencv/gstopencvaggregator.c b/ext/opencv/gstopencvaggregator.c new file mode 100644 -index 0000000..3c69edf +index 000000000000..8a813fc2d9ca --- /dev/null +++ b/ext/opencv/gstopencvaggregator.c -@@ -0,0 +1,708 @@ +@@ -0,0 +1,705 @@ +/* + * GStreamer + * Copyright (C) 2015 Song Bing @@ -1265,7 +1266,6 @@ index 0000000..3c69edf + agg_class->stop = gst_opencv_aggregator_stop; + agg_class->start = gst_opencv_aggregator_start; + -+ videoaggregator_class->disable_frame_conversion = TRUE; + videoaggregator_class->aggregate_frames = + gst_opencv_aggregator_aggregate_frames; + videoaggregator_class->get_output_buffer = @@ -1695,11 +1695,9 @@ index 0000000..3c69edf + + walk = g_list_next (walk); + -+ GST_WARNING_OBJECT (aggregator, "sink pad caps: %" -+ GST_PTR_FORMAT, caps); ++ GST_WARNING_OBJECT (aggregator, "sink pad caps: %" GST_PTR_FORMAT, caps); + if (!gst_opencv_parse_iplimage_params_from_caps (caps, &in_width, -+ &in_height, &in_depth, &in_channels, -+ &in_err)) { ++ &in_height, &in_depth, &in_channels, &in_err)) { + GST_WARNING_OBJECT (aggregator, "Failed to parse input caps: %s", + in_err->message); + g_error_free (in_err); @@ -1796,7 +1794,7 @@ index 0000000..3c69edf +} diff --git a/ext/opencv/gstopencvaggregator.h b/ext/opencv/gstopencvaggregator.h new file mode 100644 -index 0000000..1fc65a5 +index 000000000000..1fc65a5a1783 --- /dev/null +++ b/ext/opencv/gstopencvaggregator.h @@ -0,0 +1,118 @@ @@ -1918,6 +1916,3 @@ index 0000000..1fc65a5 + +G_END_DECLS +#endif /* __GST_OPENCV_AGGREGATOR_H__ */ --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/camerabin-Add-one-property-to-set-sink-element-for-video.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0007-camerabin-Add-one-property-to-set-sink-element-for-v.patch similarity index 87% rename from meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/camerabin-Add-one-property-to-set-sink-element-for-video.patch rename to meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0007-camerabin-Add-one-property-to-set-sink-element-for-v.patch index a2fcb2066..46e463085 100644 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/camerabin-Add-one-property-to-set-sink-element-for-video.patch +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0007-camerabin-Add-one-property-to-set-sink-element-for-v.patch @@ -1,4 +1,4 @@ -From 59726a9af8d439f2a4bbe51d0cac909c936d86f3 Mon Sep 17 00:00:00 2001 +From b19b98028730e772d7044375b79e4f5508c5a6a3 Mon Sep 17 00:00:00 2001 From: Song Bing Date: Fri, 13 Mar 2015 17:31:29 +0800 Subject: [PATCH] camerabin: Add one property to set sink element for video @@ -11,16 +11,17 @@ https://bugzilla.gnome.org/show_bug.cgi?id=744508 Upstream Status: Inappropriate [i.MX specific] +Signed-off-by: Lyon Wang --- - gst/camerabin2/gstcamerabin2.c | 73 ++++++++++++++++++++++++++++++++++------ - gst/camerabin2/gstcamerabin2.h | 1 + + gst/camerabin2/gstcamerabin2.c | 73 +++++++++++++++++++++++++++++++++++------- + gst/camerabin2/gstcamerabin2.h | 1 + 2 files changed, 63 insertions(+), 11 deletions(-) diff --git a/gst/camerabin2/gstcamerabin2.c b/gst/camerabin2/gstcamerabin2.c -index c77585a..01037ff 100644 +index d0876d5ecc59..31c1e7f5668d 100644 --- a/gst/camerabin2/gstcamerabin2.c +++ b/gst/camerabin2/gstcamerabin2.c -@@ -226,6 +226,7 @@ enum +@@ -220,6 +220,7 @@ enum PROP_MUTE_AUDIO, PROP_AUDIO_CAPTURE_SUPPORTED_CAPS, PROP_AUDIO_CAPTURE_CAPS, @@ -28,7 +29,7 @@ index c77585a..01037ff 100644 PROP_ZOOM, PROP_MAX_ZOOM, PROP_IMAGE_ENCODING_PROFILE, -@@ -365,7 +366,7 @@ gst_camera_bin_start_capture (GstCameraBin2 * camerabin) +@@ -359,7 +360,7 @@ gst_camera_bin_start_capture (GstCameraBin2 * camerabin) /* check that we have a valid location */ if (camerabin->mode == MODE_VIDEO) { @@ -37,7 +38,7 @@ index c77585a..01037ff 100644 GST_ELEMENT_ERROR (camerabin, RESOURCE, OPEN_WRITE, (_("File location is set to NULL, please set it to a valid filename")), (NULL)); return; -@@ -500,10 +501,13 @@ gst_camera_bin_src_notify_readyforcapture (GObject * obj, GParamSpec * pspec, +@@ -494,10 +495,13 @@ gst_camera_bin_src_notify_readyforcapture (GObject * obj, GParamSpec * pspec, if (camera->mode == MODE_VIDEO) { /* a video recording is about to start, change the filesink location */ gst_element_set_state (camera->videosink, GST_STATE_NULL); @@ -55,7 +56,7 @@ index c77585a..01037ff 100644 if (gst_element_set_state (camera->videosink, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) { /* Resets the latest state change return, that would be a failure -@@ -558,6 +562,8 @@ gst_camera_bin_dispose (GObject * object) +@@ -552,6 +556,8 @@ gst_camera_bin_dispose (GObject * object) if (camerabin->videosink) gst_object_unref (camerabin->videosink); @@ -64,7 +65,7 @@ index c77585a..01037ff 100644 if (camerabin->video_encodebin) gst_object_unref (camerabin->video_encodebin); if (camerabin->videobin_capsfilter) -@@ -678,6 +684,12 @@ gst_camera_bin_class_init (GstCameraBin2Class * klass) +@@ -672,6 +678,12 @@ gst_camera_bin_class_init (GstCameraBin2Class * klass) " taken into use on the next null to ready transition", GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); @@ -77,7 +78,7 @@ index c77585a..01037ff 100644 g_object_class_install_property (object_class, PROP_MUTE_AUDIO, g_param_spec_boolean ("mute", "Mute", "If the audio recording should be muted. Note that this still " -@@ -1534,13 +1546,30 @@ gst_camera_bin_create_elements (GstCameraBin2 * camera) +@@ -1536,13 +1548,30 @@ gst_camera_bin_create_elements (GstCameraBin2 * camera) g_signal_connect (camera->video_encodebin, "element-added", (GCallback) encodebin_element_added, camera); @@ -113,7 +114,7 @@ index c77585a..01037ff 100644 /* audio elements */ if (!camera->audio_volume) { -@@ -1663,7 +1692,9 @@ gst_camera_bin_create_elements (GstCameraBin2 * camera) +@@ -1665,7 +1694,9 @@ gst_camera_bin_create_elements (GstCameraBin2 * camera) gst_element_set_locked_state (camera->videosink, TRUE); gst_element_set_locked_state (camera->imagesink, TRUE); @@ -124,7 +125,7 @@ index c77585a..01037ff 100644 g_object_set (camera->imagesink, "location", camera->location, NULL); } -@@ -2029,6 +2060,20 @@ gst_camera_bin_set_audio_src (GstCameraBin2 * camera, GstElement * src) +@@ -2031,6 +2062,20 @@ gst_camera_bin_set_audio_src (GstCameraBin2 * camera, GstElement * src) } static void @@ -145,7 +146,7 @@ index c77585a..01037ff 100644 gst_camera_bin_set_camera_src (GstCameraBin2 * camera, GstElement * src) { GST_DEBUG_OBJECT (GST_OBJECT (camera), -@@ -2061,6 +2106,9 @@ gst_camera_bin_set_property (GObject * object, guint prop_id, +@@ -2063,6 +2108,9 @@ gst_camera_bin_set_property (GObject * object, guint prop_id, case PROP_AUDIO_SRC: gst_camera_bin_set_audio_src (camera, g_value_get_object (value)); break; @@ -155,7 +156,7 @@ index c77585a..01037ff 100644 case PROP_MUTE_AUDIO: g_object_set (camera->audio_volume, "mute", g_value_get_boolean (value), NULL); -@@ -2244,6 +2292,9 @@ gst_camera_bin_get_property (GObject * object, guint prop_id, +@@ -2246,6 +2294,9 @@ gst_camera_bin_get_property (GObject * object, guint prop_id, case PROP_AUDIO_SRC: g_value_set_object (value, camera->user_audio_src); break; @@ -166,7 +167,7 @@ index c77585a..01037ff 100644 gboolean mute; diff --git a/gst/camerabin2/gstcamerabin2.h b/gst/camerabin2/gstcamerabin2.h -index ba55a7e..9e090b6 100644 +index ba55a7ea0dff..9e090b62b677 100644 --- a/gst/camerabin2/gstcamerabin2.h +++ b/gst/camerabin2/gstcamerabin2.h @@ -71,6 +71,7 @@ struct _GstCameraBin2 @@ -177,6 +178,3 @@ index ba55a7e..9e090b6 100644 GstElement *videobin_capsfilter; GstElement *viewfinderbin; --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/Fix-for-gl-plugin-not-built-in-wayland-backend.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0008-Fix-for-gl-plugin-not-built-in-wayland-backend.patch similarity index 79% rename from meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/Fix-for-gl-plugin-not-built-in-wayland-backend.patch rename to meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0008-Fix-for-gl-plugin-not-built-in-wayland-backend.patch index f7ea52aaa..45676db75 100644 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.4.5/Fix-for-gl-plugin-not-built-in-wayland-backend.patch +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0008-Fix-for-gl-plugin-not-built-in-wayland-backend.patch @@ -1,4 +1,4 @@ -From 7cf34dcec06acaf3278ef48feafe68b5cb3c7789 Mon Sep 17 00:00:00 2001 +From 9af5efc2a92bc1ade61eed31a5192ea4bb253549 Mon Sep 17 00:00:00 2001 From: Jian Date: Fri, 24 Apr 2015 17:12:02 +0800 Subject: [PATCH] Fix for gl plugin not built in wayland backend @@ -9,15 +9,16 @@ Content-Transfer-Encoding: 8bit Upstream Status: Inappropriate [i.MX specific] Signed-off-by: Jian +Signed-off-by: Lyon Wang --- - configure.ac | 2 +- + configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac -index cd55e22..099d0eb 100644 +index 622e5bb16278..63cc7161cec5 100644 --- a/configure.ac +++ b/configure.ac -@@ -745,7 +745,7 @@ case $host in +@@ -789,7 +789,7 @@ case $host in LIBS=$old_LIBS CFLAGS=$old_CFLAGS @@ -26,6 +27,3 @@ index cd55e22..099d0eb 100644 ;; esac --- -1.7.9.5 - diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0009-gl-wayland-fix-loop-test-hang-in-glimagesink.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0009-gl-wayland-fix-loop-test-hang-in-glimagesink.patch new file mode 100644 index 000000000..c3eff5d9b --- /dev/null +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0009-gl-wayland-fix-loop-test-hang-in-glimagesink.patch @@ -0,0 +1,140 @@ +From e15e7af522d381cf84f350d1415f1f4571ff9b26 Mon Sep 17 00:00:00 2001 +From: Haihua Hu +Date: Sun, 6 Dec 2015 14:25:44 +0800 +Subject: [PATCH] gl/wayland: fix loop test hang in glimagesink + +Root cause: In glimagesink, gl thread will dispatch event queue and window_show() +is called from streaming thread. Gl thread will empty event queue and +potentially cause gst_gl_wl_display_roundtrip_queue() blocking the +streaming thread to wait for an event occur. Actually, no event can occur +becaue the swap_buffer event is queued by streaming thread but it is blocked. + +Solution: Use two event queue, One for surface and another for gl thread + +Upstream Status: Pending + +bugzilla URL: https://bugzilla.gnome.org/show_bug.cgi?id=758984 + +Signed-off-by: Haihua Hu +Signed-off-by: Lyon Wang +--- + gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c | 33 +++++++++++++++-------- + gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h | 2 +- + 2 files changed, 23 insertions(+), 12 deletions(-) + +diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c +index 48b37a2e5a22..da35bf06d666 100644 +--- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c ++++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c +@@ -245,6 +245,10 @@ destroy_surfaces (GstGLWindowWaylandEGL * window_egl) + wl_egl_window_destroy (window_egl->window.native); + window_egl->window.native = NULL; + } ++ if(window_egl->window.surface_queue) { ++ wl_event_queue_destroy (window_egl->window.surface_queue); ++ window_egl->window.surface_queue = NULL; ++ } + } + + static void +@@ -253,13 +257,15 @@ create_surfaces (GstGLWindowWaylandEGL * window_egl) + GstGLDisplayWayland *display = + GST_GL_DISPLAY_WAYLAND (GST_GL_WINDOW (window_egl)->display); + gint width, height; ++ if (!window_egl->window.surface_queue) ++ window_egl->window.surface_queue = wl_display_create_queue (display->display); + + if (!window_egl->window.surface) { + window_egl->window.surface = + wl_compositor_create_surface (display->compositor); +- if (window_egl->window.queue) ++ if (window_egl->window.surface_queue) + wl_proxy_set_queue ((struct wl_proxy *) window_egl->window.surface, +- window_egl->window.queue); ++ window_egl->window.surface_queue); + } + + if (window_egl->window.foreign_surface) { +@@ -275,9 +281,9 @@ create_surfaces (GstGLWindowWaylandEGL * window_egl) + window_egl->window.subsurface = + wl_subcompositor_get_subsurface (display->subcompositor, + window_egl->window.surface, window_egl->window.foreign_surface); +- if (window_egl->window.queue) ++ if (window_egl->window.surface_queue) + wl_proxy_set_queue ((struct wl_proxy *) window_egl->window.subsurface, +- window_egl->window.queue); ++ window_egl->window.surface_queue); + + wl_subsurface_set_position (window_egl->window.subsurface, + window_egl->window.window_x, window_egl->window.window_y); +@@ -289,9 +295,9 @@ create_surfaces (GstGLWindowWaylandEGL * window_egl) + window_egl->window.shell_surface = + wl_shell_get_shell_surface (display->shell, + window_egl->window.surface); +- if (window_egl->window.queue) ++ if (window_egl->window.surface_queue) + wl_proxy_set_queue ((struct wl_proxy *) window_egl->window. +- shell_surface, window_egl->window.queue); ++ shell_surface, window_egl->window.surface_queue); + + wl_shell_surface_add_listener (window_egl->window.shell_surface, + &shell_surface_listener, window_egl); +@@ -319,9 +325,9 @@ create_surfaces (GstGLWindowWaylandEGL * window_egl) + + window_egl->window.native = + wl_egl_window_create (window_egl->window.surface, width, height); +- if (window_egl->window.queue) ++ if (window_egl->window.surface_queue) + wl_proxy_set_queue ((struct wl_proxy *) window_egl->window.native, +- window_egl->window.queue); ++ window_egl->window.surface_queue); + } + } + +@@ -372,6 +378,11 @@ gst_gl_window_wayland_egl_close (GstGLWindow * window) + + destroy_surfaces (window_egl); + ++ if(window_egl->window.wl_queue) { ++ wl_event_queue_destroy (window_egl->window.wl_queue); ++ window_egl->window.wl_queue = NULL; ++ } ++ + g_source_destroy (window_egl->wl_source); + g_source_unref (window_egl->wl_source); + window_egl->wl_source = NULL; +@@ -400,10 +411,10 @@ gst_gl_window_wayland_egl_open (GstGLWindow * window, GError ** error) + return FALSE; + } + +- window_egl->window.queue = wl_display_create_queue (display->display); ++ window_egl->window.wl_queue = wl_display_create_queue (display->display); + + window_egl->wl_source = wayland_event_source_new (display->display, +- window_egl->window.queue); ++ window_egl->window.wl_queue); + + if (!GST_GL_WINDOW_CLASS (parent_class)->open (window, error)) + return FALSE; +@@ -452,7 +463,7 @@ gst_gl_window_wayland_egl_show (GstGLWindow * window) + create_surfaces (window_egl); + + if (gst_gl_wl_display_roundtrip_queue (display_wayland->display, +- window_egl->window.queue) < 0) ++ window_egl->window.surface_queue) < 0) + GST_WARNING_OBJECT (window, "failed a roundtrip"); + } + +diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h +index e0166dabb7af..d148a449a216 100644 +--- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h ++++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.h +@@ -63,7 +63,7 @@ struct display { + struct window { + struct display *display; + +- struct wl_event_queue *queue; ++ struct wl_event_queue *wl_queue, *surface_queue; + struct wl_surface *surface; + struct wl_shell_surface *shell_surface; + struct wl_egl_window *native; diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0010-Fix-glimagesink-wayland-resize-showed-blurred-screen.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0010-Fix-glimagesink-wayland-resize-showed-blurred-screen.patch new file mode 100644 index 000000000..93a6247bf --- /dev/null +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0010-Fix-glimagesink-wayland-resize-showed-blurred-screen.patch @@ -0,0 +1,30 @@ +From 057c8d382366f51501a014749f953ce4b702c076 Mon Sep 17 00:00:00 2001 +From: Haihua Hu +Date: Tue, 8 Dec 2015 16:06:34 +0800 +Subject: [PATCH] Fix glimagesink wayland resize showed blurred screen + +For imx, wl_egl_window type is not a wl_proxy object. Can not set +queue to wl_egl_window object. + +Upstream Status: Inappropriate [i.MX specific] + +Signed-off-by: Haihua Hu +Signed-off-by: Lyon Wang +--- + gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c +index da35bf06d666..b20be22f1fbf 100644 +--- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c ++++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c +@@ -325,9 +325,6 @@ create_surfaces (GstGLWindowWaylandEGL * window_egl) + + window_egl->window.native = + wl_egl_window_create (window_egl->window.surface, width, height); +- if (window_egl->window.surface_queue) +- wl_proxy_set_queue ((struct wl_proxy *) window_egl->window.native, +- window_egl->window.surface_queue); + } + } + diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0011-support-video-crop-for-glimagesink.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0011-support-video-crop-for-glimagesink.patch new file mode 100644 index 000000000..d06a56658 --- /dev/null +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0011-support-video-crop-for-glimagesink.patch @@ -0,0 +1,149 @@ +From 226e80315925bb722cfdd5716e078832f3f6b3c4 Mon Sep 17 00:00:00 2001 +From: Haihua Hu +Date: Fri, 13 Nov 2015 10:51:25 +0800 +Subject: [PATCH] support video crop for glimagesink + +1.Add video crop meta copy in glupload +2.Calculate the new texture coordinate in vertices array and bind to buffer object +3.Make glimagesink only updating vertices array when video crop meta changed + +Upstream-Status: Inappropriate [i.MX specific] + +Signed-off-by: Haihua Hu +Signed-off-by: Lyon Wang +--- + ext/gl/gstglimagesink.c | 58 +++++++++++++++++++++++++++++++++++++++++++++ + ext/gl/gstglimagesink.h | 3 +++ + ext/gl/gstgluploadelement.c | 14 +++++++++-- + 3 files changed, 73 insertions(+), 2 deletions(-) + +diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c +index 0bac4fb1c118..196757adfbac 100644 +--- a/ext/gl/gstglimagesink.c ++++ b/ext/gl/gstglimagesink.c +@@ -601,6 +601,8 @@ gst_glimage_sink_init (GstGLImageSink * glimage_sink) + glimage_sink->handle_events = TRUE; + glimage_sink->ignore_alpha = TRUE; + glimage_sink->overlay_compositor = NULL; ++ glimage_sink->cropmeta = NULL; ++ glimage_sink->prev_cropmeta = NULL; + + glimage_sink->mview_output_mode = DEFAULT_MULTIVIEW_MODE; + glimage_sink->mview_output_flags = DEFAULT_MULTIVIEW_FLAGS; +@@ -1062,6 +1064,12 @@ gst_glimage_sink_change_state (GstElement * element, GstStateChange transition) + gst_object_unref (glimage_sink->display); + glimage_sink->display = NULL; + } ++ ++ glimage_sink->cropmeta = NULL; ++ if (glimage_sink->prev_cropmeta) ++ g_slice_free(GstVideoCropMeta, glimage_sink->prev_cropmeta); ++ glimage_sink->prev_cropmeta = NULL; ++ + break; + default: + break; +@@ -1546,6 +1554,8 @@ gst_glimage_sink_show_frame (GstVideoSink * vsink, GstBuffer * buf) + GST_VIDEO_SINK_WIDTH (glimage_sink), + GST_VIDEO_SINK_HEIGHT (glimage_sink)); + ++ glimage_sink->cropmeta = gst_buffer_get_video_crop_meta (buf); ++ + /* Ask the underlying window to redraw its content */ + if (!gst_glimage_sink_redisplay (glimage_sink)) + goto redisplay_failed; +@@ -2028,6 +2038,54 @@ gst_glimage_sink_on_draw (GstGLImageSink * gl_sink) + + gst_gl_shader_use (gl_sink->redisplay_shader); + ++ if (gl_sink->cropmeta) { ++ gint width = GST_VIDEO_SINK_WIDTH (gl_sink); ++ gint height = GST_VIDEO_SINK_HEIGHT (gl_sink); ++ ++ if (!gl_sink->prev_cropmeta){ ++ /* Initialize the previous crop meta and set all memroy to zero */ ++ gl_sink->prev_cropmeta = (GstVideoCropMeta *) g_slice_new0(GstVideoCropMeta); ++ } ++ ++ /* If crop meta not equal to the previous, recalculate the vertices */ ++ if (gl_sink->prev_cropmeta->x != gl_sink->cropmeta->x ++ || gl_sink->prev_cropmeta->y != gl_sink->cropmeta->y ++ || gl_sink->prev_cropmeta->width != gl_sink->cropmeta->width ++ || gl_sink->prev_cropmeta->height != gl_sink->cropmeta->height){ ++ ++ GLfloat crop_vertices[] = { ++ 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, ++ -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, ++ -1.0f, -1.0f, 0.0f, 0.0f, 1.0f, ++ 1.0f, -1.0f, 0.0f, 1.0f, 1.0f ++ }; ++ ++ crop_vertices[8] = (float)(gl_sink->cropmeta->x) / width; ++ crop_vertices[9] = (float)(gl_sink->cropmeta->y) / height; ++ ++ crop_vertices[3] = (float)(gl_sink->cropmeta->width + gl_sink->cropmeta->x) / width; ++ crop_vertices[4] = crop_vertices[9]; ++ ++ crop_vertices[13] = crop_vertices[8]; ++ crop_vertices[14] = (float)(gl_sink->cropmeta->height + gl_sink->cropmeta->y) / height; ++ ++ crop_vertices[18] = crop_vertices[3]; ++ crop_vertices[19] = crop_vertices[14]; ++ ++ gl->BindBuffer (GL_ARRAY_BUFFER, gl_sink->vertex_buffer); ++ gl->BufferData (GL_ARRAY_BUFFER, 4 * 5 * sizeof (GLfloat), crop_vertices, ++ GL_STATIC_DRAW); ++ ++ gl->BindBuffer (GL_ARRAY_BUFFER, 0); ++ ++ /* Store the previous crop meta */ ++ gl_sink->prev_cropmeta->x = gl_sink->cropmeta->x; ++ gl_sink->prev_cropmeta->y = gl_sink->cropmeta->y; ++ gl_sink->prev_cropmeta->width = gl_sink->cropmeta->width; ++ gl_sink->prev_cropmeta->height = gl_sink->cropmeta->height; ++ } ++ } ++ + if (gl->GenVertexArrays) + gl->BindVertexArray (gl_sink->vao); + else +diff --git a/ext/gl/gstglimagesink.h b/ext/gl/gstglimagesink.h +index 6e9b98e74a88..317055a016ed 100644 +--- a/ext/gl/gstglimagesink.h ++++ b/ext/gl/gstglimagesink.h +@@ -107,6 +107,9 @@ struct _GstGLImageSink + guint window_width; + guint window_height; + ++ GstVideoCropMeta *cropmeta; ++ GstVideoCropMeta *prev_cropmeta; ++ + GstVideoRectangle display_rect; + + GstGLShader *redisplay_shader; +diff --git a/ext/gl/gstgluploadelement.c b/ext/gl/gstgluploadelement.c +index 86e8b01e2407..1738c2f81c1d 100644 +--- a/ext/gl/gstgluploadelement.c ++++ b/ext/gl/gstgluploadelement.c +@@ -232,9 +232,19 @@ gst_gl_upload_element_prepare_output_buffer (GstBaseTransform * bt, + /* basetransform doesn't unref if they're the same */ + if (buffer == *outbuf) + gst_buffer_unref (*outbuf); +- else ++ else { ++ GstVideoCropMeta *incropmeta, *outcropmeta; ++ /* add video crop meta to out buffer if need */ ++ incropmeta = gst_buffer_get_video_crop_meta (buffer); ++ if (incropmeta) { ++ outcropmeta = gst_buffer_add_video_crop_meta (*outbuf); ++ outcropmeta->x = incropmeta->x; ++ outcropmeta->y = incropmeta->y; ++ outcropmeta->width = incropmeta->width; ++ outcropmeta->height = incropmeta->height; ++ } + bclass->copy_metadata (bt, buffer, *outbuf); +- ++ } + return GST_FLOW_OK; + } + diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0012-Add-fps-print-in-glimagesink.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0012-Add-fps-print-in-glimagesink.patch new file mode 100644 index 000000000..325ec0710 --- /dev/null +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0012-Add-fps-print-in-glimagesink.patch @@ -0,0 +1,81 @@ +From f6edb394cc6ada3ce98e2cf9021e6a2ead3b4daf Mon Sep 17 00:00:00 2001 +From: Haihua Hu +Date: Wed, 18 Nov 2015 15:10:22 +0800 +Subject: [PATCH] Add fps print in glimagesink + +In GST-1.6, Pipeline will set start time to 0 when state +change form PAUSE to READY, so get start time in state change +PLAYING_PAUSE. + +Upstream-Status: Inappropriate [i.MX specific] + +Signed-off-by: Haihua Hu +Signed-off-by: Lyon Wang +--- + ext/gl/gstglimagesink.c | 15 +++++++++++++++ + ext/gl/gstglimagesink.h | 4 ++++ + 2 files changed, 19 insertions(+) + +diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c +index 196757adfbac..185577f2a07e 100644 +--- a/ext/gl/gstglimagesink.c ++++ b/ext/gl/gstglimagesink.c +@@ -603,6 +603,8 @@ gst_glimage_sink_init (GstGLImageSink * glimage_sink) + glimage_sink->overlay_compositor = NULL; + glimage_sink->cropmeta = NULL; + glimage_sink->prev_cropmeta = NULL; ++ glimage_sink->frame_showed = 0; ++ glimage_sink->run_time = 0; + + glimage_sink->mview_output_mode = DEFAULT_MULTIVIEW_MODE; + glimage_sink->mview_output_flags = DEFAULT_MULTIVIEW_FLAGS; +@@ -978,7 +980,10 @@ gst_glimage_sink_change_state (GstElement * element, GstStateChange transition) + + switch (transition) { + case GST_STATE_CHANGE_PLAYING_TO_PAUSED: ++ { ++ glimage_sink->run_time = gst_element_get_start_time (GST_ELEMENT (glimage_sink)); + break; ++ } + case GST_STATE_CHANGE_PAUSED_TO_READY: + { + GstBuffer *buf[2]; +@@ -1070,6 +1075,14 @@ gst_glimage_sink_change_state (GstElement * element, GstStateChange transition) + g_slice_free(GstVideoCropMeta, glimage_sink->prev_cropmeta); + glimage_sink->prev_cropmeta = NULL; + ++ if (glimage_sink->run_time > 0) { ++ g_print ("Total showed frames (%lld), playing for (%"GST_TIME_FORMAT"), fps (%.3f).\n", ++ glimage_sink->frame_showed, GST_TIME_ARGS (glimage_sink->run_time), ++ (gfloat)GST_SECOND * glimage_sink->frame_showed / glimage_sink->run_time); ++ } ++ ++ glimage_sink->frame_showed = 0; ++ glimage_sink->run_time = 0; + break; + default: + break; +@@ -1568,6 +1581,8 @@ gst_glimage_sink_show_frame (GstVideoSink * vsink, GstBuffer * buf) + return GST_FLOW_ERROR; + } + ++ glimage_sink->frame_showed++; ++ + return GST_FLOW_OK; + + /* ERRORS */ +diff --git a/ext/gl/gstglimagesink.h b/ext/gl/gstglimagesink.h +index 317055a016ed..f9a052a12ed8 100644 +--- a/ext/gl/gstglimagesink.h ++++ b/ext/gl/gstglimagesink.h +@@ -125,6 +125,10 @@ struct _GstGLImageSink + GstGLStereoDownmix mview_downmix_mode; + + GstGLOverlayCompositor *overlay_compositor; ++ ++ /* fps print support */ ++ guint64 frame_showed; ++ GstClockTime run_time; + }; + + struct _GstGLImageSinkClass diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0013-glimagesink-support-video-rotation-using-transform-m.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0013-glimagesink-support-video-rotation-using-transform-m.patch new file mode 100644 index 000000000..d85a0506a --- /dev/null +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0013-glimagesink-support-video-rotation-using-transform-m.patch @@ -0,0 +1,570 @@ +From 0d53611c59d1c29f1d1cf22f62a50ae1ee21096b Mon Sep 17 00:00:00 2001 +From: Haihua Hu +Date: Mon, 9 May 2016 20:26:51 +0800 +Subject: [PATCH] glimagesink: support video rotation using transform matrix + +Add "rotate-method" to glimagesink and apply transform matrix +to vertex coordinate to control rotation. + +Upstream-Status: Accepted[1.9.1] + +https://bugzilla.gnome.org/show_bug.cgi?id=765795 + +Signed-off-by: Haihua Hu +--- + ext/gl/gstglimagesink.c | 266 ++++++++++++++++++++++++++++++++--- + ext/gl/gstglimagesink.h | 18 +++ + gst-libs/gst/gl/gstglshaderstrings.c | 11 ++ + gst-libs/gst/gl/gstglshaderstrings.h | 1 + + gst-libs/gst/gl/gstglutils.c | 60 ++++++++ + gst-libs/gst/gl/gstglutils.h | 5 + + 6 files changed, 344 insertions(+), 17 deletions(-) + +diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c +index 185577f2a07e..fb60468b361e 100644 +--- a/ext/gl/gstglimagesink.c ++++ b/ext/gl/gstglimagesink.c +@@ -120,6 +120,7 @@ G_DEFINE_TYPE (GstGLImageSinkBin, gst_gl_image_sink_bin, GST_TYPE_GL_SINK_BIN); + enum + { + PROP_BIN_0, ++ PROP_BIN_ROTATE_METHOD, + PROP_BIN_FORCE_ASPECT_RATIO, + PROP_BIN_PIXEL_ASPECT_RATIO, + PROP_BIN_HANDLE_EVENTS, +@@ -181,6 +182,39 @@ _on_client_draw (GstGLImageSink * sink, GstGLContext * context, + return ret; + } + ++#define DEFAULT_ROTATE_METHOD GST_GL_ROTATE_METHOD_IDENTITY ++ ++#define GST_TYPE_GL_ROTATE_METHOD (gst_gl_rotate_method_get_type()) ++ ++static const GEnumValue rotate_methods[] = { ++ {GST_GL_ROTATE_METHOD_IDENTITY, "Identity (no rotation)", "none"}, ++ {GST_GL_ROTATE_METHOD_90R, "Rotate clockwise 90 degrees", "clockwise"}, ++ {GST_GL_ROTATE_METHOD_180, "Rotate 180 degrees", "rotate-180"}, ++ {GST_GL_ROTATE_METHOD_90L, "Rotate counter-clockwise 90 degrees", ++ "counterclockwise"}, ++ {GST_GL_ROTATE_METHOD_FLIP_HORIZ, "Flip horizontally", "horizontal-flip"}, ++ {GST_GL_ROTATE_METHOD_FLIP_VERT, "Flip vertically", "vertical-flip"}, ++ {GST_GL_ROTATE_METHOD_FLIP_UL_LR, ++ "Flip across upper left/lower right diagonal", "upper-left-diagonal"}, ++ {GST_GL_ROTATE_METHOD_FLIP_UR_LL, ++ "Flip across upper right/lower left diagonal", "upper-right-diagonal"}, ++ {GST_GL_ROTATE_METHOD_AUTO, ++ "Select rotate method based on image-orientation tag", "automatic"}, ++ {0, NULL, NULL}, ++}; ++ ++static GType ++gst_gl_rotate_method_get_type (void) ++{ ++ static GType rotate_method_type = 0; ++ ++ if (!rotate_method_type) { ++ rotate_method_type = g_enum_register_static ("GstGLRotateMethod", ++ rotate_methods); ++ } ++ return rotate_method_type; ++} ++ + static void + gst_gl_image_sink_bin_init (GstGLImageSinkBin * self) + { +@@ -203,6 +237,12 @@ gst_gl_image_sink_bin_class_init (GstGLImageSinkBinClass * klass) + gobject_class->set_property = gst_gl_image_sink_bin_set_property; + + /* gl sink */ ++ g_object_class_install_property (gobject_class, PROP_BIN_ROTATE_METHOD, ++ g_param_spec_enum ("rotate-method", ++ "rotate method", ++ "rotate method", ++ GST_TYPE_GL_ROTATE_METHOD, DEFAULT_ROTATE_METHOD, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_BIN_FORCE_ASPECT_RATIO, + g_param_spec_boolean ("force-aspect-ratio", + "Force aspect ratio", +@@ -291,6 +331,7 @@ static void gst_glimage_sink_set_property (GObject * object, guint prop_id, + static void gst_glimage_sink_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * param_spec); + ++static gboolean gst_glimage_sink_event (GstBaseSink *sink, GstEvent * event); + static gboolean gst_glimage_sink_query (GstBaseSink * bsink, GstQuery * query); + static void gst_glimage_sink_set_context (GstElement * element, + GstContext * context); +@@ -347,6 +388,7 @@ enum + { + ARG_0, + ARG_DISPLAY, ++ PROP_ROTATE_METHOD, + PROP_FORCE_ASPECT_RATIO, + PROP_PIXEL_ASPECT_RATIO, + PROP_CONTEXT, +@@ -404,6 +446,128 @@ _display_size_to_stream_size (GstGLImageSink * gl_sink, gdouble x, + GST_TRACE ("transform %fx%f into %fx%f", x, y, *stream_x, *stream_y); + } + ++/* rotate 90 */ ++static const gfloat clockwise_matrix[] = { ++ 0.0f, -1.0f, 0.0, 0.0f, ++ 1.0f, 0.0f, 0.0, 0.0f, ++ 0.0f, 0.0f, 1.0, 0.0f, ++ 0.0f, 0.0f, 0.0, 1.0f, ++}; ++ ++/* rotate 180 */ ++static const gfloat clockwise_180_matrix[] = { ++ -1.0f, 0.0f, 0.0, 0.0f, ++ 0.0f, -1.0f, 0.0, 0.0f, ++ 0.0f, 0.0f, 1.0, 0.0f, ++ 0.0f, 0.0f, 0.0, 1.0f, ++}; ++ ++/* rotate 270 */ ++static const gfloat counterclockwise_matrix[] = { ++ 0.0f, 1.0f, 0.0, 0.0f, ++ -1.0f, 0.0f, 0.0, 0.0f, ++ 0.0f, 0.0f, 1.0, 0.0f, ++ 0.0f, 0.0f, 0.0, 1.0f, ++}; ++ ++/* horizontal-flip */ ++static const gfloat horizontal_flip_matrix[] = { ++ 1.0f, 0.0f, 0.0f, 0.0f, ++ 0.0f, -1.0f, 0.0f, 0.0f, ++ 0.0f, 0.0f, 1.0f, 0.0f, ++ 0.0f, 0.0f, 0.0f, 1.0f, ++}; ++ ++/* vertical-flip */ ++static const gfloat vertical_flip_matrix[] = { ++ -1.0f, 0.0f, 0.0f, 0.0f, ++ 0.0f, 1.0f, 0.0f, 0.0f, ++ 0.0f, 0.0f, 1.0f, 0.0f, ++ 0.0f, 0.0f, 0.0f, 1.0f, ++}; ++ ++/* upper-left-diagonal */ ++static const gfloat upper_left_matrix[] = { ++ 0.0f, 1.0f, 0.0f, 0.0f, ++ 1.0f, 0.0f, 0.0f, 0.0f, ++ 0.0f, 0.0f, 1.0f, 0.0f, ++ 0.0f, 0.0f, 0.0f, 1.0f, ++}; ++ ++/* upper-right-diagonal */ ++static const gfloat upper_right_matrix[] = { ++ 0.0f, -1.0f, 0.0f, 0.0f, ++ -1.0f, 0.0f, 0.0f, 0.0f, ++ 0.0f, 0.0f, 1.0f, 0.0f, ++ 0.0f, 0.0f, 0.0f, 1.0f, ++}; ++ ++static void ++gst_glimage_sink_set_rotate_method(GstGLImageSink *gl_sink, ++ GstGLRotateMethod method, gboolean from_tag) ++{ ++ GstGLRotateMethod tag_method; ++ GST_GLIMAGE_SINK_LOCK (gl_sink); ++ if (from_tag) ++ tag_method = method; ++ else ++ gl_sink->rotate_method = method; ++ ++ if (gl_sink->rotate_method == GST_GL_ROTATE_METHOD_AUTO) ++ method = tag_method; ++ else ++ method = gl_sink->rotate_method; ++ ++ if (method != gl_sink->current_rotate_method) ++ { ++ GST_DEBUG_OBJECT (gl_sink, "Changing method from %s to %s", ++ rotate_methods[gl_sink->current_rotate_method].value_nick, ++ rotate_methods[method].value_nick); ++ ++ switch (method) ++ { ++ case GST_GL_ROTATE_METHOD_IDENTITY: ++ gl_sink->transform_matrix = NULL; ++ gl_sink->output_mode_changed = TRUE; ++ break; ++ case GST_GL_ROTATE_METHOD_90R: ++ gl_sink->transform_matrix = clockwise_matrix; ++ gl_sink->output_mode_changed = TRUE; ++ break; ++ case GST_GL_ROTATE_METHOD_180: ++ gl_sink->transform_matrix = clockwise_180_matrix; ++ gl_sink->output_mode_changed = TRUE; ++ break; ++ case GST_GL_ROTATE_METHOD_90L: ++ gl_sink->transform_matrix = counterclockwise_matrix; ++ gl_sink->output_mode_changed = TRUE; ++ break; ++ case GST_GL_ROTATE_METHOD_FLIP_HORIZ: ++ gl_sink->transform_matrix = horizontal_flip_matrix; ++ gl_sink->output_mode_changed = TRUE; ++ break; ++ case GST_GL_ROTATE_METHOD_FLIP_VERT: ++ gl_sink->transform_matrix = vertical_flip_matrix; ++ gl_sink->output_mode_changed = TRUE; ++ break; ++ case GST_GL_ROTATE_METHOD_FLIP_UL_LR: ++ gl_sink->transform_matrix = upper_left_matrix; ++ gl_sink->output_mode_changed = TRUE; ++ break; ++ case GST_GL_ROTATE_METHOD_FLIP_UR_LL: ++ gl_sink->transform_matrix = upper_right_matrix; ++ gl_sink->output_mode_changed = TRUE; ++ break; ++ default: ++ g_assert_not_reached(); ++ break; ++ } ++ ++ gl_sink->current_rotate_method = method; ++ } ++ GST_GLIMAGE_SINK_UNLOCK (gl_sink); ++} ++ + static void + gst_glimage_sink_navigation_send_event (GstNavigation * navigation, GstStructure + * structure) +@@ -485,6 +649,13 @@ gst_glimage_sink_class_init (GstGLImageSinkClass * klass) + gobject_class->set_property = gst_glimage_sink_set_property; + gobject_class->get_property = gst_glimage_sink_get_property; + ++ g_object_class_install_property (gobject_class, PROP_ROTATE_METHOD, ++ g_param_spec_enum ("rotate-method", ++ "rotate method", ++ "rotate method", ++ GST_TYPE_GL_ROTATE_METHOD, DEFAULT_ROTATE_METHOD, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ + g_object_class_install_property (gobject_class, PROP_FORCE_ASPECT_RATIO, + g_param_spec_boolean ("force-aspect-ratio", "Force aspect ratio", + "When enabled, scaling will respect original aspect ratio", +@@ -577,6 +748,7 @@ gst_glimage_sink_class_init (GstGLImageSinkClass * klass) + + gstelement_class->change_state = gst_glimage_sink_change_state; + gstelement_class->set_context = gst_glimage_sink_set_context; ++ gstbasesink_class->event = gst_glimage_sink_event; + gstbasesink_class->query = GST_DEBUG_FUNCPTR (gst_glimage_sink_query); + gstbasesink_class->set_caps = gst_glimage_sink_set_caps; + gstbasesink_class->get_caps = gst_glimage_sink_get_caps; +@@ -610,6 +782,9 @@ gst_glimage_sink_init (GstGLImageSink * glimage_sink) + glimage_sink->mview_output_flags = DEFAULT_MULTIVIEW_FLAGS; + glimage_sink->mview_downmix_mode = DEFAULT_MULTIVIEW_DOWNMIX; + ++ glimage_sink->current_rotate_method = DEFAULT_ROTATE_METHOD; ++ glimage_sink->transform_matrix = NULL; ++ + g_mutex_init (&glimage_sink->drawing_lock); + } + +@@ -624,6 +799,9 @@ gst_glimage_sink_set_property (GObject * object, guint prop_id, + glimage_sink = GST_GLIMAGE_SINK (object); + + switch (prop_id) { ++ case PROP_ROTATE_METHOD: ++ gst_glimage_sink_set_rotate_method (glimage_sink, g_value_get_enum (value), FALSE); ++ break; + case PROP_FORCE_ASPECT_RATIO: + { + glimage_sink->keep_aspect_ratio = g_value_get_boolean (value); +@@ -691,6 +869,9 @@ gst_glimage_sink_get_property (GObject * object, guint prop_id, + glimage_sink = GST_GLIMAGE_SINK (object); + + switch (prop_id) { ++ case PROP_ROTATE_METHOD: ++ g_value_set_enum (value, glimage_sink->current_rotate_method); ++ break; + case PROP_FORCE_ASPECT_RATIO: + g_value_set_boolean (value, glimage_sink->keep_aspect_ratio); + break; +@@ -848,6 +1029,50 @@ context_error: + } + + static gboolean ++gst_glimage_sink_event (GstBaseSink *sink, GstEvent * event) ++{ ++ GstGLImageSink *gl_sink = GST_GLIMAGE_SINK (sink); ++ GstTagList *taglist; ++ gchar *orientation; ++ gboolean ret; ++ ++ GST_DEBUG_OBJECT (gl_sink, "handling %s event", GST_EVENT_TYPE_NAME (event)); ++ ++ switch (GST_EVENT_TYPE (event)) { ++ case GST_EVENT_TAG: ++ gst_event_parse_tag (event, &taglist); ++ ++ if (gst_tag_list_get_string (taglist, "image-orientation", &orientation)) { ++ if (!g_strcmp0 ("rotate-0", orientation)) ++ gst_glimage_sink_set_rotate_method (gl_sink, GST_GL_ROTATE_METHOD_IDENTITY, TRUE); ++ else if (!g_strcmp0 ("rotate-90", orientation)) ++ gst_glimage_sink_set_rotate_method (gl_sink, GST_GL_ROTATE_METHOD_90R, TRUE); ++ else if (!g_strcmp0 ("rotate-180", orientation)) ++ gst_glimage_sink_set_rotate_method (gl_sink, GST_GL_ROTATE_METHOD_180, TRUE); ++ else if (!g_strcmp0 ("rotate-270", orientation)) ++ gst_glimage_sink_set_rotate_method (gl_sink, GST_GL_ROTATE_METHOD_90L, TRUE); ++ else if (!g_strcmp0 ("flip-rotate-0", orientation)) ++ gst_glimage_sink_set_rotate_method (gl_sink, GST_GL_ROTATE_METHOD_FLIP_HORIZ, TRUE); ++ else if (!g_strcmp0 ("flip-rotate-90", orientation)) ++ gst_glimage_sink_set_rotate_method (gl_sink, GST_GL_ROTATE_METHOD_FLIP_UR_LL, TRUE); ++ else if (!g_strcmp0 ("flip-rotate-180", orientation)) ++ gst_glimage_sink_set_rotate_method (gl_sink, GST_GL_ROTATE_METHOD_FLIP_VERT, TRUE); ++ else if (!g_strcmp0 ("flip-rotate-270", orientation)) ++ gst_glimage_sink_set_rotate_method (gl_sink, GST_GL_ROTATE_METHOD_FLIP_UL_LR, TRUE); ++ ++ g_free (orientation); ++ } ++ break; ++ default: ++ break; ++ } ++ ++ ret = GST_BASE_SINK_CLASS (parent_class)->event (sink, event); ++ ++ return ret; ++} ++ ++static gboolean + gst_glimage_sink_query (GstBaseSink * bsink, GstQuery * query) + { + GstGLImageSink *glimage_sink = GST_GLIMAGE_SINK (bsink); +@@ -1817,7 +2042,10 @@ gst_glimage_sink_thread_init_redisplay (GstGLImageSink * gl_sink) + GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY, + gst_gl_shader_string_fragment_external_oes_default); + } else { +- vert_stage = gst_glsl_stage_new_default_vertex (gl_sink->context); ++ vert_stage = gst_glsl_stage_new_with_string (gl_sink->context, ++ GL_VERTEX_SHADER, GST_GLSL_VERSION_NONE, ++ GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY, ++ gst_gl_shader_string_vertex_mat4_vertex_transform); + frag_stage = gst_glsl_stage_new_default_fragment (gl_sink->context); + } + if (!vert_stage || !frag_stage) { +@@ -1943,8 +2171,16 @@ gst_glimage_sink_on_resize (GstGLImageSink * gl_sink, gint width, gint height) + + src.x = 0; + src.y = 0; +- src.w = GST_VIDEO_SINK_WIDTH (gl_sink); +- src.h = GST_VIDEO_SINK_HEIGHT (gl_sink); ++ if (gl_sink->current_rotate_method == GST_GL_ROTATE_METHOD_90R ++ || gl_sink->current_rotate_method == GST_GL_ROTATE_METHOD_90L ++ || gl_sink->current_rotate_method == GST_GL_ROTATE_METHOD_FLIP_UL_LR ++ || gl_sink->current_rotate_method == GST_GL_ROTATE_METHOD_FLIP_UR_LL) { ++ src.h = GST_VIDEO_SINK_WIDTH (gl_sink); ++ src.w = GST_VIDEO_SINK_HEIGHT (gl_sink); ++ } else { ++ src.w = GST_VIDEO_SINK_WIDTH (gl_sink); ++ src.h = GST_VIDEO_SINK_HEIGHT (gl_sink); ++ } + + dst.x = 0; + dst.y = 0; +@@ -1974,13 +2210,6 @@ gst_glimage_sink_on_resize (GstGLImageSink * gl_sink, gint width, gint height) + GST_GLIMAGE_SINK_UNLOCK (gl_sink); + } + +-static const gfloat identity_matrix[] = { +- 1.0f, 0.0f, 0.0, 0.0f, +- 0.0f, 1.0f, 0.0, 0.0f, +- 0.0f, 0.0f, 1.0, 0.0f, +- 0.0f, 0.0f, 0.0, 1.0f, +-}; +- + static void + gst_glimage_sink_on_draw (GstGLImageSink * gl_sink) + { +@@ -2109,18 +2338,21 @@ gst_glimage_sink_on_draw (GstGLImageSink * gl_sink) + gl->ActiveTexture (GL_TEXTURE0); + gl->BindTexture (gl_target, gl_sink->redisplay_texture); + gst_gl_shader_set_uniform_1i (gl_sink->redisplay_shader, "tex", 0); +- if (gl_sink->texture_target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES) { ++ { + GstVideoAffineTransformationMeta *af_meta; ++ gfloat matrix[16]; + + af_meta = + gst_buffer_get_video_affine_transformation_meta + (gl_sink->stored_buffer[0]); +- if (af_meta) +- gst_gl_shader_set_uniform_matrix_4fv (gl_sink->redisplay_shader, +- "u_transformation", 1, FALSE, af_meta->matrix); +- else +- gst_gl_shader_set_uniform_matrix_4fv (gl_sink->redisplay_shader, +- "u_transformation", 1, FALSE, identity_matrix); ++ ++ gst_gl_get_affine_transformation_meta_as_ndc (af_meta, matrix); ++ ++ if (gl_sink->transform_matrix) ++ gst_gl_multiply_matrix4 (gl_sink->transform_matrix, matrix, matrix); ++ ++ gst_gl_shader_set_uniform_matrix_4fv (gl_sink->redisplay_shader, ++ "u_transformation", 1, FALSE, matrix); + } + + gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0); +diff --git a/ext/gl/gstglimagesink.h b/ext/gl/gstglimagesink.h +index f9a052a12ed8..c0ab3ffb3b47 100644 +--- a/ext/gl/gstglimagesink.h ++++ b/ext/gl/gstglimagesink.h +@@ -44,6 +44,19 @@ GST_DEBUG_CATEGORY_EXTERN (gst_debug_glimage_sink); + #define GST_IS_GLIMAGE_SINK_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GLIMAGE_SINK)) + ++typedef enum ++{ ++ GST_GL_ROTATE_METHOD_IDENTITY, ++ GST_GL_ROTATE_METHOD_90R, ++ GST_GL_ROTATE_METHOD_180, ++ GST_GL_ROTATE_METHOD_90L, ++ GST_GL_ROTATE_METHOD_FLIP_HORIZ, ++ GST_GL_ROTATE_METHOD_FLIP_VERT, ++ GST_GL_ROTATE_METHOD_FLIP_UL_LR, ++ GST_GL_ROTATE_METHOD_FLIP_UR_LL, ++ GST_GL_ROTATE_METHOD_AUTO ++}GstGLRotateMethod; ++ + typedef struct _GstGLImageSink GstGLImageSink; + typedef struct _GstGLImageSinkClass GstGLImageSinkClass; + +@@ -126,6 +139,11 @@ struct _GstGLImageSink + + GstGLOverlayCompositor *overlay_compositor; + ++ /* current video flip method */ ++ GstGLRotateMethod current_rotate_method; ++ GstGLRotateMethod rotate_method; ++ const gfloat *transform_matrix; ++ + /* fps print support */ + guint64 frame_showed; + GstClockTime run_time; +diff --git a/gst-libs/gst/gl/gstglshaderstrings.c b/gst-libs/gst/gl/gstglshaderstrings.c +index 729be6f75100..10186f1b86ec 100644 +--- a/gst-libs/gst/gl/gstglshaderstrings.c ++++ b/gst-libs/gst/gl/gstglshaderstrings.c +@@ -35,6 +35,17 @@ const gchar *gst_gl_shader_string_vertex_default = + " v_texcoord = a_texcoord;\n" + "}\n"; + ++const gchar *gst_gl_shader_string_vertex_mat4_vertex_transform = ++ "uniform mat4 u_transformation;\n" ++ "attribute vec4 a_position;\n" ++ "attribute vec2 a_texcoord;\n" ++ "varying vec2 v_texcoord;\n" ++ "void main()\n" ++ "{\n" ++ " gl_Position = u_transformation * a_position;\n" ++ " v_texcoord = a_texcoord;\n" ++ "}\n"; ++ + const gchar *gst_gl_shader_string_vertex_mat4_texture_transform = + "uniform mat4 u_transformation;\n" + "attribute vec4 a_position;\n" +diff --git a/gst-libs/gst/gl/gstglshaderstrings.h b/gst-libs/gst/gl/gstglshaderstrings.h +index 49ea8de427c5..f9a13c8b3d92 100644 +--- a/gst-libs/gst/gl/gstglshaderstrings.h ++++ b/gst-libs/gst/gl/gstglshaderstrings.h +@@ -28,6 +28,7 @@ G_BEGIN_DECLS + extern const gchar *gst_gl_shader_string_vertex_default; + extern const gchar *gst_gl_shader_string_fragment_default; + ++extern const gchar *gst_gl_shader_string_vertex_mat4_vertex_transform; + extern const gchar *gst_gl_shader_string_vertex_mat4_texture_transform; + extern const gchar *gst_gl_shader_string_fragment_external_oes_default; + +diff --git a/gst-libs/gst/gl/gstglutils.c b/gst-libs/gst/gl/gstglutils.c +index e2e04e407ed7..a38772f10be3 100644 +--- a/gst-libs/gst/gl/gstglutils.c ++++ b/gst-libs/gst/gl/gstglutils.c +@@ -1067,3 +1067,63 @@ gst_gl_value_set_texture_target_from_mask (GValue * value, + return ret; + } + } ++ ++static const gfloat identity_matrix[] = { ++ 1.0f, 0.0f, 0.0, 0.0f, ++ 0.0f, 1.0f, 0.0, 0.0f, ++ 0.0f, 0.0f, 1.0, 0.0f, ++ 0.0f, 0.0f, 0.0, 1.0f, ++}; ++ ++static const gfloat from_ndc_matrix[] = { ++ 0.5f, 0.0f, 0.0, 0.5f, ++ 0.0f, 0.5f, 0.0, 0.5f, ++ 0.0f, 0.0f, 0.5, 0.5f, ++ 0.0f, 0.0f, 0.0, 1.0f, ++}; ++ ++static const gfloat to_ndc_matrix[] = { ++ 2.0f, 0.0f, 0.0, -1.0f, ++ 0.0f, 2.0f, 0.0, -1.0f, ++ 0.0f, 0.0f, 2.0, -1.0f, ++ 0.0f, 0.0f, 0.0, 1.0f, ++}; ++ ++void ++gst_gl_multiply_matrix4 (const gfloat * a, const gfloat * b, gfloat * result) ++{ ++ int i, j, k; ++ gfloat tmp[16] = { 0.0f }; ++ ++ if (!a || !b || !result) ++ return; ++ ++ for (i = 0; i < 4; i++) { ++ for (j = 0; j < 4; j++) { ++ for (k = 0; k < 4; k++) { ++ tmp[i + (j * 4)] += a[i + (k * 4)] * b[k + (j * 4)]; ++ } ++ } ++ } ++ ++ for (i = 0; i < 16; i++) ++ result[i] = tmp[i]; ++} ++ ++void ++gst_gl_get_affine_transformation_meta_as_ndc (GstVideoAffineTransformationMeta * ++ meta, gfloat * matrix) ++{ ++ if (!meta) { ++ int i; ++ ++ for (i = 0; i < 16; i++) { ++ matrix[i] = identity_matrix[i]; ++ } ++ } else { ++ gfloat tmp[16] = { 0.0f }; ++ ++ gst_gl_multiply_matrix4 (from_ndc_matrix, meta->matrix, tmp); ++ gst_gl_multiply_matrix4 (tmp, to_ndc_matrix, matrix); ++ } ++} +diff --git a/gst-libs/gst/gl/gstglutils.h b/gst-libs/gst/gl/gstglutils.h +index 1c5ab12344fe..fc12801978e9 100644 +--- a/gst-libs/gst/gl/gstglutils.h ++++ b/gst-libs/gst/gl/gstglutils.h +@@ -24,6 +24,7 @@ + #include + + #include ++#include + + G_BEGIN_DECLS + +@@ -116,6 +117,10 @@ gboolean gst_gl_value_set_texture_target_from_mask (GValue * value, + gboolean gst_gl_value_set_texture_target (GValue * value, GstGLTextureTarget target); + GstGLTextureTarget gst_gl_value_get_texture_target_mask (const GValue * value); + ++void gst_gl_multiply_matrix4 (const gfloat * a, const gfloat * b, gfloat * result); ++void gst_gl_get_affine_transformation_meta_as_ndc (GstVideoAffineTransformationMeta * ++ meta, gfloat * matrix); ++ + G_END_DECLS + + #endif /* __GST_GL_UTILS_H__ */ diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0014-ion-DMA-Buf-allocator-based-on-ion.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0014-ion-DMA-Buf-allocator-based-on-ion.patch new file mode 100644 index 000000000..0b63913bc --- /dev/null +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0014-ion-DMA-Buf-allocator-based-on-ion.patch @@ -0,0 +1,481 @@ +From 145ef8665f68fd716fc9def3d765973fd2c2fdd8 Mon Sep 17 00:00:00 2001 +From: Song Bing +Date: Mon, 20 Jun 2016 10:28:34 +0800 +Subject: [PATCH] ion: DMA Buf allocator based on ion. + +DMA Buf allocator based on ion. + +Upstream-Status: Pending + +https://bugzilla.gnome.org/show_bug.cgi?id=768794 +--- + configure.ac | 7 + + gst-libs/gst/Makefile.am | 10 +- + gst-libs/gst/ion/Makefile.am | 16 +++ + gst-libs/gst/ion/gstionmemory.c | 297 ++++++++++++++++++++++++++++++++++++++++ + gst-libs/gst/ion/gstionmemory.h | 72 ++++++++++ + 5 files changed, 399 insertions(+), 3 deletions(-) + create mode 100644 gst-libs/gst/ion/Makefile.am + create mode 100755 gst-libs/gst/ion/gstionmemory.c + create mode 100755 gst-libs/gst/ion/gstionmemory.h + +diff --git a/configure.ac b/configure.ac +index 63cc7161cec5..c0145ae19c76 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2003,6 +2003,12 @@ AG_GST_CHECK_FEATURE(TINYALSA, [tinyalsa], tinyalsa, [ + AC_CHECK_HEADER(tinyalsa/asoundlib.h, HAVE_TINYALSA="yes", HAVE_TINYALSA="no") + ]) + ++dnl check for ion ++translit(dnm, m, l) AM_CONDITIONAL(USE_ION, true) ++AG_GST_CHECK_FEATURE(ION, [ion], ion, [ ++ AC_CHECK_HEADER(linux/ion.h, HAVE_ION="yes", HAVE_ION="no") ++]) ++ + dnl *** ext plug-ins *** + dnl keep this list sorted alphabetically ! + +@@ -3656,6 +3662,7 @@ gst-libs/gst/uridownloader/Makefile + gst-libs/gst/wayland/Makefile + gst-libs/gst/base/Makefile + gst-libs/gst/player/Makefile ++gst-libs/gst/ion/Makefile + gst-libs/gst/video/Makefile + gst-libs/gst/audio/Makefile + sys/Makefile +diff --git a/gst-libs/gst/Makefile.am b/gst-libs/gst/Makefile.am +index 7d0b30925744..eb2031cf65b4 100644 +--- a/gst-libs/gst/Makefile.am ++++ b/gst-libs/gst/Makefile.am +@@ -10,12 +10,16 @@ if USE_WAYLAND + WAYLAND_DIR=wayland + endif + ++if USE_ION ++ION_DIR=ion ++endif ++ + SUBDIRS = uridownloader adaptivedemux interfaces basecamerabinsrc codecparsers \ +- insertbin mpegts base video audio player $(GL_DIR) $(WAYLAND_DIR) ++ insertbin mpegts base video audio player $(ION_DIR) $(GL_DIR) $(WAYLAND_DIR) + + noinst_HEADERS = gst-i18n-plugin.h gettext.h glib-compat-private.h + DIST_SUBDIRS = uridownloader adaptivedemux interfaces gl basecamerabinsrc \ +- codecparsers insertbin mpegts wayland base video audio player ++ codecparsers insertbin mpegts wayland base video audio player ion + + #dependencies + video, audio: base +@@ -24,7 +28,7 @@ adaptivedemux: uridownloader + + INDEPENDENT_SUBDIRS = \ + interfaces basecamerabinsrc codecparsers insertbin uridownloader \ +- mpegts base player $(GL_DIR) $(WAYLAND_DIR) ++ mpegts base player $(ION_DIR) $(GL_DIR) $(WAYLAND_DIR) + + .PHONY: independent-subdirs $(INDEPENDENT_SUBDIRS) + +diff --git a/gst-libs/gst/ion/Makefile.am b/gst-libs/gst/ion/Makefile.am +new file mode 100644 +index 000000000000..0a9f9f3a8e48 +--- /dev/null ++++ b/gst-libs/gst/ion/Makefile.am +@@ -0,0 +1,16 @@ ++lib_LTLIBRARIES = libgstbadion-@GST_API_VERSION@.la ++ ++libgstbadion_@GST_API_VERSION@_la_SOURCES = \ ++ gstionmemory.c ++ ++libgstbadion_@GST_API_VERSION@_la_CFLAGS = $(GST_CFLAGS) \ ++ -DGST_USE_UNSTABLE_API ++ ++libgstbadion_@GST_API_VERSION@_la_LIBADD = $(GST_LIBS) ++libgstbadion_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS) ++ ++libgstion_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/ion ++libgstion_@GST_API_VERSION@include_HEADERS = gstionmemory.h ++ ++EXTRA_DIST = ++ +diff --git a/gst-libs/gst/ion/gstionmemory.c b/gst-libs/gst/ion/gstionmemory.c +new file mode 100755 +index 000000000000..ea62ac4926c1 +--- /dev/null ++++ b/gst-libs/gst/ion/gstionmemory.c +@@ -0,0 +1,297 @@ ++/* ++ * Copyright (c) 2016, Freescale Semiconductor, Inc. All rights reserved. ++ * ++ * 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., 59 Temple Place - Suite 330, ++ * Boston, MA 02111-1307, USA. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include "gstionmemory.h" ++ ++GST_DEBUG_CATEGORY_STATIC(ion_allocator_debug); ++#define GST_CAT_DEFAULT ion_allocator_debug ++ ++#define gst_ion_allocator_parent_class parent_class ++ ++#define PAGE_ALIGN(x) (((x) + 4095) & ~4095) ++ ++G_DEFINE_TYPE(GstIONAllocator, gst_ion_allocator, GST_TYPE_ALLOCATOR) ++ ++static int ++gst_ion_open() ++{ ++ int fd = open("/dev/ion", O_RDWR); ++ if (fd < 0) ++ GST_ERROR ("open /dev/ion failed!\n"); ++ return fd; ++} ++ ++static int ++gst_ion_close(int fd) ++{ ++ int ret = close(fd); ++ if (ret < 0) ++ return -errno; ++ return ret; ++} ++ ++static int ++gst_ion_ioctl(int fd, int req, void *arg) ++{ ++ int ret = ioctl(fd, req, arg); ++ if (ret < 0) { ++ GST_ERROR ("ioctl %x failed with code %d: %s\n", req, ++ ret, strerror(errno)); ++ return -errno; ++ } ++ return ret; ++} ++ ++static int ++gst_ion_alloc(int fd, size_t len, size_t align, unsigned int heap_mask, ++ unsigned int flags, ion_user_handle_t *handle) ++{ ++ int ret; ++ struct ion_allocation_data data = { ++ .len = len, ++ .align = align, ++ .heap_id_mask = heap_mask, ++ .flags = flags, ++ }; ++ ++ if (handle == NULL) ++ return -EINVAL; ++ ++ ret = gst_ion_ioctl(fd, ION_IOC_ALLOC, &data); ++ if (ret < 0) ++ return ret; ++ *handle = data.handle; ++ return ret; ++} ++ ++static int ++gst_ion_free(int fd, ion_user_handle_t handle) ++{ ++ struct ion_handle_data data = { ++ .handle = handle, ++ }; ++ return gst_ion_ioctl(fd, ION_IOC_FREE, &data); ++} ++ ++static int ++gst_ion_map(int fd, ion_user_handle_t handle, size_t length, int prot, ++ int flags, off_t offset, unsigned char **ptr, int *map_fd) ++{ ++ int ret; ++ unsigned char *tmp_ptr; ++ struct ion_fd_data data = { ++ .handle = handle, ++ }; ++ ++ if (map_fd == NULL) ++ return -EINVAL; ++ if (ptr == NULL) ++ return -EINVAL; ++ ++ ret = gst_ion_ioctl(fd, ION_IOC_MAP, &data); ++ if (ret < 0) ++ return ret; ++ if (data.fd < 0) { ++ GST_ERROR ("map ioctl returned negative fd\n"); ++ return -EINVAL; ++ } ++ tmp_ptr = mmap(NULL, length, prot, flags, data.fd, offset); ++ if (tmp_ptr == MAP_FAILED) { ++ GST_ERROR ("mmap failed: %s\n", strerror(errno)); ++ return -errno; ++ } ++ *map_fd = data.fd; ++ *ptr = tmp_ptr; ++ return ret; ++} ++ ++static void ++gst_ion_mem_init(void) ++{ ++ GstAllocator *allocator = g_object_new(gst_ion_allocator_get_type(), NULL); ++ GstIONAllocator *self = GST_ION_ALLOCATOR (allocator); ++ gint fd; ++ ++ fd = gst_ion_open(); ++ if (fd < 0) { ++ GST_ERROR ("Could not open ion driver"); ++ g_object_unref (self); ++ return; ++ } ++ ++ self->fd = fd; ++ self->dma_allocator = gst_dmabuf_allocator_new(); ++ ++ gst_allocator_register(GST_TYPE_ION_ALLOCATOR, allocator); ++} ++ ++GstAllocator* ++gst_ion_allocator_obtain(void) ++{ ++ static GOnce ion_allocator_once = G_ONCE_INIT; ++ GstAllocator *allocator; ++ ++ g_once(&ion_allocator_once, (GThreadFunc)gst_ion_mem_init, NULL); ++ ++ allocator = gst_allocator_find(GST_TYPE_ION_ALLOCATOR); ++ if (allocator == NULL) ++ GST_WARNING("No allocator named %s found", GST_TYPE_ION_ALLOCATOR); ++ ++ return allocator; ++} ++ ++GQuark ++gst_ion_memory_quark (void) ++{ ++ static GQuark quark = 0; ++ ++ if (quark == 0) ++ quark = g_quark_from_string ("GstIONPrivate"); ++ ++ return quark; ++} ++ ++static GstMemory * ++gst_ion_alloc_alloc (GstAllocator * allocator, gint size, ++ GstAllocationParams * params) ++{ ++ GstIONAllocator *self = GST_ION_ALLOCATOR (allocator); ++ gint dmafd = -1; ++ guint8 *ptr = NULL; ++ ion_user_handle_t ionHandle; ++ gint ionSize = PAGE_ALIGN (size + params->prefix + params->padding); ++ gint err; ++ ++ if (self->fd < 0) ++ return NULL; ++ ++ err = gst_ion_alloc(self->fd, ionSize, 8, 1, 0, &ionHandle); ++ if (err) { ++ GST_ERROR ("gst_ion_alloc failed."); ++ return NULL; ++ } ++ ++ err = gst_ion_map(self->fd, ionHandle, ionSize, PROT_READ | PROT_WRITE, ++ MAP_SHARED, 0, &ptr, &dmafd); ++ if (err) { ++ GST_ERROR ("gst_ion_map failed."); ++ goto bail; ++ } ++ GST_DEBUG ("phyalloc ptr:0x%x, ionSize:%d dmafd: %d", (int32_t)ptr, ++ ionSize, dmafd); ++ ++ GstIONMemory *ion_mem = g_slice_new0 (GstIONMemory); ++ gst_memory_init (GST_MEMORY_CAST (ion_mem), GST_MEMORY_FLAG_NO_SHARE, ++ allocator, 0, size, 0, 0, size); ++ ++ ion_mem->vaddr = ptr; ++ ion_mem->size = ionSize; ++ ion_mem->handle = ionHandle; ++ ion_mem->fd = dmafd; ++ ++ GstMemory * mem = ++ gst_dmabuf_allocator_alloc(self->dma_allocator, dmafd, ionSize); ++ ++ gst_mini_object_set_qdata (GST_MINI_OBJECT (mem), GST_ION_MEMORY_QUARK, ++ ion_mem, gst_memory_unref); ++ ++ GST_LOG ("allocated memory %p by allocator %p with qdata %p\n", ++ mem, allocator, ion_mem); ++ ++ return mem; ++ ++bail: ++ gst_ion_free(self->fd, ionHandle); ++ if (ptr != MAP_FAILED) { ++ munmap(ptr, ionSize); ++ } ++ if (dmafd > 0) { ++ close(dmafd); ++ } ++ return NULL; ++} ++ ++static void ++gst_ion_alloc_free (GstAllocator * allocator, GstMemory * memory) ++{ ++ GstIONAllocator *self = GST_ION_ALLOCATOR (allocator); ++ GstIONMemory *ion_mem = (GstIONMemory *) memory; ++ ++ if (!ion_mem || self->fd < 0) ++ return; ++ ++ ion_user_handle_t ionHandle = ++ (ion_user_handle_t)ion_mem->handle; ++ munmap(ion_mem->vaddr, ion_mem->size); ++ close(ion_mem->fd); ++ gst_ion_free(self->fd, ionHandle); ++ ++ g_slice_free (GstIONMemory, ion_mem); ++} ++ ++static void ++gst_ion_allocator_dispose (GObject * object) ++{ ++ GstIONAllocator *self = GST_ION_ALLOCATOR (object); ++ ++ if (self->fd > 0) { ++ close(self->fd); ++ self->fd = -1; ++ } ++ ++ if (self->dma_allocator) ++ gst_object_unref(self->dma_allocator); ++ self->dma_allocator = NULL; ++ ++ G_OBJECT_CLASS (parent_class)->dispose (object); ++} ++ ++static void ++gst_ion_allocator_class_init (GstIONAllocatorClass * klass) ++{ ++ GObjectClass *gobject_class = G_OBJECT_CLASS (klass); ++ GstAllocatorClass *allocator_class = GST_ALLOCATOR_CLASS (klass); ++ ++ allocator_class->alloc = GST_DEBUG_FUNCPTR (gst_ion_alloc_alloc); ++ allocator_class->free = GST_DEBUG_FUNCPTR (gst_ion_alloc_free); ++ gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_ion_allocator_dispose); ++ ++ GST_DEBUG_CATEGORY_INIT(ion_allocator_debug, "ionmemory", 0, "DMA FD memory allocator based on ion"); ++} ++ ++static void ++gst_ion_allocator_init (GstIONAllocator * self) ++{ ++ GstAllocator *allocator = GST_ALLOCATOR (self); ++ ++ allocator->mem_type = GST_ALLOCATOR_ION; ++ allocator->mem_map = NULL; ++ allocator->mem_unmap = NULL; ++} ++ +diff --git a/gst-libs/gst/ion/gstionmemory.h b/gst-libs/gst/ion/gstionmemory.h +new file mode 100755 +index 000000000000..b6dca5fb9bfe +--- /dev/null ++++ b/gst-libs/gst/ion/gstionmemory.h +@@ -0,0 +1,72 @@ ++/* ++ * Copyright (c) 2016, Freescale Semiconductor, Inc. All rights reserved. ++ * ++ * 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., 59 Temple Place - Suite 330, ++ * Boston, MA 02111-1307, USA. ++ */ ++ ++#ifndef __GST_IONMEMORY_H__ ++#define __GST_IONMEMORY_H__ ++ ++#include ++#include ++ ++G_BEGIN_DECLS ++ ++typedef struct _GstIONAllocator GstIONAllocator; ++typedef struct _GstIONAllocatorClass GstIONAllocatorClass; ++typedef struct _GstIONMemory GstIONMemory; ++ ++#define GST_ALLOCATOR_ION "ionmem" ++ ++#define GST_TYPE_ION_ALLOCATOR gst_ion_allocator_get_type () ++#define GST_IS_ION_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ ++ GST_TYPE_ION_ALLOCATOR)) ++#define GST_ION_ALLOCATOR(obj) \ ++ (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_ION_ALLOCATOR, GstIONAllocator)) ++#define GST_ION_ALLOCATOR_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_ION_ALLOCATOR, GstIONAllocatorClass)) ++#define GST_ION_ALLOCATOR_CAST(obj) ((GstIONAllocator *)(obj)) ++ ++#define GST_ION_MEMORY_QUARK gst_ion_memory_quark () ++ ++struct _GstIONAllocator ++{ ++ GstAllocator parent; ++ ++ gint fd; ++ GstAllocator *dma_allocator; ++}; ++ ++struct _GstIONAllocatorClass ++{ ++ GstAllocatorClass parent; ++}; ++ ++struct _GstIONMemory { ++ GstMemory mem; ++ ++ gint fd; ++ guint8 *vaddr; ++ gsize size; ++ gint handle; ++}; ++ ++GType gst_ion_allocator_get_type (void); ++GstAllocator* gst_ion_allocator_obtain (void); ++ ++G_END_DECLS ++ ++#endif /* __GST_IONMEMORY_H__ */ diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0015-EGL_DMA_Buf-Wrong-attribute-list-type-for-EGL-1.5.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0015-EGL_DMA_Buf-Wrong-attribute-list-type-for-EGL-1.5.patch new file mode 100644 index 000000000..505fdcd34 --- /dev/null +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0015-EGL_DMA_Buf-Wrong-attribute-list-type-for-EGL-1.5.patch @@ -0,0 +1,191 @@ +From a81404f3e2ceb89f54d1b2345c7606b3863e5c71 Mon Sep 17 00:00:00 2001 +From: Song Bing +Date: Wed, 13 Jul 2016 17:15:44 +0800 +Subject: [PATCH] EGL_DMA_Buf: Wrong attribute list type for EGL 1.5 + +For EGL 1.5 spec, the attribute list type should be EGLAttrib. + +Upstream-Status: Pending +https://bugzilla.gnome.org/show_bug.cgi?id=768602 +--- + gst-libs/gst/gl/egl/gsteglimagememory.c | 78 ++++++++++++++++++++++----------- + gst-libs/gst/gl/egl/gstglcontext_egl.c | 20 +++++---- + gst-libs/gst/gl/egl/gstglcontext_egl.h | 3 ++ + 3 files changed, 66 insertions(+), 35 deletions(-) + +diff --git a/gst-libs/gst/gl/egl/gsteglimagememory.c b/gst-libs/gst/gl/egl/gsteglimagememory.c +index 46098b507c45..6c5ae47055df 100644 +--- a/gst-libs/gst/gl/egl/gsteglimagememory.c ++++ b/gst-libs/gst/gl/egl/gsteglimagememory.c +@@ -432,6 +432,9 @@ gst_egl_image_memory_from_dmabuf (GstGLContext * context, + gint fourcc; + gint atti = 0; + EGLint attribs[13]; ++#ifdef EGL_VERSION_1_5 ++ EGLAttrib attribs_1_5[13]; ++#endif + EGLImageKHR img = EGL_NO_IMAGE_KHR; + + allocator = gst_egl_image_allocator_obtain (); +@@ -442,32 +445,55 @@ gst_egl_image_memory_from_dmabuf (GstGLContext * context, + GST_VIDEO_INFO_COMP_WIDTH (in_info, plane), + GST_VIDEO_INFO_COMP_HEIGHT (in_info, plane)); + +- attribs[atti++] = EGL_WIDTH; +- attribs[atti++] = GST_VIDEO_INFO_COMP_WIDTH (in_info, plane); +- attribs[atti++] = EGL_HEIGHT; +- attribs[atti++] = GST_VIDEO_INFO_COMP_HEIGHT (in_info, plane); +- +- attribs[atti++] = EGL_LINUX_DRM_FOURCC_EXT; +- attribs[atti++] = fourcc; +- +- attribs[atti++] = EGL_DMA_BUF_PLANE0_FD_EXT; +- attribs[atti++] = dmabuf; +- +- attribs[atti++] = EGL_DMA_BUF_PLANE0_OFFSET_EXT; +- attribs[atti++] = offset; +- attribs[atti++] = EGL_DMA_BUF_PLANE0_PITCH_EXT; +- attribs[atti++] = GST_VIDEO_INFO_PLANE_STRIDE (in_info, plane); +- +- attribs[atti] = EGL_NONE; +- +- for (int i = 0; i < atti; i++) +- GST_LOG ("attr %i: %08X", i, attribs[i]); +- +- g_assert (atti == 12); +- +- img = ctx_egl->eglCreateImage (ctx_egl->egl_display, EGL_NO_CONTEXT, +- EGL_LINUX_DMA_BUF_EXT, NULL, attribs); +- ++#ifdef EGL_VERSION_1_5 ++ if (GST_GL_CHECK_GL_VERSION (ctx_egl->egl_major, ctx_egl->egl_minor, 1, 5)) { ++ attribs_1_5[atti++] = EGL_WIDTH; ++ attribs_1_5[atti++] = GST_VIDEO_INFO_COMP_WIDTH (in_info, plane); ++ attribs_1_5[atti++] = EGL_HEIGHT; ++ attribs_1_5[atti++] = GST_VIDEO_INFO_COMP_HEIGHT (in_info, plane); ++ attribs_1_5[atti++] = EGL_LINUX_DRM_FOURCC_EXT; ++ attribs_1_5[atti++] = fourcc; ++ attribs_1_5[atti++] = EGL_DMA_BUF_PLANE0_FD_EXT; ++ attribs_1_5[atti++] = dmabuf; ++ attribs_1_5[atti++] = EGL_DMA_BUF_PLANE0_OFFSET_EXT; ++ attribs_1_5[atti++] = offset; ++ attribs_1_5[atti++] = EGL_DMA_BUF_PLANE0_PITCH_EXT; ++ attribs_1_5[atti++] = GST_VIDEO_INFO_PLANE_STRIDE (in_info, plane); ++ attribs_1_5[atti] = EGL_NONE; ++ ++ for (int i = 0; i < atti; i++) ++ GST_LOG ("attr %i: %" G_GINTPTR_FORMAT, i, attribs_1_5[i]); ++ ++ g_assert (atti == 12); ++ ++ img = ctx_egl->eglCreateImage (ctx_egl->egl_display, EGL_NO_CONTEXT, ++ EGL_LINUX_DMA_BUF_EXT, NULL, attribs_1_5); ++ ++ } else ++#endif ++ { ++ attribs[atti++] = EGL_WIDTH; ++ attribs[atti++] = GST_VIDEO_INFO_COMP_WIDTH (in_info, plane); ++ attribs[atti++] = EGL_HEIGHT; ++ attribs[atti++] = GST_VIDEO_INFO_COMP_HEIGHT (in_info, plane); ++ attribs[atti++] = EGL_LINUX_DRM_FOURCC_EXT; ++ attribs[atti++] = fourcc; ++ attribs[atti++] = EGL_DMA_BUF_PLANE0_FD_EXT; ++ attribs[atti++] = dmabuf; ++ attribs[atti++] = EGL_DMA_BUF_PLANE0_OFFSET_EXT; ++ attribs[atti++] = offset; ++ attribs[atti++] = EGL_DMA_BUF_PLANE0_PITCH_EXT; ++ attribs[atti++] = GST_VIDEO_INFO_PLANE_STRIDE (in_info, plane); ++ attribs[atti] = EGL_NONE; ++ ++ for (int i = 0; i < atti; i++) ++ GST_LOG ("attr %i: %08X", i, attribs[i]); ++ ++ g_assert (atti == 12); ++ ++ img = ctx_egl->eglCreateImage (ctx_egl->egl_display, EGL_NO_CONTEXT, ++ EGL_LINUX_DMA_BUF_EXT, NULL, attribs); ++ } + if (!img) { + GST_WARNING_OBJECT (allocator, "eglCreateImage failed: %s", + gst_gl_context_egl_get_error_string (eglGetError ())); +diff --git a/gst-libs/gst/gl/egl/gstglcontext_egl.c b/gst-libs/gst/gl/egl/gstglcontext_egl.c +index ceafdf344db8..df6ba3ffd66f 100644 +--- a/gst-libs/gst/gl/egl/gstglcontext_egl.c ++++ b/gst-libs/gst/gl/egl/gstglcontext_egl.c +@@ -309,8 +309,8 @@ gst_gl_context_egl_create_context (GstGLContext * context, + GstGLContextEGL *egl; + GstGLWindow *window = NULL; + EGLNativeWindowType window_handle = (EGLNativeWindowType) 0; +- EGLint majorVersion; +- EGLint minorVersion; ++ EGLint egl_major; ++ EGLint egl_minor; + gboolean need_surface = TRUE; + guintptr external_gl_context = 0; + GstGLDisplay *display; +@@ -363,8 +363,8 @@ gst_gl_context_egl_create_context (GstGLContext * context, + } + gst_object_unref (display); + +- if (eglInitialize (egl->egl_display, &majorVersion, &minorVersion)) { +- GST_INFO ("egl initialized, version: %d.%d", majorVersion, minorVersion); ++ if (eglInitialize (egl->egl_display, &egl_major, &egl_minor)) { ++ GST_INFO ("egl initialized, version: %d.%d", egl_major, egl_minor); + } else { + g_set_error (error, GST_GL_CONTEXT_ERROR, + GST_GL_CONTEXT_ERROR_RESOURCE_UNAVAILABLE, +@@ -380,16 +380,16 @@ gst_gl_context_egl_create_context (GstGLContext * context, + gint i; + + /* egl + opengl only available with EGL 1.4+ */ +- if (majorVersion == 1 && minorVersion <= 3) { ++ if (egl_major == 1 && egl_minor <= 3) { + if ((gl_api & ~GST_GL_API_OPENGL) == GST_GL_API_NONE) { + g_set_error (error, GST_GL_CONTEXT_ERROR, GST_GL_CONTEXT_ERROR_OLD_LIBS, + "EGL version (%i.%i) too old for OpenGL support, (needed at least 1.4)", +- majorVersion, minorVersion); ++ egl_major, egl_minor); + goto failure; + } else { + GST_WARNING + ("EGL version (%i.%i) too old for OpenGL support, (needed at least 1.4)", +- majorVersion, minorVersion); ++ egl_major, egl_minor); + if (gl_api & GST_GL_API_GLES2) { + goto try_gles2; + } else { +@@ -599,7 +599,7 @@ gst_gl_context_egl_create_context (GstGLContext * context, + } + + /* EGLImage functions */ +- if (GST_GL_CHECK_GL_VERSION (majorVersion, minorVersion, 1, 5)) { ++ if (GST_GL_CHECK_GL_VERSION (egl_major, egl_minor, 1, 5)) { + egl->eglCreateImage = gst_gl_context_get_proc_address (context, + "eglCreateImage"); + egl->eglDestroyImage = gst_gl_context_get_proc_address (context, +@@ -614,7 +614,9 @@ gst_gl_context_egl_create_context (GstGLContext * context, + egl->eglCreateImage = NULL; + egl->eglDestroyImage = NULL; + } +- ++ egl->egl_major = egl_major; ++ egl->egl_minor = egl_minor; ++ + if (window) + gst_object_unref (window); + +diff --git a/gst-libs/gst/gl/egl/gstglcontext_egl.h b/gst-libs/gst/gl/egl/gstglcontext_egl.h +index 90abb03f8d8e..4a72ddf225c2 100644 +--- a/gst-libs/gst/gl/egl/gstglcontext_egl.h ++++ b/gst-libs/gst/gl/egl/gstglcontext_egl.h +@@ -46,6 +46,9 @@ struct _GstGLContextEGL { + EGLSurface egl_surface; + EGLConfig egl_config; + ++ gint egl_major; ++ gint egl_minor; ++ + GstGLAPI gl_api; + + const gchar *egl_exts; diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0016-glimagesink-Fix-horizontal-vertical-flip-matrizes.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0016-glimagesink-Fix-horizontal-vertical-flip-matrizes.patch new file mode 100644 index 000000000..95b5fe146 --- /dev/null +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0016-glimagesink-Fix-horizontal-vertical-flip-matrizes.patch @@ -0,0 +1,41 @@ +From b451128bcb719d042fe37b5cbab4efe14d92ddf1 Mon Sep 17 00:00:00 2001 +From: Haihua Hu +Date: Mon, 1 Aug 2016 14:12:35 +0800 +Subject: [PATCH] glimagesink: Fix horizontal/vertical flip matrizes + +They were swapped. + +Upstream-Status: Backport [1.9.2] + +https://bugzilla.gnome.org/show_bug.cgi?id=769371 + +Signed-off-by: Haihua Hu +--- + ext/gl/gstglimagesink.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c +index fb60468b361e..cd3147d3fcd4 100644 +--- a/ext/gl/gstglimagesink.c ++++ b/ext/gl/gstglimagesink.c +@@ -472,16 +472,16 @@ static const gfloat counterclockwise_matrix[] = { + + /* horizontal-flip */ + static const gfloat horizontal_flip_matrix[] = { +- 1.0f, 0.0f, 0.0f, 0.0f, +- 0.0f, -1.0f, 0.0f, 0.0f, ++ -1.0f, 0.0f, 0.0f, 0.0f, ++ 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f, + }; + + /* vertical-flip */ + static const gfloat vertical_flip_matrix[] = { +- -1.0f, 0.0f, 0.0f, 0.0f, +- 0.0f, 1.0f, 0.0f, 0.0f, ++ 1.0f, 0.0f, 0.0f, 0.0f, ++ 0.0f, -1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f, + }; diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0017-glwindow-Fix-glimagesink-cannot-show-frame-when-conn.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0017-glwindow-Fix-glimagesink-cannot-show-frame-when-conn.patch new file mode 100644 index 000000000..71de57068 --- /dev/null +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0017-glwindow-Fix-glimagesink-cannot-show-frame-when-conn.patch @@ -0,0 +1,68 @@ +From 76477c4516556b9cc8ba95c6402e7b45f4868937 Mon Sep 17 00:00:00 2001 +From: Haihua Hu +Date: Wed, 27 Jul 2016 10:55:01 +0800 +Subject: [PATCH] glwindow: Fix glimagesink cannot show frame when connect to + qmlglsrc + +1.When connect to qmlglsrc, x11 event loop will be replace by qt event loop + which will cause the window cannot receive event from xserver, such as resize +2.Also advertise support for the affine transformation meta in the allocation + query. + +Upstream-Status: Backport [1.9.2] + +https://bugzilla.gnome.org/show_bug.cgi?id=768160 + +Signed-off-by: Haihua Hu +--- + ext/gl/gstglimagesink.c | 2 ++ + gst-libs/gst/gl/x11/gstglwindow_x11.c | 14 +++++++++----- + 2 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c +index cd3147d3fcd4..d81fcfb42330 100644 +--- a/ext/gl/gstglimagesink.c ++++ b/ext/gl/gstglimagesink.c +@@ -1957,6 +1957,8 @@ gst_glimage_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query) + + gst_query_add_allocation_meta (query, + GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE, allocation_meta); ++ gst_query_add_allocation_meta (query, ++ GST_VIDEO_AFFINE_TRANSFORMATION_META_API_TYPE, 0); + + if (allocation_meta) + gst_structure_free (allocation_meta); +diff --git a/gst-libs/gst/gl/x11/gstglwindow_x11.c b/gst-libs/gst/gl/x11/gstglwindow_x11.c +index 67160f6d700d..bc7b9c09cf5f 100644 +--- a/gst-libs/gst/gl/x11/gstglwindow_x11.c ++++ b/gst-libs/gst/gl/x11/gstglwindow_x11.c +@@ -399,6 +399,7 @@ draw_cb (gpointer data) + GstGLWindow *window = GST_GL_WINDOW (window_x11); + + if (gst_gl_window_is_running (window)) { ++ guint width, height; + XWindowAttributes attr; + + XGetWindowAttributes (window_x11->device, window_x11->internal_win_id, +@@ -422,13 +423,16 @@ draw_cb (gpointer data) + } + } + +- if (window_x11->allow_extra_expose_events) { +- if (window->queue_resize) { +- guint width, height; ++ gst_gl_window_get_surface_dimensions (window, &width, &height); ++ if (attr.width != width || attr.height != height) { ++ width = attr.width; ++ height = attr.height; ++ gst_gl_window_queue_resize (window); ++ } + +- gst_gl_window_get_surface_dimensions (window, &width, &height); ++ if (window_x11->allow_extra_expose_events) { ++ if (window->queue_resize) + gst_gl_window_resize (window, width, height); +- } + + if (window->draw) { + GstGLContext *context = gst_gl_window_get_context (window); diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0018-ion_allocator-refine-ion-allocator-code.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0018-ion_allocator-refine-ion-allocator-code.patch new file mode 100644 index 000000000..81daa9943 --- /dev/null +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0018-ion_allocator-refine-ion-allocator-code.patch @@ -0,0 +1,369 @@ +From 8df54492568e25a91febd36190cb386be369195b Mon Sep 17 00:00:00 2001 +From: Song Bing +Date: Fri, 12 Aug 2016 09:33:00 +0800 +Subject: [PATCH] ion_allocator: refine ion allocator code. + +Refine ion allocator code and remove all compile warning. +Changed ion allocated heap to DMA. + +Upstream-Status: Pending + +https://bugzilla.gnome.org/show_bug.cgi?id=768794 +--- + gst-libs/gst/ion/gstionmemory.c | 232 ++++++++++++++-------------------------- + gst-libs/gst/ion/gstionmemory.h | 1 - + 2 files changed, 82 insertions(+), 151 deletions(-) + +diff --git a/gst-libs/gst/ion/gstionmemory.c b/gst-libs/gst/ion/gstionmemory.c +index ea62ac4926c1..4c160c94176a 100755 +--- a/gst-libs/gst/ion/gstionmemory.c ++++ b/gst-libs/gst/ion/gstionmemory.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -29,116 +30,34 @@ + #include + #include "gstionmemory.h" + +-GST_DEBUG_CATEGORY_STATIC(ion_allocator_debug); ++GST_DEBUG_CATEGORY_STATIC (ion_allocator_debug); + #define GST_CAT_DEFAULT ion_allocator_debug + + #define gst_ion_allocator_parent_class parent_class + + #define PAGE_ALIGN(x) (((x) + 4095) & ~4095) + +-G_DEFINE_TYPE(GstIONAllocator, gst_ion_allocator, GST_TYPE_ALLOCATOR) ++G_DEFINE_TYPE (GstIONAllocator, gst_ion_allocator, GST_TYPE_ALLOCATOR) + +-static int +-gst_ion_open() ++static gint ++gst_ion_ioctl (gint fd, gint req, void *arg) + { +- int fd = open("/dev/ion", O_RDWR); +- if (fd < 0) +- GST_ERROR ("open /dev/ion failed!\n"); +- return fd; +-} +- +-static int +-gst_ion_close(int fd) +-{ +- int ret = close(fd); +- if (ret < 0) +- return -errno; +- return ret; +-} +- +-static int +-gst_ion_ioctl(int fd, int req, void *arg) +-{ +- int ret = ioctl(fd, req, arg); ++ gint ret = ioctl (fd, req, arg); + if (ret < 0) { +- GST_ERROR ("ioctl %x failed with code %d: %s\n", req, +- ret, strerror(errno)); +- return -errno; +- } +- return ret; +-} +- +-static int +-gst_ion_alloc(int fd, size_t len, size_t align, unsigned int heap_mask, +- unsigned int flags, ion_user_handle_t *handle) +-{ +- int ret; +- struct ion_allocation_data data = { +- .len = len, +- .align = align, +- .heap_id_mask = heap_mask, +- .flags = flags, +- }; +- +- if (handle == NULL) +- return -EINVAL; +- +- ret = gst_ion_ioctl(fd, ION_IOC_ALLOC, &data); +- if (ret < 0) +- return ret; +- *handle = data.handle; +- return ret; +-} +- +-static int +-gst_ion_free(int fd, ion_user_handle_t handle) +-{ +- struct ion_handle_data data = { +- .handle = handle, +- }; +- return gst_ion_ioctl(fd, ION_IOC_FREE, &data); +-} +- +-static int +-gst_ion_map(int fd, ion_user_handle_t handle, size_t length, int prot, +- int flags, off_t offset, unsigned char **ptr, int *map_fd) +-{ +- int ret; +- unsigned char *tmp_ptr; +- struct ion_fd_data data = { +- .handle = handle, +- }; +- +- if (map_fd == NULL) +- return -EINVAL; +- if (ptr == NULL) +- return -EINVAL; +- +- ret = gst_ion_ioctl(fd, ION_IOC_MAP, &data); +- if (ret < 0) +- return ret; +- if (data.fd < 0) { +- GST_ERROR ("map ioctl returned negative fd\n"); +- return -EINVAL; +- } +- tmp_ptr = mmap(NULL, length, prot, flags, data.fd, offset); +- if (tmp_ptr == MAP_FAILED) { +- GST_ERROR ("mmap failed: %s\n", strerror(errno)); +- return -errno; ++ GST_ERROR ("ioctl %x failed with code %d: %s\n", req, ret, ++ strerror (errno)); + } +- *map_fd = data.fd; +- *ptr = tmp_ptr; + return ret; + } + +-static void +-gst_ion_mem_init(void) ++static void ++gst_ion_mem_init (void) + { +- GstAllocator *allocator = g_object_new(gst_ion_allocator_get_type(), NULL); ++ GstAllocator *allocator = g_object_new (gst_ion_allocator_get_type (), NULL); + GstIONAllocator *self = GST_ION_ALLOCATOR (allocator); + gint fd; + +- fd = gst_ion_open(); ++ fd = open ("/dev/ion", O_RDWR); + if (fd < 0) { + GST_ERROR ("Could not open ion driver"); + g_object_unref (self); +@@ -146,24 +65,24 @@ gst_ion_mem_init(void) + } + + self->fd = fd; +- self->dma_allocator = gst_dmabuf_allocator_new(); ++ self->dma_allocator = gst_dmabuf_allocator_new (); + +- gst_allocator_register(GST_TYPE_ION_ALLOCATOR, allocator); ++ gst_allocator_register (GST_ALLOCATOR_ION, allocator); + } + +-GstAllocator* +-gst_ion_allocator_obtain(void) ++GstAllocator * ++gst_ion_allocator_obtain (void) + { +- static GOnce ion_allocator_once = G_ONCE_INIT; +- GstAllocator *allocator; ++ static GOnce ion_allocator_once = G_ONCE_INIT; ++ GstAllocator *allocator; + +- g_once(&ion_allocator_once, (GThreadFunc)gst_ion_mem_init, NULL); ++ g_once (&ion_allocator_once, (GThreadFunc) gst_ion_mem_init, NULL); + +- allocator = gst_allocator_find(GST_TYPE_ION_ALLOCATOR); +- if (allocator == NULL) +- GST_WARNING("No allocator named %s found", GST_TYPE_ION_ALLOCATOR); ++ allocator = gst_allocator_find (GST_ALLOCATOR_ION); ++ if (allocator == NULL) ++ GST_WARNING ("No allocator named %s found", GST_ALLOCATOR_ION); + +- return allocator; ++ return allocator; + } + + GQuark +@@ -178,62 +97,69 @@ gst_ion_memory_quark (void) + } + + static GstMemory * +-gst_ion_alloc_alloc (GstAllocator * allocator, gint size, ++gst_ion_alloc_alloc (GstAllocator * allocator, gsize size, + GstAllocationParams * params) + { + GstIONAllocator *self = GST_ION_ALLOCATOR (allocator); +- gint dmafd = -1; +- guint8 *ptr = NULL; +- ion_user_handle_t ionHandle; +- gint ionSize = PAGE_ALIGN (size + params->prefix + params->padding); +- gint err; +- +- if (self->fd < 0) ++ struct ion_allocation_data allocation_data = { 0 }; ++ struct ion_fd_data fd_data = { 0 }; ++ struct ion_handle_data handle_data = { 0 }; ++ ion_user_handle_t ion_handle; ++ GstIONMemory *ion_mem; ++ GstMemory *mem; ++ gsize ion_size; ++ gint dma_fd = -1; ++ gint ret; ++ ++ if (self->fd < 0) { ++ GST_ERROR ("ion allocate param wrong"); + return NULL; ++ } + +- err = gst_ion_alloc(self->fd, ionSize, 8, 1, 0, &ionHandle); +- if (err) { +- GST_ERROR ("gst_ion_alloc failed."); ++ ion_size = PAGE_ALIGN (size + params->prefix + params->padding); ++ allocation_data.len = ion_size; ++ allocation_data.align = params->align; ++ allocation_data.heap_id_mask = ION_HEAP_TYPE_DMA_MASK; ++ allocation_data.flags = 0; ++ if (gst_ion_ioctl (self->fd, ION_IOC_ALLOC, &allocation_data) < 0) { ++ GST_ERROR ("ion allocate failed."); + return NULL; + } ++ ion_handle = allocation_data.handle; + +- err = gst_ion_map(self->fd, ionHandle, ionSize, PROT_READ | PROT_WRITE, +- MAP_SHARED, 0, &ptr, &dmafd); +- if (err) { +- GST_ERROR ("gst_ion_map failed."); ++ fd_data.handle = ion_handle; ++ ret = gst_ion_ioctl (self->fd, ION_IOC_MAP, &fd_data); ++ if (ret < 0 || fd_data.fd < 0) { ++ GST_ERROR ("map ioctl failed or returned negative fd"); + goto bail; + } +- GST_DEBUG ("phyalloc ptr:0x%x, ionSize:%d dmafd: %d", (int32_t)ptr, +- ionSize, dmafd); ++ dma_fd = fd_data.fd; + +- GstIONMemory *ion_mem = g_slice_new0 (GstIONMemory); ++ ion_mem = g_slice_new0 (GstIONMemory); + gst_memory_init (GST_MEMORY_CAST (ion_mem), GST_MEMORY_FLAG_NO_SHARE, +- allocator, 0, size, 0, 0, size); ++ allocator, NULL, ion_size, params->align, params->prefix, size); + +- ion_mem->vaddr = ptr; +- ion_mem->size = ionSize; +- ion_mem->handle = ionHandle; +- ion_mem->fd = dmafd; ++ ion_mem->size = ion_size; ++ ion_mem->handle = ion_handle; ++ ion_mem->fd = dma_fd; + +- GstMemory * mem = +- gst_dmabuf_allocator_alloc(self->dma_allocator, dmafd, ionSize); ++ mem = gst_dmabuf_allocator_alloc (self->dma_allocator, dma_fd, size); + + gst_mini_object_set_qdata (GST_MINI_OBJECT (mem), GST_ION_MEMORY_QUARK, +- ion_mem, gst_memory_unref); ++ ion_mem, (GDestroyNotify) gst_memory_unref); + +- GST_LOG ("allocated memory %p by allocator %p with qdata %p\n", +- mem, allocator, ion_mem); ++ GST_LOG ("ion allocated size: %" G_GSIZE_FORMAT "DMA FD: %d", ion_size, ++ dma_fd); + + return mem; + + bail: +- gst_ion_free(self->fd, ionHandle); +- if (ptr != MAP_FAILED) { +- munmap(ptr, ionSize); +- } +- if (dmafd > 0) { +- close(dmafd); ++ if (dma_fd >= 0) { ++ close (dma_fd); + } ++ handle_data.handle = ion_handle; ++ gst_ion_ioctl (self->fd, ION_IOC_FREE, &handle_data); ++ + return NULL; + } + +@@ -242,15 +168,20 @@ gst_ion_alloc_free (GstAllocator * allocator, GstMemory * memory) + { + GstIONAllocator *self = GST_ION_ALLOCATOR (allocator); + GstIONMemory *ion_mem = (GstIONMemory *) memory; ++ struct ion_handle_data handle_data = { 0 }; ++ ion_user_handle_t ion_handle; + +- if (!ion_mem || self->fd < 0) ++ if (self->fd < 0 || !ion_mem || ion_mem->fd < 0) { ++ GST_ERROR ("ion free param wrong"); + return; ++ } + +- ion_user_handle_t ionHandle = +- (ion_user_handle_t)ion_mem->handle; +- munmap(ion_mem->vaddr, ion_mem->size); +- close(ion_mem->fd); +- gst_ion_free(self->fd, ionHandle); ++ GST_LOG ("ion free size: %" G_GSIZE_FORMAT "DMA FD: %d", ion_mem->size, ++ ion_mem->fd); ++ close (ion_mem->fd); ++ ion_handle = (ion_user_handle_t) ion_mem->handle; ++ handle_data.handle = ion_handle; ++ gst_ion_ioctl (self->fd, ION_IOC_FREE, &handle_data); + + g_slice_free (GstIONMemory, ion_mem); + } +@@ -261,13 +192,14 @@ gst_ion_allocator_dispose (GObject * object) + GstIONAllocator *self = GST_ION_ALLOCATOR (object); + + if (self->fd > 0) { +- close(self->fd); ++ close (self->fd); + self->fd = -1; + } + +- if (self->dma_allocator) +- gst_object_unref(self->dma_allocator); +- self->dma_allocator = NULL; ++ if (self->dma_allocator) { ++ gst_object_unref (self->dma_allocator); ++ self->dma_allocator = NULL; ++ } + + G_OBJECT_CLASS (parent_class)->dispose (object); + } +@@ -282,7 +214,8 @@ gst_ion_allocator_class_init (GstIONAllocatorClass * klass) + allocator_class->free = GST_DEBUG_FUNCPTR (gst_ion_alloc_free); + gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_ion_allocator_dispose); + +- GST_DEBUG_CATEGORY_INIT(ion_allocator_debug, "ionmemory", 0, "DMA FD memory allocator based on ion"); ++ GST_DEBUG_CATEGORY_INIT (ion_allocator_debug, "ionmemory", 0, ++ "DMA FD memory allocator based on ion"); + } + + static void +@@ -294,4 +227,3 @@ gst_ion_allocator_init (GstIONAllocator * self) + allocator->mem_map = NULL; + allocator->mem_unmap = NULL; + } +- +diff --git a/gst-libs/gst/ion/gstionmemory.h b/gst-libs/gst/ion/gstionmemory.h +index b6dca5fb9bfe..406806d8d7cb 100755 +--- a/gst-libs/gst/ion/gstionmemory.h ++++ b/gst-libs/gst/ion/gstionmemory.h +@@ -59,7 +59,6 @@ struct _GstIONMemory { + GstMemory mem; + + gint fd; +- guint8 *vaddr; + gsize size; + gint handle; + }; diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0019-videocompositor-Remove-output-format-alpha-check.patch b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0019-videocompositor-Remove-output-format-alpha-check.patch new file mode 100644 index 000000000..cd0a0f6fa --- /dev/null +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad-1.8.3/0019-videocompositor-Remove-output-format-alpha-check.patch @@ -0,0 +1,32 @@ +From 1ae4df222f7c0e141e61e22228c9d69b7966f84c Mon Sep 17 00:00:00 2001 +From: Song Bing +Date: Tue, 16 Aug 2016 13:11:57 +0800 +Subject: [PATCH] videocompositor: Remove output format alpha check + +Remove output format alpha check, or output without alpha will +fail if input has alpha. + +Upstream-Status: Pending + +https://bugzilla.gnome.org/show_bug.cgi?id=769962 +--- + gst-libs/gst/video/gstvideoaggregator.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/gst-libs/gst/video/gstvideoaggregator.c b/gst-libs/gst/video/gstvideoaggregator.c +index 1254e2e53560..4bd57b482b5e 100644 +--- a/gst-libs/gst/video/gstvideoaggregator.c ++++ b/gst-libs/gst/video/gstvideoaggregator.c +@@ -777,11 +777,9 @@ gst_videoaggregator_update_src_caps (GstVideoAggregator * vagg) + g_return_val_if_fail (finfo != NULL, FALSE); + + if (at_least_one_alpha && !(finfo->flags & GST_VIDEO_FORMAT_FLAG_ALPHA)) { +- GST_ELEMENT_ERROR (vagg, CORE, NEGOTIATION, ++ GST_WARNING_OBJECT (vagg, + ("At least one of the input pads contains alpha, but configured caps don't support alpha."), + ("Either convert your inputs to not contain alpha or add a videoconvert after the aggregator")); +- ret = FALSE; +- goto done; + } + } + diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.4.5.bbappend b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.4.5.bbappend deleted file mode 100644 index bbc5c39ae..000000000 --- a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.4.5.bbappend +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright (C) 2015 Digi International - -FILESEXTRAPATHS_prepend := "${THISDIR}/${BP}:" - -SRC_URI_append_ccimx6 = " \ - file://egl-workaround-for-eglCreateContext-isn-t-thread-safe.patch \ - file://camerabin-Add-one-property-to-set-sink-element-for-video.patch \ - file://0011-videoparse-modifiy-the-videoparse-rank.patch \ - file://camerabin-examples-memory-leak-in-camerabin-examples-01.patch \ - file://camerabin-examples-memory-leak-in-camerabin-examples-02.patch \ - file://dvbsuboverlay-Set-query-ALLOCATION-need_pool-to-FALSE.patch \ - file://0002-mpegtsmux-Need-get-pid-when-create-streams.patch \ - file://0006-h263parse_fix_CPFMT_parsing.patch \ - file://0009-mpeg4videoparse-Need-detect-picture-coding-type-when.patch \ - file://0010-mpegvideoparse-Need-detect-picture-coding-type-when-.patch \ - file://0012-glfilter-Lost-frame-rate-info-when-fixate-caps.patch \ - file://0014-opencv-rename-gstopencv.c-to-gstopencv.cpp.patch \ - file://0015-opencv-Add-video-stitching-support.patch \ - file://0016-PATCH-gstaggregator-memory-leak-increasing-a-lot-aft.patch \ - file://1.4.5-Use-viv-direct-texture-to-bind-buffer.patch \ - file://0001-Support-croping-and-alignment-handling.patch \ - file://Fix-warnnig-log-in-glfilter.patch \ - file://Adding-some-fragment-shaders-for-glshader-plugin.patch \ - file://Fix-for-gl-plugin-not-built-in-wayland-backend.patch \ - file://0003-glimagesink-Add-fps-print-in-glimagesink.patch \ - file://0004-gl-fb-Support-fb-backend-for-gl-plugins.patch \ - file://0005-gl-wayland-Make-it-always-fullscreen-1024x768.patch \ - file://0007-glfilter-Fix-video-is-tearing-after-enab.patch \ - file://0008-gl-Fix-glimagesink-loop-playback-failed-in-wayland.patch \ - file://0017-MMFMWK-6778-Support-more-format-in-direct-viv.patch \ -" - - -# Revert Poky commit cdc2c8aeaa96b07dfc431a4cf0bf51ef7f8802a3 (move EGL to Wayland) -# Otherwise 'glimagesink' for X11 is not compiled and for example this sink is needed -# by 'imxcamera' application (distributed by FSL in binary form) -PACKAGECONFIG[gles2] = "--enable-gles2 --enable-egl,--disable-gles2 --disable-egl,virtual/libgles2 virtual/egl" -PACKAGECONFIG[wayland] = "--enable-wayland --disable-x11,--disable-wayland,wayland" - -# include fragment shaders -FILES_${PN}-opengl += "/usr/share/*.fs" diff --git a/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.8.3.bbappend b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.8.3.bbappend new file mode 100644 index 000000000..0bb9d4c0b --- /dev/null +++ b/meta-digi-dey/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.8.3.bbappend @@ -0,0 +1,32 @@ +# Copyright 2015-2017, Digi International Inc. + +FILESEXTRAPATHS_prepend := "${THISDIR}/${BP}:" + +SRC_URI_append_imxgpu2d = " \ + file://0001-mpegtsmux-Need-get-pid-when-create-streams.patch \ + file://0002-mpeg4videoparse-Need-detect-picture-coding-type-when.patch \ + file://0003-mpegvideoparse-Need-detect-picture-coding-type-when-.patch \ + file://0004-modifiy-the-videoparse-rank.patch \ + file://0005-glfilter-Lost-frame-rate-info-when-fixate-caps.patch \ + file://0006-opencv-Add-video-stitching-support-based-on-Open-CV.patch \ + file://0007-camerabin-Add-one-property-to-set-sink-element-for-v.patch \ + file://0008-Fix-for-gl-plugin-not-built-in-wayland-backend.patch \ + file://0009-gl-wayland-fix-loop-test-hang-in-glimagesink.patch \ + file://0010-Fix-glimagesink-wayland-resize-showed-blurred-screen.patch \ + file://0011-support-video-crop-for-glimagesink.patch \ + file://0012-Add-fps-print-in-glimagesink.patch \ + file://0013-glimagesink-support-video-rotation-using-transform-m.patch \ + file://0014-ion-DMA-Buf-allocator-based-on-ion.patch \ + file://0015-EGL_DMA_Buf-Wrong-attribute-list-type-for-EGL-1.5.patch \ + file://0016-glimagesink-Fix-horizontal-vertical-flip-matrizes.patch \ + file://0017-glwindow-Fix-glimagesink-cannot-show-frame-when-conn.patch \ + file://0018-ion_allocator-refine-ion-allocator-code.patch \ + file://0019-videocompositor-Remove-output-format-alpha-check.patch \ +" + + +# Enable 'egl' packageconfig so 'glimagesink' is compiled +PACKAGECONFIG_GL_append_imxgpu3d = " ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'egl', '', d)}" + +# include fragment shaders +FILES_${PN}-opengl += "/usr/share/*.fs"