diff options
| author | Carlos Rafael Giani <dv@pseudoterminal.org> | 2015-11-05 09:32:07 +0100 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-11-16 11:39:35 +0000 |
| commit | 4a55d12f640410fae25fec76ddf037c208abdaf9 (patch) | |
| tree | f921431447ce14184357354f248832526c272e84 | |
| parent | 8360f23bca2c3e95493ac706ec343479dd3b08dc (diff) | |
| download | poky-4a55d12f640410fae25fec76ddf037c208abdaf9.tar.gz | |
gstreamer1.0-plugins-base: upgrade to version 1.6.1
A number of patches had to be deleted in order for the recipe to work.
Patches which cannot be applied cleanly to 1.6.1 and are nontrivial to fix:
* 0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch
* handle-audio-video-decoder-error.patch
* taglist-not-send-to-down-stream-if-all-the-frame-cor.patch
Patches which were rejected by upstream:
* 0002-gstplaysink-don-t-set-async-of-custom-text-sink-to-f.patch
Patches which either were backports or accepted and integrated:
* 0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch
* 0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch
* 0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch
* do-not-change-eos-event-to-gap-event2.patch
* do-not-change-eos-event-to-gap-event3.patch
* do-not-change-eos-event-to-gap-event-if.patch
* fix-id3demux-utf16-to-utf8-issue.patch
* videobuffer_updata_alignment_update.patch
* videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch
(From OE-Core rev: f22fd450babf8c515f86334958f8ca2e0af6f19c)
Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
16 files changed, 32 insertions, 776 deletions
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc index 47f3f40110..2135ae1e8f 100644 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc +++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc | |||
| @@ -3,7 +3,7 @@ require gstreamer1.0-plugins.inc | |||
| 3 | LICENSE = "GPLv2+ & LGPLv2+" | 3 | LICENSE = "GPLv2+ & LGPLv2+" |
| 4 | 4 | ||
| 5 | DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'virtual/libx11 libxv', '', d)}" | 5 | DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'virtual/libx11 libxv', '', d)}" |
| 6 | DEPENDS += "freetype liboil util-linux" | 6 | DEPENDS += "freetype liboil util-linux iso-codes zlib" |
| 7 | 7 | ||
| 8 | inherit gettext | 8 | inherit gettext |
| 9 | 9 | ||
| @@ -12,25 +12,27 @@ PACKAGES_DYNAMIC =+ "^libgst.*" | |||
| 12 | PACKAGECONFIG ??= " \ | 12 | PACKAGECONFIG ??= " \ |
| 13 | ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \ | 13 | ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \ |
| 14 | ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)} \ | 14 | ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)} \ |
| 15 | orc ivorbis ogg theora vorbis pango \ | 15 | orc ivorbis ogg theora vorbis pango gio-unix-2.0 \ |
| 16 | " | 16 | " |
| 17 | 17 | ||
| 18 | X11DEPENDS = "virtual/libx11 libsm libxrender" | 18 | X11DEPENDS = "virtual/libx11 libsm libxrender" |
| 19 | X11ENABLEOPTS = "--enable-x --enable-xvideo --enable-xshm" | 19 | X11ENABLEOPTS = "--enable-x --enable-xvideo --enable-xshm" |
| 20 | X11DISABLEOPTS = "--disable-x --disable-xvideo --disable-xshm" | 20 | X11DISABLEOPTS = "--disable-x --disable-xvideo --disable-xshm" |
| 21 | PACKAGECONFIG[x11] = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}" | 21 | PACKAGECONFIG[x11] = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}" |
| 22 | PACKAGECONFIG[alsa] = "--enable-alsa,--disable-alsa,alsa-lib" | 22 | PACKAGECONFIG[alsa] = "--enable-alsa,--disable-alsa,alsa-lib" |
| 23 | PACKAGECONFIG[ivorbis] = "--enable-ivorbis,--disable-ivorbis,tremor" | 23 | PACKAGECONFIG[ivorbis] = "--enable-ivorbis,--disable-ivorbis,tremor" |
| 24 | PACKAGECONFIG[ogg] = "--enable-ogg,--disable-ogg,libogg" | 24 | PACKAGECONFIG[ogg] = "--enable-ogg,--disable-ogg,libogg" |
| 25 | PACKAGECONFIG[theora] = "--enable-theora,--disable-theora,libtheora" | 25 | PACKAGECONFIG[theora] = "--enable-theora,--disable-theora,libtheora" |
| 26 | PACKAGECONFIG[vorbis] = "--enable-vorbis,--disable-vorbis,libvorbis" | 26 | PACKAGECONFIG[vorbis] = "--enable-vorbis,--disable-vorbis,libvorbis" |
| 27 | PACKAGECONFIG[pango] = "--enable-pango,--disable-pango,pango" | 27 | PACKAGECONFIG[pango] = "--enable-pango,--disable-pango,pango" |
| 28 | 28 | PACKAGECONFIG[gio-unix-2.0] = "--enable-gio_unix_2_0,--disable-gio_unix_2_0,glib-2.0" | |
| 29 | 29 | PACKAGECONFIG[cdparanoia] = "--enable-cdparanoia,--disable-cdparanoia,cdparanoia" | |
| 30 | # cdparanoia and libvisual do not seem to exist anywhere in OE | 30 | |
| 31 | |||
| 32 | # libvisual does not seem to exist anywhere in OE | ||
| 31 | EXTRA_OECONF += " \ | 33 | EXTRA_OECONF += " \ |
| 34 | --enable-zlib \ | ||
| 32 | --disable-freetypetest \ | 35 | --disable-freetypetest \ |
| 33 | --disable-cdparanoia \ | ||
| 34 | --disable-libvisual \ | 36 | --disable-libvisual \ |
| 35 | " | 37 | " |
| 36 | 38 | ||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch deleted file mode 100644 index 03dca956a8..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch +++ /dev/null | |||
| @@ -1,129 +0,0 @@ | |||
| 1 | From 3781d40940d46d7e6a502092d24aac7997f6da5b Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mingke Wang <mingke.wang@freescale.com> | ||
| 3 | Date: Thu, 5 Mar 2015 12:06:23 +0800 | ||
| 4 | Subject: [PATCH 1/4] basetextoverlay: make memory copy when video buffer's | ||
| 5 | memory is ready only | ||
| 6 | |||
| 7 | 1. since gst_buffer_make_writable just lookup the refcount to determine if | ||
| 8 | a buffer is writable, and it will use _gst_buffer_copy() which don't | ||
| 9 | perform a deep memory copy even if the flag of a memory is set to | ||
| 10 | GST_MEMORY_FLAG_READONLY. So, we detect the memory flag and use | ||
| 11 | gst_buffer_copy_region with GST_BUFFER_COPY_DEEP parameter to perform | ||
| 12 | deep memory copy. if the allocator of a memory don't support mem_copy | ||
| 13 | interface, the it will return NULL, if this case, we can use | ||
| 14 | gst_buffer_make_writable() to get a shared memory buffer or the orignal | ||
| 15 | buffer if the buffer's refcount is 1. | ||
| 16 | 2. new feature is no added if caps has no feature during caps negotiation | ||
| 17 | |||
| 18 | Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=747495] | ||
| 19 | |||
| 20 | Signed-off-by: Mingke Wang <mingke.wang@freescale.com> | ||
| 21 | |||
| 22 | diff --git a/ext/pango/gstbasetextoverlay.c b/ext/pango/gstbasetextoverlay.c | ||
| 23 | index c919861..3c0a1d7 100755 | ||
| 24 | --- a/ext/pango/gstbasetextoverlay.c | ||
| 25 | +++ b/ext/pango/gstbasetextoverlay.c | ||
| 26 | @@ -747,6 +747,7 @@ gst_base_text_overlay_negotiate (GstBaseTextOverlay * overlay, GstCaps * caps) | ||
| 27 | if (f == NULL) { | ||
| 28 | f = gst_caps_features_new | ||
| 29 | (GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, NULL); | ||
| 30 | + gst_caps_set_features(overlay_caps, 0, f); | ||
| 31 | } else { | ||
| 32 | gst_caps_features_add (f, | ||
| 33 | GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION); | ||
| 34 | @@ -1890,16 +1891,71 @@ gst_base_text_overlay_push_frame (GstBaseTextOverlay * overlay, | ||
| 35 | if (gst_pad_check_reconfigure (overlay->srcpad)) | ||
| 36 | gst_base_text_overlay_negotiate (overlay, NULL); | ||
| 37 | |||
| 38 | - video_frame = gst_buffer_make_writable (video_frame); | ||
| 39 | - | ||
| 40 | if (overlay->attach_compo_to_buffer) { | ||
| 41 | GST_DEBUG_OBJECT (overlay, "Attaching text overlay image to video buffer"); | ||
| 42 | + video_frame = gst_buffer_make_writable (video_frame); | ||
| 43 | gst_buffer_add_video_overlay_composition_meta (video_frame, | ||
| 44 | overlay->composition); | ||
| 45 | /* FIXME: emulate shaded background box if want_shading=true */ | ||
| 46 | goto done; | ||
| 47 | } | ||
| 48 | |||
| 49 | + gint m = gst_buffer_n_memory(video_frame); | ||
| 50 | + gboolean mem_rdonly = FALSE; | ||
| 51 | + GstMemory *mem; | ||
| 52 | + GstBuffer *orig = video_frame; | ||
| 53 | + | ||
| 54 | + while (--m>=0) { | ||
| 55 | + mem = gst_buffer_get_memory(video_frame, m); | ||
| 56 | + if (GST_MEMORY_IS_READONLY(mem)) { | ||
| 57 | + mem_rdonly = TRUE; | ||
| 58 | + gst_memory_unref (mem); | ||
| 59 | + break; | ||
| 60 | + } | ||
| 61 | + gst_memory_unref (mem); | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + if (mem_rdonly) { | ||
| 65 | + // since gst_buffer_make_writable just lookup the refcount to determine if | ||
| 66 | + // a buffer is writable, and it will use _gst_buffer_copy() which don't | ||
| 67 | + // perform a deep memory copy even if the flag of a memory is set to | ||
| 68 | + // GST_MEMORY_FLAG_READONLY. So, we detect the memory flag and use | ||
| 69 | + // gst_buffer_copy_region with GST_BUFFER_COPY_DEEP parameter to perform | ||
| 70 | + // deep memory copy. if the allocator of a memory don't support mem_copy | ||
| 71 | + // interface, the it will return NULL, if this case, we can use | ||
| 72 | + // gst_buffer_make_writable() to get a shared memory buffer or the orignal | ||
| 73 | + // buffer if the buffer's refcount is 1. | ||
| 74 | + GstBuffer *new_buf = gst_buffer_copy_region (video_frame, | ||
| 75 | + GST_BUFFER_COPY_ALL | GST_BUFFER_COPY_DEEP, 0, -1); | ||
| 76 | + | ||
| 77 | + GST_DEBUG_OBJECT (overlay, "copy %s video frame buffer %p -> %p", | ||
| 78 | + g_type_name (GST_MINI_OBJECT_TYPE (video_frame)), video_frame, new_buf); | ||
| 79 | + | ||
| 80 | + if (!new_buf) { | ||
| 81 | + //maybe the allocator don't support mem_copy interface, the we just use | ||
| 82 | + //gst_buffer_make_writable() to get a writable buffer. | ||
| 83 | + video_frame = gst_buffer_make_writable (video_frame); | ||
| 84 | + } else { | ||
| 85 | + gst_mini_object_unref (video_frame); | ||
| 86 | + GST_BUFFER_FLAG_UNSET (new_buf, GST_BUFFER_FLAG_TAG_MEMORY); | ||
| 87 | + video_frame = new_buf; | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + if (!video_frame) { | ||
| 91 | + GST_WARNING_OBJECT (overlay, "make writable buffer failed"); | ||
| 92 | + return GST_FLOW_OK; | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + m = gst_buffer_n_memory(video_frame); | ||
| 96 | + while (--m>=0) { | ||
| 97 | + mem = gst_buffer_get_memory(video_frame, m); | ||
| 98 | + GST_MEMORY_FLAG_UNSET (mem, GST_MEMORY_FLAG_READONLY); | ||
| 99 | + gst_memory_unref (mem); | ||
| 100 | + } | ||
| 101 | + } else { | ||
| 102 | + video_frame = gst_buffer_make_writable (video_frame); | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | if (!gst_video_frame_map (&frame, &overlay->info, video_frame, | ||
| 106 | GST_MAP_READWRITE)) | ||
| 107 | goto invalid_frame; | ||
| 108 | @@ -1918,6 +1974,18 @@ gst_base_text_overlay_push_frame (GstBaseTextOverlay * overlay, | ||
| 109 | |||
| 110 | gst_video_frame_unmap (&frame); | ||
| 111 | |||
| 112 | + if (mem_rdonly && orig == video_frame) { | ||
| 113 | + //if we used the original buffer and it's mem is set to read only, | ||
| 114 | + //recover the memory ready only flag since we unset it before | ||
| 115 | + // gst_video_frame_map () | ||
| 116 | + m = gst_buffer_n_memory(video_frame); | ||
| 117 | + while (--m>=0) { | ||
| 118 | + mem = gst_buffer_get_memory(video_frame, m); | ||
| 119 | + GST_MEMORY_FLAGS(mem) |= (GST_MEMORY_FLAG_READONLY); | ||
| 120 | + gst_memory_unref (mem); | ||
| 121 | + } | ||
| 122 | + } | ||
| 123 | + | ||
| 124 | done: | ||
| 125 | |||
| 126 | return gst_pad_push (overlay->srcpad, video_frame); | ||
| 127 | -- | ||
| 128 | 1.7.9.5 | ||
| 129 | |||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch deleted file mode 100644 index 3db4724fe6..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch +++ /dev/null | |||
| @@ -1,26 +0,0 @@ | |||
| 1 | From 269f642c45d85cfd630ed490478e6bd6b71a767f Mon Sep 17 00:00:00 2001 | ||
| 2 | From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com> | ||
| 3 | Date: Tue, 16 Sep 2014 01:07:18 +0300 | ||
| 4 | Subject: [PATCH] video-frame: Don't ref buffers twice when mapping | ||
| 5 | |||
| 6 | Upstream-Status: Backport [1.5.1] | ||
| 7 | --- | ||
| 8 | gst-libs/gst/video/video-frame.c | 2 +- | ||
| 9 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 10 | |||
| 11 | diff --git a/gst-libs/gst/video/video-frame.c b/gst-libs/gst/video/video-frame.c | ||
| 12 | index 01f23c0..8a9ae96 100644 | ||
| 13 | --- a/gst-libs/gst/video/video-frame.c | ||
| 14 | +++ b/gst-libs/gst/video/video-frame.c | ||
| 15 | @@ -105,7 +105,7 @@ gst_video_frame_map_id (GstVideoFrame * frame, GstVideoInfo * info, | ||
| 16 | frame->data[i] = frame->map[0].data + info->offset[i]; | ||
| 17 | } | ||
| 18 | } | ||
| 19 | - frame->buffer = gst_buffer_ref (buffer); | ||
| 20 | + frame->buffer = buffer; | ||
| 21 | if ((flags & GST_VIDEO_FRAME_MAP_FLAG_NO_REF) == 0) | ||
| 22 | gst_buffer_ref (frame->buffer); | ||
| 23 | |||
| 24 | -- | ||
| 25 | 1.7.9.5 | ||
| 26 | |||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-gstplaysink-don-t-set-async-of-custom-text-sink-to-f.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-gstplaysink-don-t-set-async-of-custom-text-sink-to-f.patch deleted file mode 100644 index 39c146aade..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-gstplaysink-don-t-set-async-of-custom-text-sink-to-f.patch +++ /dev/null | |||
| @@ -1,31 +0,0 @@ | |||
| 1 | From 0a78555ea6c8c2f1ee27ee4707e8d7aa00ab7a66 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mingke Wang <mingke.wang@freescale.com> | ||
| 3 | Date: Thu, 19 Mar 2015 14:15:25 +0800 | ||
| 4 | Subject: [PATCH 2/4] gstplaysink: don't set async of custom text-sink to | ||
| 5 | false | ||
| 6 | |||
| 7 | set async to false lead to A/V sync problem when seeking. | ||
| 8 | the preroll need use GAP event instead of set async to false. | ||
| 9 | |||
| 10 | Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=747499] | ||
| 11 | |||
| 12 | Signed-off-by: Mingke Wang <mingke.wang@freescale.com> | ||
| 13 | |||
| 14 | diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c | ||
| 15 | old mode 100644 | ||
| 16 | new mode 100755 | ||
| 17 | index f5a2d42..fba0172 | ||
| 18 | --- a/gst/playback/gstplaysink.c | ||
| 19 | +++ b/gst/playback/gstplaysink.c | ||
| 20 | @@ -2408,7 +2408,7 @@ gen_text_chain (GstPlaySink * playsink) | ||
| 21 | G_TYPE_BOOLEAN); | ||
| 22 | if (elem) { | ||
| 23 | /* make sure the sparse subtitles don't participate in the preroll */ | ||
| 24 | - g_object_set (elem, "async", FALSE, NULL); | ||
| 25 | + //g_object_set (elem, "async", FALSE, NULL); | ||
| 26 | GST_DEBUG_OBJECT (playsink, "adding custom text sink"); | ||
| 27 | gst_bin_add (bin, chain->sink); | ||
| 28 | /* NOTE streamsynchronizer needs streams decoupled */ | ||
| 29 | -- | ||
| 30 | 1.7.9.5 | ||
| 31 | |||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch deleted file mode 100644 index c465b5ceed..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch +++ /dev/null | |||
| @@ -1,87 +0,0 @@ | |||
| 1 | From 40a293d44d1aeccf5eb8e86f23a0b13666111c5c Mon Sep 17 00:00:00 2001 | ||
| 2 | From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com> | ||
| 3 | Date: Fri, 12 Sep 2014 14:39:16 +0300 | ||
| 4 | Subject: [PATCH 2/3] video-frame: Add GST_VIDEO_FRAME_MAP_FLAG_NO_REF | ||
| 5 | |||
| 6 | This makes sure that the buffer is not reffed another time when | ||
| 7 | storing it in the GstVideoFrame, keeping it writable if it was | ||
| 8 | writable. | ||
| 9 | |||
| 10 | Upstream-Status: Backport [1.5.1] | ||
| 11 | https://bugzilla.gnome.org/show_bug.cgi?id=736118 | ||
| 12 | --- | ||
| 13 | gst-libs/gst/video/video-frame.c | 9 ++++++++- | ||
| 14 | gst-libs/gst/video/video-frame.h | 18 ++++++++++++++++++ | ||
| 15 | 2 files changed, 26 insertions(+), 1 deletion(-) | ||
| 16 | |||
| 17 | diff --git a/gst-libs/gst/video/video-frame.c b/gst-libs/gst/video/video-frame.c | ||
| 18 | index 537cf70..01f23c0 100644 | ||
| 19 | --- a/gst-libs/gst/video/video-frame.c | ||
| 20 | +++ b/gst-libs/gst/video/video-frame.c | ||
| 21 | @@ -106,6 +106,9 @@ gst_video_frame_map_id (GstVideoFrame * frame, GstVideoInfo * info, | ||
| 22 | } | ||
| 23 | } | ||
| 24 | frame->buffer = gst_buffer_ref (buffer); | ||
| 25 | + if ((flags & GST_VIDEO_FRAME_MAP_FLAG_NO_REF) == 0) | ||
| 26 | + gst_buffer_ref (frame->buffer); | ||
| 27 | + | ||
| 28 | frame->meta = meta; | ||
| 29 | |||
| 30 | /* buffer flags enhance the frame flags */ | ||
| 31 | @@ -189,11 +192,13 @@ gst_video_frame_unmap (GstVideoFrame * frame) | ||
| 32 | GstBuffer *buffer; | ||
| 33 | GstVideoMeta *meta; | ||
| 34 | gint i; | ||
| 35 | + GstMapFlags flags; | ||
| 36 | |||
| 37 | g_return_if_fail (frame != NULL); | ||
| 38 | |||
| 39 | buffer = frame->buffer; | ||
| 40 | meta = frame->meta; | ||
| 41 | + flags = frame->map[0].flags; | ||
| 42 | |||
| 43 | if (meta) { | ||
| 44 | for (i = 0; i < frame->info.finfo->n_planes; i++) { | ||
| 45 | @@ -202,7 +207,9 @@ gst_video_frame_unmap (GstVideoFrame * frame) | ||
| 46 | } else { | ||
| 47 | gst_buffer_unmap (buffer, &frame->map[0]); | ||
| 48 | } | ||
| 49 | - gst_buffer_unref (buffer); | ||
| 50 | + | ||
| 51 | + if ((flags & GST_VIDEO_FRAME_MAP_FLAG_NO_REF) == 0) | ||
| 52 | + gst_buffer_unref (frame->buffer); | ||
| 53 | } | ||
| 54 | |||
| 55 | /** | ||
| 56 | diff --git a/gst-libs/gst/video/video-frame.h b/gst-libs/gst/video/video-frame.h | ||
| 57 | index 627fab0..f8e6304 100644 | ||
| 58 | --- a/gst-libs/gst/video/video-frame.h | ||
| 59 | +++ b/gst-libs/gst/video/video-frame.h | ||
| 60 | @@ -149,6 +149,24 @@ typedef enum { | ||
| 61 | GST_VIDEO_BUFFER_FLAG_LAST = (GST_BUFFER_FLAG_LAST << 8) | ||
| 62 | } GstVideoBufferFlags; | ||
| 63 | |||
| 64 | +/** | ||
| 65 | + * GstVideoBufferFlags: | ||
| 66 | + * @GST_VIDEO_FRAME_MAP_FLAG_NO_REF: Don't take another reference of the buffer and store it in | ||
| 67 | + * the GstVideoFrame. This makes sure that the buffer stays | ||
| 68 | + * writable while the frame is mapped, but requires that the | ||
| 69 | + * buffer reference stays valid until the frame is unmapped again. | ||
| 70 | + * @GST_VIDEO_FRAME_MAP_FLAG_LAST: Offset to define more flags | ||
| 71 | + * | ||
| 72 | + * Additional mapping flags for gst_video_frame_map(). | ||
| 73 | + * | ||
| 74 | + * Since: 1.6 | ||
| 75 | + */ | ||
| 76 | +typedef enum { | ||
| 77 | + GST_VIDEO_FRAME_MAP_FLAG_NO_REF = (GST_MAP_FLAG_LAST << 0), | ||
| 78 | + GST_VIDEO_FRAME_MAP_FLAG_LAST = (GST_MAP_FLAG_LAST << 8) | ||
| 79 | + /* 8 more flags possible afterwards */ | ||
| 80 | +} GstVideoFrameMapFlags; | ||
| 81 | + | ||
| 82 | G_END_DECLS | ||
| 83 | |||
| 84 | #endif /* __GST_VIDEO_FRAME_H__ */ | ||
| 85 | -- | ||
| 86 | 1.7.9.5 | ||
| 87 | |||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch deleted file mode 100644 index 132bf06f75..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch +++ /dev/null | |||
| @@ -1,69 +0,0 @@ | |||
| 1 | From 3a7cdcdfc9c5b0d20394fe51b3b8cda23931ca6d Mon Sep 17 00:00:00 2001 | ||
| 2 | From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com> | ||
| 3 | Date: Fri, 12 Sep 2014 14:41:01 +0300 | ||
| 4 | Subject: [PATCH 3/3] videofilter: Use new GST_VIDEO_FRAME_MAP_FLAG_NO_REF | ||
| 5 | |||
| 6 | Upstream-Status: Backport [1.5.1] | ||
| 7 | https://bugzilla.gnome.org/show_bug.cgi?id=736118 | ||
| 8 | --- | ||
| 9 | gst-libs/gst/video/gstvideofilter.c | 23 ++++------------------- | ||
| 10 | 1 file changed, 4 insertions(+), 19 deletions(-) | ||
| 11 | |||
| 12 | diff --git a/gst-libs/gst/video/gstvideofilter.c b/gst-libs/gst/video/gstvideofilter.c | ||
| 13 | index e1fa2c1..874b2e8 100644 | ||
| 14 | --- a/gst-libs/gst/video/gstvideofilter.c | ||
| 15 | +++ b/gst-libs/gst/video/gstvideofilter.c | ||
| 16 | @@ -260,23 +260,15 @@ gst_video_filter_transform (GstBaseTransform * trans, GstBuffer * inbuf, | ||
| 17 | if (fclass->transform_frame) { | ||
| 18 | GstVideoFrame in_frame, out_frame; | ||
| 19 | |||
| 20 | - if (!gst_video_frame_map (&in_frame, &filter->in_info, inbuf, GST_MAP_READ)) | ||
| 21 | + if (!gst_video_frame_map (&in_frame, &filter->in_info, inbuf, | ||
| 22 | + GST_MAP_READ | GST_VIDEO_FRAME_MAP_FLAG_NO_REF)) | ||
| 23 | goto invalid_buffer; | ||
| 24 | |||
| 25 | if (!gst_video_frame_map (&out_frame, &filter->out_info, outbuf, | ||
| 26 | - GST_MAP_WRITE)) | ||
| 27 | + GST_MAP_WRITE | GST_VIDEO_FRAME_MAP_FLAG_NO_REF)) | ||
| 28 | goto invalid_buffer; | ||
| 29 | |||
| 30 | - /* GstVideoFrame has another reference, so the buffer looks unwriteable, | ||
| 31 | - * meaning that we can't attach any metas or anything to it. Other | ||
| 32 | - * map() functions like gst_buffer_map() don't get another reference | ||
| 33 | - * of the buffer and expect the buffer reference to be kept until | ||
| 34 | - * the buffer is unmapped again. */ | ||
| 35 | - gst_buffer_unref (inbuf); | ||
| 36 | - gst_buffer_unref (outbuf); | ||
| 37 | res = fclass->transform_frame (filter, &in_frame, &out_frame); | ||
| 38 | - gst_buffer_ref (inbuf); | ||
| 39 | - gst_buffer_ref (outbuf); | ||
| 40 | |||
| 41 | gst_video_frame_unmap (&out_frame); | ||
| 42 | gst_video_frame_unmap (&in_frame); | ||
| 43 | @@ -317,7 +309,7 @@ gst_video_filter_transform_ip (GstBaseTransform * trans, GstBuffer * buf) | ||
| 44 | GstVideoFrame frame; | ||
| 45 | GstMapFlags flags; | ||
| 46 | |||
| 47 | - flags = GST_MAP_READ; | ||
| 48 | + flags = GST_MAP_READ | GST_VIDEO_FRAME_MAP_FLAG_NO_REF; | ||
| 49 | |||
| 50 | if (!gst_base_transform_is_passthrough (trans)) | ||
| 51 | flags |= GST_MAP_WRITE; | ||
| 52 | @@ -325,14 +317,7 @@ gst_video_filter_transform_ip (GstBaseTransform * trans, GstBuffer * buf) | ||
| 53 | if (!gst_video_frame_map (&frame, &filter->in_info, buf, flags)) | ||
| 54 | goto invalid_buffer; | ||
| 55 | |||
| 56 | - /* GstVideoFrame has another reference, so the buffer looks unwriteable, | ||
| 57 | - * meaning that we can't attach any metas or anything to it. Other | ||
| 58 | - * map() functions like gst_buffer_map() don't get another reference | ||
| 59 | - * of the buffer and expect the buffer reference to be kept until | ||
| 60 | - * the buffer is unmapped again. */ | ||
| 61 | - gst_buffer_unref (buf); | ||
| 62 | res = fclass->transform_frame_ip (filter, &frame); | ||
| 63 | - gst_buffer_ref (buf); | ||
| 64 | |||
| 65 | gst_video_frame_unmap (&frame); | ||
| 66 | } else { | ||
| 67 | -- | ||
| 68 | 1.7.9.5 | ||
| 69 | |||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch deleted file mode 100644 index aa55de10e4..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch +++ /dev/null | |||
| @@ -1,37 +0,0 @@ | |||
| 1 | From b608d027fff6efc2d1988ebf169cbe3b2b44a61b Mon Sep 17 00:00:00 2001 | ||
| 2 | From: zhouming <b42586@freescale.com> | ||
| 3 | Date: Thu, 8 May 2014 12:01:17 +0800 | ||
| 4 | Subject: [PATCH] ENGR00312034: do not change eos event to gap event if no | ||
| 5 | data has passed to streamsynchronizer. | ||
| 6 | |||
| 7 | https://bugzilla.gnome.org/show_bug.cgi?id=727074 | ||
| 8 | |||
| 9 | Upstream-Status: Pending | ||
| 10 | |||
| 11 | Signed-off-by: zhouming <b42586@freescale.com> | ||
| 12 | --- | ||
| 13 | gst/playback/gststreamsynchronizer.c | 5 ++--- | ||
| 14 | 1 file changed, 2 insertions(+), 3 deletions(-) | ||
| 15 | |||
| 16 | diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c | ||
| 17 | index 3997d1b..3e17c55 100644 | ||
| 18 | --- a/gst/playback/gststreamsynchronizer.c | ||
| 19 | +++ b/gst/playback/gststreamsynchronizer.c | ||
| 20 | @@ -488,12 +488,11 @@ gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent, | ||
| 21 | } | ||
| 22 | g_slist_free (pads); | ||
| 23 | } else { | ||
| 24 | - /* if EOS, but no data has passed, then send something to replace EOS | ||
| 25 | - * for preroll purposes */ | ||
| 26 | + /* if EOS, but no data has passed, then send EOS event */ | ||
| 27 | if (!seen_data) { | ||
| 28 | GstEvent *gap_event; | ||
| 29 | |||
| 30 | - gap_event = gst_event_new_gap (timestamp, GST_CLOCK_TIME_NONE); | ||
| 31 | + gap_event = gst_event_new_eos (); | ||
| 32 | ret = gst_pad_push_event (srcpad, gap_event); | ||
| 33 | } else { | ||
| 34 | GstEvent *gap_event; | ||
| 35 | -- | ||
| 36 | 1.7.9.5 | ||
| 37 | |||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event2.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event2.patch deleted file mode 100755 index f24bc7cd6f..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event2.patch +++ /dev/null | |||
| @@ -1,49 +0,0 @@ | |||
| 1 | commit f9536544f5ad182b4f78d0143d1daa45dd64e624 | ||
| 2 | Author: Song Bing <b06498@freescale.com> | ||
| 3 | Date: Thu Oct 9 17:37:43 2014 +0800 | ||
| 4 | |||
| 5 | [gststreamsynchronizer] send EOS event insterd of GAP event as GAP | ||
| 6 | event has issue when A/V have different duration. | ||
| 7 | |||
| 8 | send EOS event insterd of GAP event as GAP event has issue when A/V have different duration. | ||
| 9 | |||
| 10 | Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=736655] | ||
| 11 | |||
| 12 | Signed-off-by: Song Bing <b06498@freescale.com> | ||
| 13 | |||
| 14 | diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c | ||
| 15 | index 3e17c55..ff42d72 100644 | ||
| 16 | --- a/gst/playback/gststreamsynchronizer.c | ||
| 17 | +++ b/gst/playback/gststreamsynchronizer.c | ||
| 18 | @@ -488,19 +488,24 @@ gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent, | ||
| 19 | } | ||
| 20 | g_slist_free (pads); | ||
| 21 | } else { | ||
| 22 | - /* if EOS, but no data has passed, then send EOS event */ | ||
| 23 | + /* if EOS, but no data has passed, then send something to replace EOS | ||
| 24 | + * for preroll purposes */ | ||
| 25 | if (!seen_data) { | ||
| 26 | - GstEvent *gap_event; | ||
| 27 | + GstEvent *eos_event; | ||
| 28 | |||
| 29 | - gap_event = gst_event_new_eos (); | ||
| 30 | - ret = gst_pad_push_event (srcpad, gap_event); | ||
| 31 | + /* FIXME: change to EOS event as GAP event has issue when A/V have | ||
| 32 | + * different duration */ | ||
| 33 | + eos_event = gst_event_new_eos (); | ||
| 34 | + ret = gst_pad_push_event (srcpad, eos_event); | ||
| 35 | } else { | ||
| 36 | - GstEvent *gap_event; | ||
| 37 | + GstEvent *eos_event; | ||
| 38 | |||
| 39 | /* FIXME: Also send a GAP event to let audio sinks start their | ||
| 40 | * clock in case they did not have enough data yet */ | ||
| 41 | - gap_event = gst_event_new_gap (timestamp, GST_CLOCK_TIME_NONE); | ||
| 42 | - ret = gst_pad_push_event (srcpad, gap_event); | ||
| 43 | + /* FIXME: change to EOS event as GAP event has issue when A/V have | ||
| 44 | + * different duration */ | ||
| 45 | + eos_event = gst_event_new_eos (); | ||
| 46 | + ret = gst_pad_push_event (srcpad, eos_event); | ||
| 47 | } | ||
| 48 | } | ||
| 49 | gst_object_unref (srcpad); | ||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event3.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event3.patch deleted file mode 100755 index 731be686de..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event3.patch +++ /dev/null | |||
| @@ -1,31 +0,0 @@ | |||
| 1 | commit 3f7052aac5e0118a9a9e09fff2f65091be448972 | ||
| 2 | Author: Song Bing <b06498@freescale.com> | ||
| 3 | Date: Thu Oct 23 13:35:13 2014 +0800 | ||
| 4 | |||
| 5 | [streamsynchronizer] One stream can finish playback. | ||
| 6 | |||
| 7 | As changed GAP event EOS event, so EOS will send more times, which will | ||
| 8 | cause send function return error. | ||
| 9 | Streamsynchronizer will don’t send second track EOS event if send the | ||
| 10 | first track EOS return fail. Fixed by ignore the return error. | ||
| 11 | |||
| 12 | Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=736655] | ||
| 13 | |||
| 14 | Signed-off-by: Song Bing b06498@freescale.com | ||
| 15 | |||
| 16 | diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c | ||
| 17 | index ff42d72..d1732c3 100644 | ||
| 18 | --- a/gst/playback/gststreamsynchronizer.c | ||
| 19 | +++ b/gst/playback/gststreamsynchronizer.c | ||
| 20 | @@ -482,7 +482,10 @@ gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent, | ||
| 21 | while (epad) { | ||
| 22 | pad = epad->data; | ||
| 23 | GST_DEBUG_OBJECT (pad, "Pushing EOS"); | ||
| 24 | - ret = ret && gst_pad_push_event (pad, gst_event_new_eos ()); | ||
| 25 | + /* FIXME: remove error check as GAP changed to EOS will send EOS | ||
| 26 | + * more times, which will cause return error and then don't send | ||
| 27 | + * EOS event to following tracks. */ | ||
| 28 | + gst_pad_push_event (pad, gst_event_new_eos ()); | ||
| 29 | gst_object_unref (pad); | ||
| 30 | epad = g_slist_next (epad); | ||
| 31 | } | ||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/fix-id3demux-utf16-to-utf8-issue.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/fix-id3demux-utf16-to-utf8-issue.patch deleted file mode 100755 index ef3f75fba5..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/fix-id3demux-utf16-to-utf8-issue.patch +++ /dev/null | |||
| @@ -1,54 +0,0 @@ | |||
| 1 | Author: Lyon Wang <b12696@freescale.com> | ||
| 2 | Date: Thu Oct 9 17:37:43 2014 +0800 | ||
| 3 | |||
| 4 | [id3v2frames] Bug fix for id3demux issue | ||
| 5 | |||
| 6 | Fix the issue that id3 tags utf16 charaters cannot be extreacted in id3demux | ||
| 7 | when I tried to get the id3v2 tag such as TIT2, TALB etc. it will return extrac | ||
| 8 | failed. | ||
| 9 | |||
| 10 | Checked in id3v2frame.c, When parse the UTF-16 streams, it used g_convert() to | ||
| 11 | convert the buffer from UTF-16 to UTF-8, however it will return err that this | ||
| 12 | conversion is not supported which cause the extraction failed with these UTF-16 | ||
| 13 | characters. | ||
| 14 | |||
| 15 | In the patch, use g_utf16_to_utf8() instead of g_convert, which can convert the | ||
| 16 | character format successfully. | ||
| 17 | |||
| 18 | https://bugzilla.gnome.org/show_bug.cgi?id=741144 | ||
| 19 | |||
| 20 | Upstream-Status: Backport [1.5.1] | ||
| 21 | |||
| 22 | Signed-off-by: Lyon Wang <b12696@freescale.com> | ||
| 23 | |||
| 24 | diff --git a/gst-libs/gst/tag/id3v2frames.c b/gst-libs/gst/tag/id3v2frames.c | ||
| 25 | old mode 100644 | ||
| 26 | new mode 100755 | ||
| 27 | index 3785c2a..7b9d8ac | ||
| 28 | --- a/gst-libs/gst/tag/id3v2frames.c | ||
| 29 | +++ b/gst-libs/gst/tag/id3v2frames.c | ||
| 30 | @@ -1057,14 +1057,17 @@ parse_insert_string_field (guint8 encoding, gchar * data, gint data_size, | ||
| 31 | data_size -= 2; | ||
| 32 | } | ||
| 33 | |||
| 34 | - field = g_convert (data, data_size, "UTF-8", in_encode, NULL, NULL, NULL); | ||
| 35 | - | ||
| 36 | - if (field == NULL || g_utf8_validate (field, -1, NULL) == FALSE) { | ||
| 37 | - /* As a fallback, try interpreting UTF-16 in the other endianness */ | ||
| 38 | - if (in_encode == utf16beenc) | ||
| 39 | - field = g_convert (data, data_size, "UTF-8", utf16leenc, | ||
| 40 | - NULL, NULL, NULL); | ||
| 41 | + if (in_encode == utf16beenc) { | ||
| 42 | + gunichar2 *data_utf16; | ||
| 43 | + guint i; | ||
| 44 | + data_utf16 = (gunichar2 *) data; | ||
| 45 | + for (i=0; i<(data_size>>1); i++) { | ||
| 46 | + data_utf16[i] = GUINT16_TO_LE (data_utf16[i]); | ||
| 47 | + } | ||
| 48 | } | ||
| 49 | + //field = g_convert (data, data_size, "UTF-8", in_encode, NULL, NULL, NULL); | ||
| 50 | + field = g_utf16_to_utf8((gunichar2 *)data, (glong)(data_size>>1), NULL, NULL, NULL); | ||
| 51 | + | ||
| 52 | } | ||
| 53 | |||
| 54 | break; | ||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch deleted file mode 100755 index 833ce72bb2..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch +++ /dev/null | |||
| @@ -1,64 +0,0 @@ | |||
| 1 | From bcb2b8b6f49e7c66124a4f5e07dea829d5ebfe59 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Lyon Wang <lyon.wang@freescale.com> | ||
| 3 | Date: Mon, 15 Dec 2014 16:52:07 +0800 | ||
| 4 | Subject: [PATCH] handle audio/video decoder error | ||
| 5 | |||
| 6 | When there is input data and no output data to the end of the stream, it will | ||
| 7 | send GST_ELEMENT_ERROR, So the clips playing will quit. | ||
| 8 | However, if only one of the tracks is corrupt, there is no need to quit other | ||
| 9 | tracks playing. | ||
| 10 | |||
| 11 | The patch comments the GST_ELEMENT_ERROR() and just add GST_ERROR_OBJECT() | ||
| 12 | information instead. | ||
| 13 | |||
| 14 | Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=741542] | ||
| 15 | |||
| 16 | Signed-off-by: Lyon Wang <lyon.wang@freescale.com> | ||
| 17 | --- | ||
| 18 | gst-libs/gst/audio/gstaudiodecoder.c | 5 +++-- | ||
| 19 | gst-libs/gst/video/gstvideodecoder.c | 5 +++-- | ||
| 20 | 2 files changed, 6 insertions(+), 4 deletions(-) | ||
| 21 | mode change 100644 => 100755 gst-libs/gst/audio/gstaudiodecoder.c | ||
| 22 | mode change 100644 => 100755 gst-libs/gst/video/gstvideodecoder.c | ||
| 23 | |||
| 24 | diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c | ||
| 25 | old mode 100644 | ||
| 26 | new mode 100755 | ||
| 27 | index c2e7a28..891df0a | ||
| 28 | --- a/gst-libs/gst/audio/gstaudiodecoder.c | ||
| 29 | +++ b/gst-libs/gst/audio/gstaudiodecoder.c | ||
| 30 | @@ -2123,9 +2123,10 @@ gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event) | ||
| 31 | GST_AUDIO_DECODER_STREAM_UNLOCK (dec); | ||
| 32 | |||
| 33 | if (dec->priv->ctx.had_input_data && !dec->priv->ctx.had_output_data) { | ||
| 34 | - GST_ELEMENT_ERROR (dec, STREAM, DECODE, | ||
| 35 | + /* GST_ELEMENT_ERROR (dec, STREAM, DECODE, | ||
| 36 | ("No valid frames decoded before end of stream"), | ||
| 37 | - ("no valid frames found")); | ||
| 38 | + ("no valid frames found")); */ | ||
| 39 | + GST_ERROR_OBJECT(dec, "No valid frames decoded before end of stream"); | ||
| 40 | } | ||
| 41 | |||
| 42 | /* send taglist if no valid frame is decoded util EOS */ | ||
| 43 | diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c | ||
| 44 | old mode 100644 | ||
| 45 | new mode 100755 | ||
| 46 | index ac581e1..4278bcd | ||
| 47 | --- a/gst-libs/gst/video/gstvideodecoder.c | ||
| 48 | +++ b/gst-libs/gst/video/gstvideodecoder.c | ||
| 49 | @@ -1068,9 +1068,10 @@ gst_video_decoder_sink_event_default (GstVideoDecoder * decoder, | ||
| 50 | |||
| 51 | /* Error out even if EOS was ok when we had input, but no output */ | ||
| 52 | if (ret && priv->had_input_data && !priv->had_output_data) { | ||
| 53 | - GST_ELEMENT_ERROR (decoder, STREAM, DECODE, | ||
| 54 | + /* GST_ELEMENT_ERROR (decoder, STREAM, DECODE, | ||
| 55 | ("No valid frames decoded before end of stream"), | ||
| 56 | - ("no valid frames found")); | ||
| 57 | + ("no valid frames found")); */ | ||
| 58 | + GST_ERROR_OBJECT(decoder, "No valid frames decoded before end of stream"); | ||
| 59 | } | ||
| 60 | |||
| 61 | /* Forward EOS immediately. This is required because no | ||
| 62 | -- | ||
| 63 | 1.7.9.5 | ||
| 64 | |||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch deleted file mode 100644 index 62a52b038a..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch +++ /dev/null | |||
| @@ -1,57 +0,0 @@ | |||
| 1 | From 68fa1b1425ad2c5f7c5013d0943153a8a6d0934e Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Jian Li <lj.qfy.sh@gmail.com> | ||
| 3 | Date: Wed, 24 Sep 2014 17:21:02 +0800 | ||
| 4 | Subject: [PATCH] taglist not send to down stream if all the frame corrupted | ||
| 5 | |||
| 6 | https://bugzilla.gnome.org/show_bug.cgi?id=737246 | ||
| 7 | |||
| 8 | Upstream-Status: Pending | ||
| 9 | |||
| 10 | Signed-off-by: Jian Li <lj.qfy.sh@gmail.com> | ||
| 11 | --- | ||
| 12 | gst-libs/gst/audio/gstaudiodecoder.c | 9 +++++++++ | ||
| 13 | gst-libs/gst/video/gstvideodecoder.c | 8 ++++++++ | ||
| 14 | 2 files changed, 17 insertions(+) | ||
| 15 | |||
| 16 | diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c | ||
| 17 | index 3504678..3d69efe 100644 | ||
| 18 | --- a/gst-libs/gst/audio/gstaudiodecoder.c | ||
| 19 | +++ b/gst-libs/gst/audio/gstaudiodecoder.c | ||
| 20 | @@ -2083,6 +2083,15 @@ gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event) | ||
| 21 | gst_audio_decoder_drain (dec); | ||
| 22 | GST_AUDIO_DECODER_STREAM_UNLOCK (dec); | ||
| 23 | |||
| 24 | + /* send taglist if no valid frame is decoded util EOS */ | ||
| 25 | + if (dec->priv->taglist && dec->priv->taglist_changed) { | ||
| 26 | + GST_DEBUG_OBJECT (dec, "codec tag %" GST_PTR_FORMAT, dec->priv->taglist); | ||
| 27 | + if (!gst_tag_list_is_empty (dec->priv->taglist)) | ||
| 28 | + gst_audio_decoder_push_event (dec, | ||
| 29 | + gst_event_new_tag (gst_tag_list_ref (dec->priv->taglist))); | ||
| 30 | + dec->priv->taglist_changed = FALSE; | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | /* Forward EOS because no buffer or serialized event will come after | ||
| 34 | * EOS and nothing could trigger another _finish_frame() call. */ | ||
| 35 | ret = gst_audio_decoder_push_event (dec, event); | ||
| 36 | diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c | ||
| 37 | index dd8abe3..d9bfe4d 100644 | ||
| 38 | --- a/gst-libs/gst/video/gstvideodecoder.c | ||
| 39 | +++ b/gst-libs/gst/video/gstvideodecoder.c | ||
| 40 | @@ -1024,6 +1024,14 @@ gst_video_decoder_sink_event_default (GstVideoDecoder * decoder, | ||
| 41 | * parent class' ::sink_event() until a later time. | ||
| 42 | */ | ||
| 43 | forward_immediate = TRUE; | ||
| 44 | + | ||
| 45 | + /* send taglist if no valid frame is decoded util EOS */ | ||
| 46 | + if (decoder->priv->tags && decoder->priv->tags_changed) { | ||
| 47 | + gst_video_decoder_push_event (decoder, | ||
| 48 | + gst_event_new_tag (gst_tag_list_ref (decoder->priv->tags))); | ||
| 49 | + decoder->priv->tags_changed = FALSE; | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | break; | ||
| 53 | } | ||
| 54 | case GST_EVENT_GAP: | ||
| 55 | -- | ||
| 56 | 1.7.9.5 | ||
| 57 | |||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videobuffer_updata_alignment_update.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videobuffer_updata_alignment_update.patch deleted file mode 100755 index 8cfda955a7..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videobuffer_updata_alignment_update.patch +++ /dev/null | |||
| @@ -1,53 +0,0 @@ | |||
| 1 | commit 88d253ea23b06289df40401160b606323f16c910 | ||
| 2 | Author: Song Bing <b06498@freescale.com> | ||
| 3 | Date: Mon Dec 15 09:34:35 2014 +0800 | ||
| 4 | |||
| 5 | videopool: update video alignment after video alignment | ||
| 6 | |||
| 7 | Video buffer pool will update video alignment to respect stride alignment | ||
| 8 | requirement. But haven't update it to video alignment in configure. | ||
| 9 | Which will cause user get wrong video alignment. | ||
| 10 | |||
| 11 | https://bugzilla.gnome.org/show_bug.cgi?id=741501 | ||
| 12 | |||
| 13 | Upstream-Status: Backport [1.5.1] | ||
| 14 | |||
| 15 | Signed-off-by: Song Bing <b06498@freescale.com> | ||
| 16 | diff --git a/gst-libs/gst/video/gstvideopool.c b/gst-libs/gst/video/gstvideopool.c | ||
| 17 | index 4475f45..acef594 100644 | ||
| 18 | --- a/gst-libs/gst/video/gstvideopool.c | ||
| 19 | +++ b/gst-libs/gst/video/gstvideopool.c | ||
| 20 | @@ -167,6 +167,7 @@ video_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config) | ||
| 21 | /* get an apply the alignment to the info */ | ||
| 22 | gst_buffer_pool_config_get_video_alignment (config, &priv->video_align); | ||
| 23 | gst_video_info_align (&info, &priv->video_align); | ||
| 24 | + gst_buffer_pool_config_set_video_alignment (config, &priv->video_align); | ||
| 25 | } | ||
| 26 | priv->info = info; | ||
| 27 | |||
| 28 | diff --git a/sys/ximage/ximagepool.c b/sys/ximage/ximagepool.c | ||
| 29 | index 6cc2cfa..6a1cbc9 100644 | ||
| 30 | --- a/sys/ximage/ximagepool.c | ||
| 31 | +++ b/sys/ximage/ximagepool.c | ||
| 32 | @@ -597,6 +597,8 @@ ximage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config) | ||
| 33 | /* do padding and alignment */ | ||
| 34 | gst_video_info_align (&info, &priv->align); | ||
| 35 | |||
| 36 | + gst_buffer_pool_config_set_video_alignment (config, &priv->align); | ||
| 37 | + | ||
| 38 | /* we need the video metadata too now */ | ||
| 39 | priv->add_metavideo = TRUE; | ||
| 40 | } else { | ||
| 41 | diff --git a/sys/xvimage/xvimagepool.c b/sys/xvimage/xvimagepool.c | ||
| 42 | index 244a51a..34b1ab2 100644 | ||
| 43 | --- a/sys/xvimage/xvimagepool.c | ||
| 44 | +++ b/sys/xvimage/xvimagepool.c | ||
| 45 | @@ -124,6 +124,8 @@ xvimage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config) | ||
| 46 | /* do padding and alignment */ | ||
| 47 | gst_video_info_align (&info, &priv->align); | ||
| 48 | |||
| 49 | + gst_buffer_pool_config_set_video_alignment (config, &priv->align); | ||
| 50 | + | ||
| 51 | /* we need the video metadata too now */ | ||
| 52 | priv->add_metavideo = TRUE; | ||
| 53 | } else { | ||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch deleted file mode 100644 index b476969111..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch +++ /dev/null | |||
| @@ -1,46 +0,0 @@ | |||
| 1 | From c3f7d36b992a3cbcee3386dea85720f3cb04e1ff Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Song Bing <b06498@freescale.com> | ||
| 3 | Date: Fri, 27 Mar 2015 13:39:43 +0800 | ||
| 4 | Subject: [PATCH] videoencoder: Keep sticky events around when doing a soft | ||
| 5 | reset | ||
| 6 | |||
| 7 | The current code will first discard all frames, and then tries to copy | ||
| 8 | all sticky events from the (now discarded) frames. Let's change the order. | ||
| 9 | |||
| 10 | https://bugzilla.gnome.org/show_bug.cgi?id=746865 | ||
| 11 | |||
| 12 | Upstream-Status: Accepted | ||
| 13 | |||
| 14 | --- | ||
| 15 | gst-libs/gst/video/gstvideoencoder.c | 8 ++++---- | ||
| 16 | 1 file changed, 4 insertions(+), 4 deletions(-) | ||
| 17 | |||
| 18 | diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c | ||
| 19 | index 614ba2d..4c5b111 100644 | ||
| 20 | --- a/gst-libs/gst/video/gstvideoencoder.c | ||
| 21 | +++ b/gst-libs/gst/video/gstvideoencoder.c | ||
| 22 | @@ -340,10 +340,6 @@ gst_video_encoder_reset (GstVideoEncoder * encoder, gboolean hard) | ||
| 23 | |||
| 24 | priv->drained = TRUE; | ||
| 25 | |||
| 26 | - g_list_foreach (priv->frames, (GFunc) gst_video_codec_frame_unref, NULL); | ||
| 27 | - g_list_free (priv->frames); | ||
| 28 | - priv->frames = NULL; | ||
| 29 | - | ||
| 30 | priv->bytes = 0; | ||
| 31 | priv->time = 0; | ||
| 32 | |||
| 33 | @@ -392,6 +388,10 @@ gst_video_encoder_reset (GstVideoEncoder * encoder, gboolean hard) | ||
| 34 | encoder->priv->current_frame_events); | ||
| 35 | } | ||
| 36 | |||
| 37 | + g_list_foreach (priv->frames, (GFunc) gst_video_codec_frame_unref, NULL); | ||
| 38 | + g_list_free (priv->frames); | ||
| 39 | + priv->frames = NULL; | ||
| 40 | + | ||
| 41 | GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); | ||
| 42 | |||
| 43 | return ret; | ||
| 44 | -- | ||
| 45 | 1.7.9.5 | ||
| 46 | |||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.4.5.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.4.5.bb deleted file mode 100644 index b09c2cb581..0000000000 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.4.5.bb +++ /dev/null | |||
| @@ -1,30 +0,0 @@ | |||
| 1 | include gstreamer1.0-plugins-base.inc | ||
| 2 | |||
| 3 | LIC_FILES_CHKSUM = "file://COPYING;md5=c54ce9345727175ff66d17b67ff51f58 \ | ||
| 4 | file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=a4e1830fce078028c8f0974161272607 \ | ||
| 5 | file://COPYING.LIB;md5=6762ed442b3822387a51c92d928ead0d \ | ||
| 6 | " | ||
| 7 | |||
| 8 | SRC_URI += "file://do-not-change-eos-event-to-gap-event-if.patch \ | ||
| 9 | file://get-caps-from-src-pad-when-query-caps.patch \ | ||
| 10 | file://taglist-not-send-to-down-stream-if-all-the-frame-cor.patch \ | ||
| 11 | file://fix-id3demux-utf16-to-utf8-issue.patch \ | ||
| 12 | file://handle-audio-video-decoder-error.patch \ | ||
| 13 | file://videobuffer_updata_alignment_update.patch \ | ||
| 14 | file://0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch \ | ||
| 15 | file://0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch \ | ||
| 16 | file://0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch \ | ||
| 17 | file://videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch \ | ||
| 18 | file://do-not-change-eos-event-to-gap-event2.patch \ | ||
| 19 | file://do-not-change-eos-event-to-gap-event3.patch \ | ||
| 20 | file://0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch \ | ||
| 21 | file://0002-gstplaysink-don-t-set-async-of-custom-text-sink-to-f.patch \ | ||
| 22 | file://0003-ssaparse-enhance-SSA-text-lines-parsing.patch \ | ||
| 23 | file://0004-subparse-set-need_segment-after-sink-pad-received-GS.patch \ | ||
| 24 | file://encodebin-Need-more-buffers-in-output-queue-for-bett.patch \ | ||
| 25 | " | ||
| 26 | |||
| 27 | SRC_URI[md5sum] = "357165af625c0ca353ab47c5d843920e" | ||
| 28 | SRC_URI[sha256sum] = "77bd8199e7a312d3d71de9b7ddf761a3b78560a2c2a80829d0815ca39cbd551d" | ||
| 29 | |||
| 30 | S = "${WORKDIR}/gst-plugins-base-${PV}" | ||
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.6.1.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.6.1.bb new file mode 100644 index 0000000000..d4f5d50f86 --- /dev/null +++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.6.1.bb | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | include gstreamer1.0-plugins-base.inc | ||
| 2 | |||
| 3 | LIC_FILES_CHKSUM = "file://COPYING;md5=c54ce9345727175ff66d17b67ff51f58 \ | ||
| 4 | file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=a4e1830fce078028c8f0974161272607 \ | ||
| 5 | file://COPYING.LIB;md5=6762ed442b3822387a51c92d928ead0d \ | ||
| 6 | " | ||
| 7 | |||
| 8 | SRC_URI += "file://get-caps-from-src-pad-when-query-caps.patch \ | ||
| 9 | file://0003-ssaparse-enhance-SSA-text-lines-parsing.patch \ | ||
| 10 | file://0004-subparse-set-need_segment-after-sink-pad-received-GS.patch \ | ||
| 11 | file://encodebin-Need-more-buffers-in-output-queue-for-bett.patch \ | ||
| 12 | " | ||
| 13 | |||
| 14 | SRC_URI[md5sum] = "a89933afbe45d8f8c92d89c2f1199ecb" | ||
| 15 | SRC_URI[sha256sum] = "9533dcfaa4ee32d435483d9fa88c06b1eba6e9bb234aacd7583f207199f44ba3" | ||
| 16 | |||
| 17 | S = "${WORKDIR}/gst-plugins-base-${PV}" | ||
