[gstreamer] Update to 1.4.5
authorhschang <chang@dev3>
Fri, 30 Jan 2015 04:14:30 +0000 (13:14 +0900)
committerhschang <chang@dev3>
Thu, 5 Feb 2015 07:29:06 +0000 (16:29 +0900)
[librtmp] Update to version 1

41 files changed:
meta-openvuplus/conf/distro/vuplus.conf
meta-openvuplus/recipes-multimedia/gstreamer1.0/gst-plugins-package.inc [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink.bb [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink.bbappend [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink/gstreamer10_dvbmediasink_vuplus.patch [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink/gstreamer10_dvbmediasink_vuplus_wmv.patch [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-subsink.bb [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad.inc [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/0001-rtmp-fix-seeking-and-potential-segfault.patch [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad_1.4.%.bbappend [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad_1.4.5.bb [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base.inc [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/0001-riff-media-added-fourcc-to-all-mpeg4-video-caps.patch [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base_1.4.%.bbappend [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base_1.4.5.bb [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good.inc [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch [new file with mode: 0755]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch [new file with mode: 0755]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good_1.4.%.bbappend [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good_1.4.5.bb [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly.inc [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly_1.4.%.bbappend [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly_1.4.5.bb [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins.inc [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0.inc [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0_1.4.5.bb [new file with mode: 0644]
meta-openvuplus/recipes-multimedia/rtmp/librtmp.bb
meta-openvuplus/recipes-multimedia/vlc/libdca_0.0.5-5.bb [new file with mode: 0644]
meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins.bb
meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_gst10_support.patch [new file with mode: 0644]
meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_gst_plugins_pkgname.patch
meta-openvuplus/recipes-vuplus/enigma2/enigma2.bb
meta-openvuplus/recipes-vuplus/enigma2/enigma2/enbalesubtitleshack.patch [new file with mode: 0644]
meta-openvuplus/recipes-vuplus/enigma2/enigma2/enigma2_vuplus_disable_subtitle_sync_mode_bug.patch [new file with mode: 0644]
meta-openvuplus/recipes-vuplus/enigma2/enigma2/enigma2_vuplus_mediaplayer.patch

index 457819d..cc96317 100644 (file)
@@ -29,8 +29,8 @@ SYSVINIT_ENABLED_GETTYS = ""
 # meta/classes/image_types.bbclass
 IMAGE_FSTYPES =+ "tar.bz2"
 
 # meta/classes/image_types.bbclass
 IMAGE_FSTYPES =+ "tar.bz2"
 
-
 # package versions
 # package versions
+GST_VERSION = "1.0"
 PREFERRED_VERSION_pango ?= "1.28.4"
 
 PREFERRED_VERSION_linux-libc-headers ?= "${LINUXLIBCVERSION}"
 PREFERRED_VERSION_pango ?= "1.28.4"
 
 PREFERRED_VERSION_linux-libc-headers ?= "${LINUXLIBCVERSION}"
@@ -54,6 +54,10 @@ LICENSE_FLAGS_WHITELIST = "commercial_gst-plugins-ugly commercial_lame commercia
 COMMERCIAL_AUDIO_PLUGINS ?= "gst-plugins-ugly-mad gst-plugins-ugly-mpegaudioparse"
 COMMERCIAL_VIDEO_PLUGINS ?= "gst-plugins-ugly-mpeg2dec gst-plugins-ugly-mpegstream gst-plugins-bad-mpegvideoparse"
 
 COMMERCIAL_AUDIO_PLUGINS ?= "gst-plugins-ugly-mad gst-plugins-ugly-mpegaudioparse"
 COMMERCIAL_VIDEO_PLUGINS ?= "gst-plugins-ugly-mpeg2dec gst-plugins-ugly-mpegstream gst-plugins-bad-mpegvideoparse"
 
+LICENSE_FLAGS_WHITELIST += "commercial_gstreamer1.0-plugins-ugly"
+COMMERCIAL_AUDIO_PLUGINS += "gstreamer1.0-plugins-ugly-mad gstreamer1.0-plugins-ugly-mpegaudioparse"
+COMMERCIAL_VIDEO_PLUGINS += "gstreamer1.0-plugins-ugly-mpeg2dec gstreamer1.0-plugins-ugly-mpegstream gstreamer1.0-plugins-bad-mpegvideoparse"
+
 FULL_OPTIMIZATION = "-Os -pipe ${DEBUG_FLAGS}"
 # build some core libs with better compiler optimization for better performance
 O3_OPT = "-O3 -pipe ${DEBUG_FLAGS}"
 FULL_OPTIMIZATION = "-Os -pipe ${DEBUG_FLAGS}"
 # build some core libs with better compiler optimization for better performance
 O3_OPT = "-O3 -pipe ${DEBUG_FLAGS}"
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gst-plugins-package.inc b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gst-plugins-package.inc
new file mode 100644 (file)
index 0000000..7bb5678
--- /dev/null
@@ -0,0 +1,58 @@
+PACKAGESPLITFUNCS_prepend = " split_gstreamer10_packages "
+PACKAGESPLITFUNCS_append = " set_metapkg_rdepends "
+
+python split_gstreamer10_packages () {
+    gst_libdir = d.expand('${libdir}/gstreamer-${LIBV}')
+    postinst = d.getVar('plugin_postinst', True)
+    glibdir = d.getVar('libdir', True)
+
+    do_split_packages(d, glibdir, '^lib(.*)\.so\.*', 'lib%s', 'gstreamer %s library', extra_depends='', allow_links=True)
+    do_split_packages(d, gst_libdir, 'libgst(.*)\.so$', d.expand('${PN}-%s'), 'GStreamer plugin for %s', postinst=postinst, extra_depends=d.expand('${PN}'))
+    do_split_packages(d, gst_libdir, 'libgst(.*)\.la$', d.expand('${PN}-%s-dev'), 'GStreamer plugin for %s (development files)', extra_depends=d.expand('${PN}-dev'))
+    do_split_packages(d, gst_libdir, 'libgst(.*)\.a$', d.expand('${PN}-%s-staticdev'), 'GStreamer plugin for %s (static development files)', extra_depends=d.expand('${PN}-staticdev'))
+}
+
+python set_metapkg_rdepends () {
+    import os
+
+    pn = d.getVar('PN', True)
+    metapkg =  pn + '-meta'
+    d.setVar('ALLOW_EMPTY_' + metapkg, "1")
+    d.setVar('FILES_' + metapkg, "")
+    blacklist = [ pn, pn + '-locale', pn + '-dev', pn + '-dbg', pn + '-doc', pn + '-meta' ]
+    metapkg_rdepends = []
+    packages = d.getVar('PACKAGES', True).split()
+    pkgdest = d.getVar('PKGDEST', True)
+    for pkg in packages[1:]:
+        if not pkg in blacklist and not pkg in metapkg_rdepends and not pkg.endswith('-dev') and not pkg.endswith('-dbg') and not pkg.count('locale') and not pkg.count('-staticdev'):
+            # See if the package is empty by looking at the contents of its PKGDEST subdirectory. 
+            # If this subdirectory is empty, then the package is.
+            # Empty packages do not get added to the meta package's RDEPENDS
+            pkgdir = os.path.join(pkgdest, pkg)
+            if os.path.exists(pkgdir):
+                dir_contents = os.listdir(pkgdir) or []
+            else:
+                dir_contents = []
+            is_empty = len(dir_contents) == 0
+            if not is_empty:
+                metapkg_rdepends.append(pkg)
+    d.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends))
+    d.setVar('DESCRIPTION_' + metapkg, pn + ' meta package')
+}
+
+# metapkg has runtime dependency on PN
+# each plugin depends on PN, plugin-dev on PN-dev, plugin-staticdev on PN-staticdev
+# so we need them even when empty (like in gst-plugins-good case)
+ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY_${PN}-dev = "1"
+ALLOW_EMPTY_${PN}-staticdev = "1"
+
+PACKAGES += "${PN}-apps ${PN}-meta ${PN}-glib"
+FILES_${PN}-apps = "${bindir}"
+
+RDEPENDS_${PN}-apps += "perl"
+
+FILES_${PN} = "${datadir}/gstreamer-${LIBV}"
+FILES_${PN}-dbg += "${libdir}/gstreamer-${LIBV}/.debug"
+FILES_${PN}-glib = "${datadir}/glib-2.0"
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink.bb b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink.bb
new file mode 100644 (file)
index 0000000..b444996
--- /dev/null
@@ -0,0 +1,36 @@
+DESCRIPTION = "gstreamer dvbmediasink plugin"
+SECTION = "multimedia"
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
+
+DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base libdca"
+
+GSTVERSION = "1.0"
+
+SRC_URI = "git://git.code.sf.net/p/openpli/gst-plugin-dvbmediasink;protocol=git;branch=gst-1.0"
+SRCREV = "${AUTOREV}"
+
+S = "${WORKDIR}/git"
+
+inherit gitpkgv
+
+PV = "${GSTVERSION}+git${SRCPV}"
+PKGV = "${GSTVERSION}+git${GITPKGV}"
+PR = "r0"
+
+do_configure_prepend() {
+        sed -i 's/AC_INIT.*$/AC_INIT(gst-plugin-dvbmediasink, 1.0.0, @pli4)/' ${S}/configure.ac
+        sed -i 's/AM_INIT_AUTOMAKE.*$/AM_INIT_AUTOMAKE([foreign])/' ${S}/configure.ac
+}
+
+inherit autotools pkgconfig
+
+FILES_${PN} = "${libdir}/gstreamer-${GSTVERSION}/*.so*"
+FILES_${PN}-dev += "${libdir}/gstreamer-${GSTVERSION}/*.la"
+FILES_${PN}-staticdev += "${libdir}/gstreamer-${GSTVERSION}/*.a"
+FILES_${PN}-dbg += "${libdir}/gstreamer-${GSTVERSION}/.debug"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+EXTRA_OECONF = "${DVBMEDIASINK_CONFIG} --with-gstversion=${GSTVERSION}"
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink.bbappend b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink.bbappend
new file mode 100644 (file)
index 0000000..52ea114
--- /dev/null
@@ -0,0 +1,19 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+SRC_URI += "\
+       file://gstreamer10_dvbmediasink_vuplus.patch \
+       file://gstreamer10_dvbmediasink_vuplus_wmv.patch \
+"
+
+PR .= "-vuplus0"
+
+DVBMEDIASINK_CONFIG = "--with-wmv --with-pcm --with-eac3"
+
+# Do not strip binary
+#INHIBIT_PACKAGE_STRIP = "1"
+#do_strip[noexec] = "1"
+#do_strip="no"
+#do_strip(){
+#        pass
+#}
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink/gstreamer10_dvbmediasink_vuplus.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink/gstreamer10_dvbmediasink_vuplus.patch
new file mode 100644 (file)
index 0000000..6cd49bf
--- /dev/null
@@ -0,0 +1,199 @@
+diff --git a/gstdvbaudiosink.c b/gstdvbaudiosink.c
+index 2725def..a51d28c 100644
+--- a/gstdvbaudiosink.c
++++ b/gstdvbaudiosink.c
+@@ -125,8 +125,7 @@ static guint gst_dvbaudiosink_signals[LAST_SIGNAL] = { 0 };
+               "framed =(boolean) true; "
+ #define LPCMCAPS \
+-              "audio/x-private1-lpcm, " \
+-              "framed =(boolean) true; "
++              "audio/x-private1-lpcm; "
+ #define DTSCAPS \
+               "audio/x-dts, " \
+@@ -271,7 +270,9 @@ static void gst_dvbaudiosink_class_init(GstDVBAudioSinkClass *self)
+       gstbasesink_class->event = GST_DEBUG_FUNCPTR(gst_dvbaudiosink_event);
+       gstbasesink_class->unlock = GST_DEBUG_FUNCPTR(gst_dvbaudiosink_unlock);
+       gstbasesink_class->unlock_stop = GST_DEBUG_FUNCPTR(gst_dvbaudiosink_unlock_stop);
++#if GST_VERSION_MAJOR < 1
+       gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR(gst_dvbaudiosink_set_caps);
++#endif
+       gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR(gst_dvbaudiosink_get_caps);
+       element_class->change_state = GST_DEBUG_FUNCPTR(gst_dvbaudiosink_change_state);
+@@ -426,6 +427,11 @@ static gboolean gst_dvbaudiosink_set_caps(GstBaseSink *basesink, GstCaps *caps)
+       const char *type = gst_structure_get_name(structure);
+       t_audio_type bypass = AUDIOTYPE_UNKNOWN;
++      if (self->bypass != AUDIOTYPE_UNKNOWN) {
++              GST_INFO_OBJECT (self, "skip set_caps, should be done only once.");
++              return TRUE;
++      }
++
+       self->skip = 0;
+       self->aac_adts_header_valid = FALSE;
+@@ -775,7 +781,9 @@ static gboolean gst_dvbaudiosink_event(GstBaseSink *sink, GstEvent *event)
+               self->flushing = TRUE;
+               /* wakeup the poll */
+               write(self->unlockfd[1], "\x01", 1);
++#if GST_VERSION_MAJOR >= 1
+               if(self->paused) ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
++#endif
+               break;
+       case GST_EVENT_FLUSH_STOP:
+               if (self->fd >= 0) ioctl(self->fd, AUDIO_CLEAR_BUFFER);
+@@ -793,7 +801,9 @@ static gboolean gst_dvbaudiosink_event(GstBaseSink *sink, GstEvent *event)
+                       self->cache = NULL;
+               }
+               GST_OBJECT_UNLOCK(self);
++#if GST_VERSION_MAJOR >= 1
+               if(self->paused) ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
++#endif
+               break;
+       case GST_EVENT_EOS:
+       {
+@@ -828,7 +838,9 @@ static gboolean gst_dvbaudiosink_event(GstBaseSink *sink, GstEvent *event)
+                       if (pfd[1].revents & POLLIN)
+                       {
+                               GST_DEBUG_OBJECT(self, "got buffer empty from driver!\n");
++#if GST_VERSION_MAJOR >= 1
+                               ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
++#endif
+                               break;
+                       }
+@@ -899,6 +911,7 @@ static gboolean gst_dvbaudiosink_event(GstBaseSink *sink, GstEvent *event)
+               }
+               break;
+       }
++#if GST_VERSION_MAJOR >= 1
+       case GST_EVENT_CAPS:
+       {
+               GstCaps *caps;
+@@ -913,9 +926,12 @@ static gboolean gst_dvbaudiosink_event(GstBaseSink *sink, GstEvent *event)
+                       }
+               }
+       }
++#endif
+       default:
++#if GST_VERSION_MAJOR >= 1
+               ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
++#endif
+               break;
+       }
+diff --git a/gstdvbvideosink.c b/gstdvbvideosink.c
+index a6b0a10..903432c 100644
+--- a/gstdvbvideosink.c
++++ b/gstdvbvideosink.c
+@@ -299,8 +299,9 @@ static void gst_dvbvideosink_class_init(GstDVBVideoSinkClass *self)
+       gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_dvbvideosink_event);
+       gstbasesink_class->unlock = GST_DEBUG_FUNCPTR (gst_dvbvideosink_unlock);
+       gstbasesink_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_dvbvideosink_unlock_stop);
++#if GST_VERSION_MAJOR < 1
+       gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_dvbvideosink_set_caps);
+-
++#endif
+       element_class->change_state = GST_DEBUG_FUNCPTR (gst_dvbvideosink_change_state);
+       gst_dvb_videosink_signals[SIGNAL_GET_DECODER_TIME] =
+@@ -402,7 +403,9 @@ static gboolean gst_dvbvideosink_event(GstBaseSink *sink, GstEvent *event)
+               self->flushing = TRUE;
+               /* wakeup the poll */
+               write(self->unlockfd[1], "\x01", 1);
++#if GST_VERSION_MAJOR >= 1
+               if(self->paused) ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
++#endif
+               break;
+       case GST_EVENT_FLUSH_STOP:
+               if (self->fd >= 0) ioctl(self->fd, VIDEO_CLEAR_BUFFER);
+@@ -414,7 +417,9 @@ static gboolean gst_dvbvideosink_event(GstBaseSink *sink, GstEvent *event)
+               }
+               self->flushing = FALSE;
+               GST_OBJECT_UNLOCK(self);
++#if GST_VERSION_MAJOR >= 1
+               if(self->paused) ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
++#endif
+               break;
+       case GST_EVENT_EOS:
+       {
+@@ -449,7 +454,9 @@ static gboolean gst_dvbvideosink_event(GstBaseSink *sink, GstEvent *event)
+                       if (pfd[1].revents & POLLIN)
+                       {
+                               GST_DEBUG_OBJECT (self, "got buffer empty from driver!\n");
++#if GST_VERSION_MAJOR >= 1
+                               ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
++#endif
+                               break;
+                       }
+@@ -513,6 +520,7 @@ static gboolean gst_dvbvideosink_event(GstBaseSink *sink, GstEvent *event)
+               }
+               break;
+       }
++#if GST_VERSION_MAJOR >= 1
+       case GST_EVENT_CAPS:
+       {
+               GstCaps *caps;
+@@ -524,8 +532,11 @@ static gboolean gst_dvbvideosink_event(GstBaseSink *sink, GstEvent *event)
+               }
+               break;
+       }
++#endif
+       default:
++#if GST_VERSION_MAJOR >= 1
+               ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
++#endif
+               break;
+       }
+@@ -614,6 +625,8 @@ static int video_write(GstBaseSink *sink, GstDVBVideoSink *self, GstBuffer *buff
+                               }
+                               else if (evt.type == VIDEO_EVENT_FRAME_RATE_CHANGED)
+                               {
++                                      self->framerate = evt.u.frame_rate;
++                                      GST_INFO_OBJECT(self, "decoder framerate %d", self->framerate);
+                                       s = gst_structure_new ("eventFrameRateChanged",
+                                               "frame_rate", G_TYPE_INT, evt.u.frame_rate, NULL);
+                                       msg = gst_message_new_element (GST_OBJECT(sink), s);
+@@ -1289,6 +1302,8 @@ static gboolean gst_dvbvideosink_set_caps(GstBaseSink *basesink, GstCaps *caps)
+       GstStructure *structure = gst_caps_get_structure (caps, 0);
+       const char *mimetype = gst_structure_get_name (structure);
+       self->stream_type = STREAMTYPE_UNKNOWN;
++      self->framerate = -1;
++      self->no_header = 0;
+       GST_INFO_OBJECT (self, "caps = %" GST_PTR_FORMAT, caps);
+@@ -1557,6 +1572,10 @@ static gboolean gst_dvbvideosink_set_caps(GstBaseSink *basesink, GstCaps *caps)
+                                       gst_buffer_ref (self->codec_data);
+                               }
+                               GST_INFO_OBJECT (self, "MIMETYPE video/x-divx vers. 4 -> STREAMTYPE_MPEG4_Part2");
++#if GST_VERSION_MAJOR >= 1
++                              self->use_dts = TRUE;
++#endif
++
+                       break;
+                       case 6:
+                       case 5:
+@@ -1622,10 +1641,17 @@ static gboolean gst_dvbvideosink_set_caps(GstBaseSink *basesink, GstCaps *caps)
+                                               best = i;
+                                       }
+                               }
++                              self->framerate = valid_framerates[best];
++
++                              GST_INFO_OBJECT(self, "framerate %d", self->framerate);
++
+                               fprintf(f, "%d", valid_framerates[best]);
+                               fclose(f);
+                       }
+               }
++              else if (self->framerate == -1)
++                      GST_INFO_OBJECT(self, "no framerate given!");
++
+               if (self->playing)
+               {
+                       if (self->fd >= 0) ioctl(self->fd, VIDEO_STOP, 0);
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink/gstreamer10_dvbmediasink_vuplus_wmv.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink/gstreamer10_dvbmediasink_vuplus_wmv.patch
new file mode 100644 (file)
index 0000000..3a32a5a
--- /dev/null
@@ -0,0 +1,791 @@
+diff --git a/gstdvbvideosink.c b/gstdvbvideosink.c
+index 903432c..dd31dc7 100644
+--- a/gstdvbvideosink.c
++++ b/gstdvbvideosink.c
+@@ -150,6 +150,16 @@ void bitstream_put(struct bitstream *bit, unsigned long val, int bits)
+ }
+ #endif
++static unsigned int Vc1ParseSeqHeader( GstDVBVideoSink *self, struct bitstream *bit );
++static unsigned int Vc1ParseEntryPointHeader( GstDVBVideoSink *self, struct bitstream *bit );
++static unsigned char Vc1GetFrameType( GstDVBVideoSink *self, struct bitstream *bit );
++static unsigned char Vc1GetBFractionVal( GstDVBVideoSink *self, struct bitstream *bit );
++static unsigned char Vc1GetNrOfFramesFromBFractionVal( unsigned char ucBFVal );
++static unsigned char Vc1HandleStreamBuffer( GstDVBVideoSink *self, unsigned char *data, int flags );
++
++#define cVC1NoBufferDataAvailable     0
++#define cVC1BufferDataAvailable               1
++
+ GST_DEBUG_CATEGORY_STATIC (dvbvideosink_debug);
+ #define GST_CAT_DEFAULT dvbvideosink_debug
+@@ -338,6 +348,7 @@ static void gst_dvbvideosink_init(GstDVBVideoSink *self)
+       self->num_non_keyframes = 0;
+       self->prev_frame = NULL;
+ #endif
++
+ #if GST_VERSION_MAJOR >= 1
+       self->use_dts = FALSE;
+ #endif
+@@ -351,6 +362,17 @@ static void gst_dvbvideosink_init(GstDVBVideoSink *self)
+       self->saved_fallback_framerate[0] = 0;
+       self->rate = 1.0;
++      self->ucPrevFramePicType = 0;
++      self->ucVC1_PULLDOWN = 0;
++      self->ucVC1_INTERLACE = 0;
++      self->ucVC1_TFCNTRFLAG = 0;
++      self->ucVC1_FINTERPFLAG = 0;
++      self->ucVC1_PSF = 0;
++      self->ucVC1_HRD_PARAM_FLAG = 0;
++      self->ucVC1_HRD_NUM_LEAKY_BUCKETS = 0;
++      self->ucVC1_PANSCAN_FLAG = 0;
++      self->ucVC1_REFDIST_FLAG = 0;
++
+       gst_base_sink_set_sync(GST_BASE_SINK(self), FALSE);
+       gst_base_sink_set_async_enabled(GST_BASE_SINK(self), TRUE);
+ }
+@@ -875,18 +897,31 @@ static GstFlowReturn gst_dvbvideosink_render(GstBaseSink *sink, GstBuffer *buffe
+               if (self->codec_data)
+               {
++                      if (self->codec_type == CT_VC1)
++                      {
++                              if (self->no_header && self->ucPrevFramePicType == 6) {  // I-Frame...
++                                      GST_INFO_OBJECT(self, "send seq header");
++                                      self->must_send_header = 1;
++                              }
++                      }
+                       if (self->must_send_header)
+                       {
+                               if (self->codec_type != CT_MPEG1 && self->codec_type != CT_MPEG2 && (self->codec_type != CT_DIVX4 || data[3] == 0x00))
+                               {
++                                      unsigned char *_codec_data = codec_data;
++                                      unsigned int _codec_data_size = codec_data_size;
++                                      if (self->codec_type == CT_VC1) {
++                                              _codec_data += 1;
++                                              _codec_data_size -= 1;
++                                      }
+                                       if (self->codec_type == CT_DIVX311)
+                                       {
+                                               video_write(sink, self, self->codec_data, 0, codec_data_size);
+                                       }
+                                       else
+                                       {
+-                                              memcpy(pes_header + pes_header_len, codec_data, codec_data_size);
+-                                              pes_header_len += codec_data_size;
++                                              memcpy(pes_header + pes_header_len, _codec_data, _codec_data_size);
++                                              pes_header_len += _codec_data_size;
+                                       }
+                                       self->must_send_header = FALSE;
+                               }
+@@ -976,6 +1011,47 @@ static GstFlowReturn gst_dvbvideosink_render(GstBaseSink *sink, GstBuffer *buffe
+                                       pes_header_len += 3;
+                               }
+                       }
++#if 1
++                      else if (self->codec_type == CT_VC1 || self->codec_type == CT_VC1_SM) 
++                      {
++                              int skip_header_check;
++
++                              if (data[0] || data[1] || data[2] != 1) {
++                                      memcpy(pes_header+pes_header_len, "\x00\x00\x01\x0d", 4);
++                                      pes_header_len += 4;
++                                      skip_header_check = 1;
++                              }
++                              else
++                                      skip_header_check = 0;
++
++                              self->no_header = skip_header_check;
++
++                              if (self->codec_type == CT_VC1) {
++                                      unsigned char ucRetVal = Vc1HandleStreamBuffer( self, data, skip_header_check );
++                                      if ( ucRetVal != cVC1NoBufferDataAvailable ) {
++#if GST_VERSION_MAJOR < 1
++                                              data_len = GST_BUFFER_SIZE(self->prev_frame);
++                                              data = GST_BUFFER_DATA(self->prev_frame);
++#else
++                                              gst_buffer_unmap(buffer, &map);
++                                              gst_buffer_map(self->prev_frame, &map, GST_MAP_READ);
++                                              data_len = map.size;
++                                              data = map.data;
++#endif
++                                      }
++                                      else {
++                                              GST_DEBUG_OBJECT(self, "first buffer!");
++
++                                              gst_buffer_ref(buffer);
++                                              self->prev_frame = buffer;
++
++                                              goto ok;
++                                      }
++
++                                      cache_prev_frame = TRUE;
++                              }
++                      }
++#endif
+                       else if (self->codec_type == CT_DIVX311)
+                       {
+                               if (memcmp(data, "\x00\x00\x01\xb6", 4))
+@@ -1204,12 +1280,6 @@ static GstFlowReturn gst_dvbvideosink_render(GstBaseSink *sink, GstBuffer *buffe
+                       }
+               }
+       }
+-      else if (self->codec_type == CT_VC1 || self->codec_type == CT_VC1_SM)
+-      {
+-              memcpy(pes_header + pes_header_len, "\x00\x00\x01\x0d", 4);
+-              pes_header_len += 4;
+-              payload_len += 4;
+-      }
+       pes_set_payload_size(payload_len, pes_header);
+@@ -1617,12 +1687,90 @@ static gboolean gst_dvbvideosink_set_caps(GstBaseSink *basesink, GstCaps *caps)
+                       self->codec_type = CT_VC1_SM;
+                       GST_INFO_OBJECT (self, "MIMETYPE video/x-wmv -> STREAMTYPE_VC1_SM");
+               }
++
++              if (self->codec_type == CT_VC1)
++              {
++                      const GValue *codec_data = gst_structure_get_value(structure, "codec_data");
++                      if (codec_data)
++                      {
++
++                              self->codec_data = gst_value_get_buffer (codec_data);
++                              gst_buffer_ref (self->codec_data);
++#if GST_VERSION_MAJOR < 1
++                              Vc1HandleStreamBuffer(self, GST_BUFFER_DATA(self->codec_data)+1, 2 );
++#else
++                              GstMapInfo codec_data_map;
++                              gst_buffer_map(self->codec_data, &codec_data_map, GST_MAP_READ);
++                              Vc1HandleStreamBuffer(self, codec_data_map.data+1, 2 );
++                              gst_buffer_unmap(self->codec_data, &codec_data_map);
++#endif
++
++                      }
++              }
++              else if (self->codec_type == CT_VC1_SM)
++              {
++                      const GValue *codec_data = gst_structure_get_value(structure, "codec_data");
++
++                      if (codec_data)
++                      {
++                              /* wmv version 3 test */
++                              guint8 *codec_data_pointer, *data;
++                              gint codec_size, size;
++                              gint width, height;
++#if GST_VERSION_MAJOR < 1
++                              codec_size = GST_BUFFER_SIZE(gst_value_get_buffer(codec_data));
++                              codec_data_pointer = GST_BUFFER_DATA(gst_value_get_buffer(codec_data));
++#else
++                              GstMapInfo codecdatamap;
++                              gst_buffer_map(gst_value_get_buffer(codec_data), &codecdatamap, GST_MAP_READ);
++                              codec_data_pointer = codecdatamap.data;
++                              codec_size = codecdatamap.size;
++#endif
++                              if (codec_size > 4) codec_size = 4;
++                              gst_structure_get_int(structure, "width", &width);
++                              gst_structure_get_int(structure, "height", &height);
++
++                              self->codec_data = gst_buffer_new_and_alloc(19);
++#if GST_VERSION_MAJOR < 1
++                              data = GST_BUFFER_DATA(self->codec_data);
++#else
++                              GstMapInfo self_codec_map;
++                              gst_buffer_map(self->codec_data, &self_codec_map, GST_MAP_WRITE);
++                              data = self_codec_map.data;
++                              size = codecdatamap.size;
++#endif
++                              memset(data, 0, size);
++
++                              *(data++) = 0x00;
++                              *(data++) = 0x00;
++                              *(data++) = 0x01;
++                              *(data++) = 0x0F;
++
++                              /* width */
++                              *(data++) = (width >> 8) & 0xff;
++                              *(data++) = width & 0xff;
++                              /* height */
++                              *(data++) = (height >> 8) & 0xff;
++                              *(data++) = height & 0xff;
++
++                              if (codec_data && codec_size)
++                                      memcpy(data, codec_data_pointer, codec_size);
++
++                              codec_data_pointer[0] >>= 4;
++                              if (codec_data_pointer[0] != 4 && codec_data_pointer[0] != 0)
++                                      GST_ERROR_OBJECT(self, "unsupported vc1-sm video compression format (profile %d)", codec_data_pointer[0]);
++#if GST_VERSION_MAJOR >= 1
++                              gst_buffer_unmap(gst_value_get_buffer(codec_data), &self_codec_map);
++                              gst_buffer_unmap(self->codec_data, &codecdatamap);
++#endif
++                      }
++              }
+       }
+       if (self->stream_type != STREAMTYPE_UNKNOWN)
+       {
+               gint numerator, denominator;
+-              if (gst_structure_get_fraction (structure, "framerate", &numerator, &denominator))
++              if (self->framerate == -1 && gst_structure_get_fraction (structure, "framerate", &numerator, &denominator))
+               {
+                       FILE *f = fopen("/proc/stb/vmpeg/0/fallback_framerate", "w");
+                       if (f)
+@@ -1663,76 +1811,7 @@ static gboolean gst_dvbvideosink_set_caps(GstBaseSink *basesink, GstCaps *caps)
+               }
+               if (self->fd >= 0) 
+               {
+-                      if (self->codec_type == CT_VC1)
+-                      {
+-                              const GValue *codec_data = gst_structure_get_value(structure, "codec_data");
+-                              if (codec_data)
+-                              {
+-                                      guint8 *codec_data_pointer;
+-                                      gint codec_size;
+-                                      guint8 *data;
+-                                      video_codec_data_t videocodecdata;
+-#if GST_VERSION_MAJOR < 1
+-                                      codec_size = GST_BUFFER_SIZE(gst_value_get_buffer(codec_data));
+-                                      codec_data_pointer = GST_BUFFER_DATA(gst_value_get_buffer(codec_data));
+-#else
+-                                      GstMapInfo codecdatamap;
+-                                      gst_buffer_map(gst_value_get_buffer(codec_data), &codecdatamap, GST_MAP_READ);
+-                                      codec_data_pointer = codecdatamap.data;
+-                                      codec_size = codecdatamap.size;
+-#endif
+-                                      videocodecdata.length = 8 + codec_size;
+-                                      data = videocodecdata.data = (guint8*)g_malloc(videocodecdata.length);
+-                                      memset(data, 0, videocodecdata.length);
+-                                      data += 8;
+-                                      memcpy(data, codec_data_pointer, codec_size);
+-                                      ioctl(self->fd, VIDEO_SET_CODEC_DATA, &videocodecdata);
+-                                      g_free(videocodecdata.data);
+-#if GST_VERSION_MAJOR >= 1
+-                                      gst_buffer_unmap(gst_value_get_buffer(codec_data), &codecdatamap);
+-#endif
+-                              }
+-                      }
+-                      else if (self->codec_type == CT_VC1_SM)
+-                      {
+-                              const GValue *codec_data = gst_structure_get_value(structure, "codec_data");
+-                              if (codec_data)
+-                              {
+-                                      guint8 *codec_data_pointer;
+-                                      gint codec_size;
+-                                      guint8 *data;
+-                                      video_codec_data_t videocodecdata;
+-                                      gint width, height;
+-#if GST_VERSION_MAJOR < 1
+-                                      codec_size = GST_BUFFER_SIZE(gst_value_get_buffer(codec_data));
+-                                      codec_data_pointer = GST_BUFFER_DATA(gst_value_get_buffer(codec_data));
+-#else
+-                                      GstMapInfo codecdatamap;
+-                                      gst_buffer_map(gst_value_get_buffer(codec_data), &codecdatamap, GST_MAP_READ);
+-                                      codec_data_pointer = codecdatamap.data;
+-                                      codec_size = codecdatamap.size;
+-#endif
+-                                      if (codec_size > 4) codec_size = 4;
+-                                      gst_structure_get_int(structure, "width", &width);
+-                                      gst_structure_get_int(structure, "height", &height);
+-                                      videocodecdata.length = 33;
+-                                      data = videocodecdata.data = (guint8*)g_malloc(videocodecdata.length);
+-                                      memset(data, 0, videocodecdata.length);
+-                                      data += 18;
+-                                      /* width */
+-                                      *(data++) = (width >> 8) & 0xff;
+-                                      *(data++) = width & 0xff;
+-                                      /* height */
+-                                      *(data++) = (height >> 8) & 0xff;
+-                                      *(data++) = height & 0xff;
+-                                      if (codec_data && codec_size) memcpy(data, codec_data_pointer, codec_size);
+-                                      ioctl(self->fd, VIDEO_SET_CODEC_DATA, &videocodecdata);
+-                                      g_free(videocodecdata.data);
+-#if GST_VERSION_MAJOR >= 1
+-                                      gst_buffer_unmap(gst_value_get_buffer(codec_data), &codecdatamap);
+-#endif
+-                              }
+-                      }
++                      
+                       ioctl(self->fd, VIDEO_PLAY);
+               }
+               self->playing = TRUE;
+@@ -1941,3 +2020,434 @@ GST_PLUGIN_DEFINE (
+       "GStreamer",
+       "http://gstreamer.net/"
+ )
++
++static unsigned int
++Vc1ParseSeqHeader( GstDVBVideoSink *self, struct bitstream *bit )
++{
++      unsigned char n;
++      long uiStartAddr = (long)&(bit->data[0]);
++      long uiStopAddr = 0;
++
++      // skip first 5 bytes (PROFILE,LEVEL,COLORDIFF_FORMAT,FRMRTQ_POSTPROC,BITRTQ_POSTPROC,POSTPROCFLAG,MAX_CODED_WIDTH,MAX_CODED_HEIGHT)
++      bitstream_get( bit, 32 );
++      bitstream_get( bit, 8 );
++      self->ucVC1_PULLDOWN = (unsigned char)bitstream_get( bit, 1 );
++      self->ucVC1_INTERLACE = (unsigned char)bitstream_get( bit, 1 );
++      self->ucVC1_TFCNTRFLAG = (unsigned char)bitstream_get( bit, 1 );
++      self->ucVC1_FINTERPFLAG = (unsigned char)bitstream_get( bit, 1 );
++      // skip 1 bit (RESERVED)
++      bitstream_get( bit, 1 );
++      self->ucVC1_PSF = (unsigned char)bitstream_get( bit, 1 );
++
++      if ( bitstream_get( bit, 1 ) == 1 ) {
++              // DISPLAY_EXT == 1
++
++              // skip 28 bits (DISP_HORIZ_SIZE,DISP_VERT_SIZE)
++              bitstream_get( bit, 28 );
++
++              if ( bitstream_get( bit, 1 ) == 1 ) {
++                      // ASPECT_RATIO_FLAG == 1
++                      if ( bitstream_get( bit, 4 ) == 15 )
++                      {
++                              // ASPECT_RATIO == '15'
++
++                              // skip 16 bits (ASPECT_HORIZ_SIZE,ASPECT_VERT_SIZE)
++                              bitstream_get( bit, 16 );
++                      }
++              }
++
++              if ( bitstream_get( bit, 1 ) == 1 ) {
++                      int framerate = -1;
++                      // FRAMERATE_FLAG == 1
++                      if ( bitstream_get( bit, 1 ) == 0 ) {
++                              // FRAMERATEIND == 0
++                              int frameratenr = bitstream_get( bit, 8 );
++                              int frameratedr = bitstream_get( bit, 4 );
++
++                              GST_DEBUG_OBJECT(self, "VC1 frameratenr %d, frameratedr %d", frameratenr, frameratedr);
++
++                              switch (frameratenr) {
++                                      case 1: framerate = 24000; break;
++                                      case 2: framerate = 25000; break;
++                                      case 3: framerate = 30000; break;
++                                      case 4: framerate = 50000; break;
++                                      case 5: framerate = 60000; break;
++                                      case 6: framerate = 48000; break;
++                                      case 7: framerate = 72000; break;
++                                      default:
++                                              GST_INFO_OBJECT(self, "forbidden VC1 frameratenr %d", frameratenr);
++                                              break;
++                              }
++                              if (framerate != -1) {
++                                      switch (frameratedr) {
++                                      case 1: break;
++                                      case 2: framerate *= 1000;
++                                              framerate /= 1001;
++                                              break;
++                                      default:
++                                              GST_INFO_OBJECT(self, "forbidden VC1 frameratedr %d", frameratedr);
++                                              break;
++                                      }
++                              }
++                      }
++                      else {
++                              // FRAMERATEIND == 1
++                              int framerateexp = bitstream_get( bit, 16 );
++
++                              GST_DEBUG_OBJECT(self, "VC1 framerateexp %d", framerateexp);
++
++                              framerate = (framerateexp * 1000) / 32;
++                      }
++
++                      if (framerate != -1) {
++                              GST_INFO_OBJECT(self, "VC1 seq header framerate %d", framerate);
++
++                              self->framerate = framerate;
++                      }
++              }
++
++              if ( bitstream_get( bit, 1 ) == 1 ) {
++                      // COLOR_FORMAT_FLAG ==1
++
++                      // skip 24 bits (COLOR_PRIM,TRANSFER_CHAR,MATRIX_COEF)
++                      bitstream_get( bit, 24 );
++              }
++      }
++
++      self->ucVC1_HRD_PARAM_FLAG = (unsigned char)bitstream_get( bit, 1 );
++
++      if ( self->ucVC1_HRD_PARAM_FLAG == 1 ) {
++              // ucVC1_HRD_PARAM_FLAG == 1
++              self->ucVC1_HRD_NUM_LEAKY_BUCKETS = (unsigned char)bitstream_get( bit, 5 );
++
++              // skip 8 bits (BIT_RATE_EXPONENT,BUFFER_SIZE_EXPONENT)
++              bitstream_get( bit, 8 );
++
++              for ( n = 1; n <= self->ucVC1_HRD_NUM_LEAKY_BUCKETS; n++ ) {
++                      // skip 32 bits (HRD_RATE[n],HRD_BUFFER[n])
++                      bitstream_get( bit, 32 );
++              }
++      }
++
++      uiStopAddr = (long)&(bit->data[0]);
++      return (unsigned int)(uiStopAddr - uiStartAddr + 1);
++}
++
++static unsigned int
++Vc1ParseEntryPointHeader( GstDVBVideoSink *self, struct bitstream *bit )
++{
++      unsigned char n, ucEXTENDED_MV;
++      long uiStartAddr = (long)&(bit->data[0]);
++      long uiStopAddr = 0;
++
++      // skip the first two bits (BROKEN_LINK,CLOSED_ENTRY)
++      bitstream_get( bit, 2 );
++      self->ucVC1_PANSCAN_FLAG = (unsigned char)bitstream_get( bit, 1 );
++      self->ucVC1_REFDIST_FLAG = (unsigned char)bitstream_get( bit, 1 );
++
++      // skip 2 bits (LOOPFILTER,FASTUVMC)
++      bitstream_get( bit, 2 );
++
++      ucEXTENDED_MV = (unsigned char)bitstream_get( bit, 1 );
++
++      // skip 6 bits (DQUANT,VSTRANSFORM,OVERLAP,QUANTIZER)
++      bitstream_get( bit, 6 );
++
++      if ( self->ucVC1_HRD_PARAM_FLAG == 1 ) {
++              for ( n = 1; n <= self->ucVC1_HRD_NUM_LEAKY_BUCKETS; n++ ) {
++                      // skip 8 bits (HRD_FULL[n])
++                      bitstream_get( bit, 8 );
++              }
++      }
++
++      if ( bitstream_get( bit, 1 ) == 1 ) {
++              // CODED_SIZE_FLAG == 1
++
++              // skip 24 bits (CODED_WIDTH,CODED_HEIGHT)
++              bitstream_get( bit, 24 );
++      }
++
++      if ( ucEXTENDED_MV == 1 ) {
++              // skip 1 bit (EXTENDED_DMV)
++              bitstream_get( bit, 1 );
++      }
++
++      if ( bitstream_get( bit, 1 ) == 1 ) {
++              // RANGE_MAPY_FLAG == 1
++
++              // skip 3 bits (RANGE_MAPY)
++              bitstream_get( bit, 3 );
++      }
++
++      if ( bitstream_get( bit, 1 ) == 1 ) {
++              // RANGE_MAPUV_FLAG == 1
++
++              // skip 3 bits (RANGE_MAPUV)
++              bitstream_get( bit, 3 );
++      }
++
++      uiStopAddr = (long)&(bit->data[0]);
++
++      return (unsigned int)(uiStopAddr - uiStartAddr + 1);
++}
++
++static unsigned char
++Vc1GetFrameType( GstDVBVideoSink *self, struct bitstream *bit )
++{
++      unsigned char ucRetVal = 0;
++
++      if ( self->ucVC1_INTERLACE == 1 ) {
++              // determine FCM
++              if ( bitstream_get( bit, 1 ) == 1 ) {
++                      // Frame- or Field-Interlace Coding Mode -> we have to skip a further bit
++                      bitstream_get( bit, 1 );
++              }
++              else {
++                      // Progressive Frame Coding Mode -> no need to consume a further bit
++              }
++      }
++
++      if ( bitstream_get( bit, 1 ) == 0 ) {
++              // P-Frame detected
++              ucRetVal = 0;
++      }
++      else if ( bitstream_get( bit, 1 ) == 0 ) {
++              // B-Frame detected
++              ucRetVal = 2;
++      }
++      else if ( bitstream_get( bit, 1 ) == 0 ) {
++              // I-Frame detected
++              ucRetVal = 6;
++      }
++      else if ( bitstream_get( bit, 1 ) == 0 ) {
++              // BI-Frame detected
++              ucRetVal = 14;
++      }
++      else {
++              // Skipped-Frame detected
++              ucRetVal = 15;
++      }
++
++      return ucRetVal;
++}
++
++static unsigned char
++Vc1GetBFractionVal( GstDVBVideoSink *self, struct bitstream *bit )
++{
++      unsigned char ucRetVal = 0;
++      unsigned char ucNumberOfPanScanWindows = 0;
++      unsigned char ucRFF = 0;
++      unsigned char ucRPTFRM = 0;
++      unsigned char ucTmpVar = 0;
++      unsigned char i;
++
++      if ( self->ucVC1_TFCNTRFLAG == 1 ) {
++              // skip the first 8 bit (TFCNTR)
++              bitstream_get( bit, 8 );
++      }
++
++      if ( self->ucVC1_PULLDOWN == 1 ) {
++              if ( self->ucVC1_INTERLACE == 0 || self->ucVC1_PSF == 1 ) {
++                      ucRPTFRM = (unsigned char)bitstream_get( bit, 2 );
++              }
++              else {
++                      // skip 1 bit (TFF)
++                      bitstream_get( bit, 1 );
++                      ucRFF = (unsigned char)bitstream_get( bit, 1 );
++              }
++      }
++
++      if ( self->ucVC1_PANSCAN_FLAG == 1 ) {
++              if ( bitstream_get( bit, 2 ) != 0 ) {
++                      // PS_PRESENT
++                      if ( self->ucVC1_INTERLACE == 1 && self->ucVC1_PSF == 0 ) {
++                              if ( self->ucVC1_PULLDOWN == 1 ) {
++                                      ucNumberOfPanScanWindows = 2 + ucRFF;
++                              }
++                              else {
++                                      ucNumberOfPanScanWindows = 2;
++                              }
++                      }
++                      else {
++                              if ( self->ucVC1_PULLDOWN == 1 ) {
++                                      ucNumberOfPanScanWindows = 1 + ucRPTFRM;
++                              }
++                              else {
++                                      ucNumberOfPanScanWindows = 1;
++                              }
++                      }
++                      for ( i = 0; i < ucNumberOfPanScanWindows; i++ ) {
++                              // skip 8 bytes (PS_HOFFSET,PS_VOFFSET,PS_WIDTH,PS_HEIGHT)
++                              bitstream_get( bit, 32 );
++                              bitstream_get( bit, 32 );
++                      }
++              }
++      }
++
++      // skip 1 bit (RNDCTRL)
++      bitstream_get( bit, 1 );
++
++      if ( self->ucVC1_INTERLACE == 1 ) {
++              // skip 1 bit (UVSAMP)
++              bitstream_get( bit, 1 );
++      }
++
++      if ( self->ucVC1_FINTERPFLAG == 1 ) {
++              // skip 1 bit (INTERPFRM)
++              bitstream_get( bit, 1 );
++      }
++
++      ucTmpVar = (unsigned char)bitstream_get( bit, 3 );
++      ucRetVal = ucTmpVar;
++
++      if ( ucTmpVar > 6 ) {
++              ucRetVal <<= 4;
++              ucTmpVar = (unsigned char)bitstream_get( bit, 4 );
++              ucRetVal |= ucTmpVar;
++      }
++
++      return ucRetVal;
++}
++
++static unsigned char
++Vc1GetNrOfFramesFromBFractionVal( unsigned char ucBFVal )
++{
++      unsigned char ucRetVal;
++
++      switch( ucBFVal ) {
++              case 0:
++                      //printf("(1/2)\n");
++                      ucRetVal = 1;
++                      break;
++              case 1:
++                      //printf("(1/3)\n");
++                      ucRetVal = 2;
++                      break;
++              case 3:
++                      //printf("(1/4)\n");
++                      ucRetVal = 3;
++                      break;
++              case 5:
++                      //printf("(1/5)\n");
++                      ucRetVal = 4;
++                      break;
++              case 0x72:
++                      //printf("(1/6)\n");
++                      ucRetVal = 5;
++                      break;
++              case 0x74:
++                      //printf("(1/7)\n");
++                      ucRetVal = 6;
++                      break;
++              case 0x7A:
++                      //printf("(1/8)\n");
++                      ucRetVal = 7;
++                      break;
++              default:
++                      ucRetVal = 0;
++                      //printf("ucBFVal = %d\n", ucBFVal);
++                      break;
++      }
++
++      return ucRetVal;
++}
++
++static unsigned char
++Vc1HandleStreamBuffer( GstDVBVideoSink *self, unsigned char *data, int flags )
++{
++      unsigned char ucPType, ucRetVal = cVC1BufferDataAvailable;
++      unsigned int i = -1;
++
++      if (flags & 1)
++              goto parse_frame_header;
++
++      i = 0;
++
++      if ( ((data[i] == 0) && (data[i+1] == 0) && (data[i+2] == 1)) ) {
++
++              i += 3;
++
++              if ( data[i] == 0x0F ) {
++                      // Sequence header
++                      struct bitstream bitstr;
++                      i++;
++                      bitstream_init( &bitstr, &data[i], 0 );
++                      i += Vc1ParseSeqHeader(self, &bitstr);
++                      //printf("Sequence header\n");
++
++                      if ( data[i] == 0 && data[i+1] == 0 && data[i+2] == 1 && data[i+3] == 0x0E ) {
++                              // Entry Point Header
++                              struct bitstream bitstr;
++                              i += 4;
++                              bitstream_init( &bitstr, &data[i], 0 );
++                              i += Vc1ParseEntryPointHeader(self, &bitstr);
++                              //printf("Entry Point header\n");
++
++                              if ( flags & 2 ) // parse codec_data only
++                                      return 0;
++
++                              if ( data[i] == 0 && data[i+1] == 0 && data[i+2] == 1 && data[i+3] == 0x0D )
++                                      i += 3;
++                              else
++                                      GST_ERROR_OBJECT(self, "No Frame Header after a VC1 Entry Point header!!!");
++                      }
++                      else
++                              GST_ERROR_OBJECT(self, "No Entry Point Header after a VC1 Sequence header!!!");
++              }
++
++              if ( data[i] == 0x0D )
++parse_frame_header:
++              {
++                      // Frame Header
++                      struct bitstream bitstr;
++                      unsigned char ucBFractionVal = 0;
++
++                      i++;
++
++                      bitstream_init( &bitstr, &data[i], 0 );
++                      ucPType = Vc1GetFrameType( self, &bitstr );
++
++                      GST_DEBUG_OBJECT(self, "picturetype = %d", ucPType);
++
++                      if ( self->prev_frame == NULL ) {
++                              // first frame received
++                              ucRetVal = cVC1NoBufferDataAvailable;
++                      }
++                      else {
++                              if ( ucPType == 2 && (self->ucPrevFramePicType == 0 || self->ucPrevFramePicType == 6 || self->ucPrevFramePicType == 15) )
++                              {
++                                      int num_frames;
++                                      // last frame was a reference frame (P-,I- or Skipped-Frame) and current frame is a B-Frame
++                                      // -> correct the timestamp of the previous reference frame
++                                      ucBFractionVal = Vc1GetBFractionVal( self, &bitstr );
++
++                                      num_frames = Vc1GetNrOfFramesFromBFractionVal( ucBFractionVal );
++
++                                      GST_DEBUG_OBJECT(self, "num_frames = %d", num_frames);
++#if GST_VERSION_MAJOR < 1
++                                      GST_BUFFER_TIMESTAMP(self->prev_frame) += (1000000000000ULL / self->framerate) * num_frames;
++#else
++                                      GST_BUFFER_PTS(self->prev_frame) += (1000000000000ULL / self->framerate) * num_frames;
++#endif
++                              }
++                              else if ( self->ucPrevFramePicType == 2 )
++                              {
++                                      // last frame was a B-Frame -> correct the timestamp by the duration
++                                      // of the preceding reference frame
++#if GST_VERSION_MAJOR < 1
++                                      GST_BUFFER_TIMESTAMP(self->prev_frame) -= 1000000000000ULL / self->framerate;
++#else
++                                      GST_BUFFER_PTS(self->prev_frame) -= 1000000000000ULL / self->framerate;
++#endif
++                              }
++                      }
++                      // save the current picture type
++                      self->ucPrevFramePicType = ucPType;
++              }
++      }
++      else
++              GST_ERROR_OBJECT(self, "startcodes in VC1 buffer not correctly aligned!");
++
++      return ucRetVal;
++}
++
+diff --git a/gstdvbvideosink.h b/gstdvbvideosink.h
+index 8cf1dc2..14429a8 100644
+--- a/gstdvbvideosink.h
++++ b/gstdvbvideosink.h
+@@ -71,9 +71,9 @@ typedef enum {
+       STREAMTYPE_MPEG2 = 0,
+       STREAMTYPE_MPEG4_H264 = 1,
+       STREAMTYPE_H263 = 2,
+-      STREAMTYPE_VC1 = 3,
++      STREAMTYPE_VC1 = 16,
+       STREAMTYPE_MPEG4_Part2 = 4,
+-      STREAMTYPE_VC1_SM = 5,
++      STREAMTYPE_VC1_SM = 17,
+       STREAMTYPE_MPEG1 = 6,
+       STREAMTYPE_XVID = 10,
+       STREAMTYPE_DIVX311 = 13,
+@@ -116,6 +116,27 @@ struct _GstDVBVideoSink
+       gboolean must_send_header;
+       queue_entry_t *queue;
++
++      // VC1 stuff....
++
++      int no_header;
++
++      int framerate;  // current framerate
++
++      unsigned char ucPrevFramePicType;
++
++      // Sequence header variables
++      unsigned char ucVC1_PULLDOWN;
++      unsigned char ucVC1_INTERLACE;
++      unsigned char ucVC1_TFCNTRFLAG ;
++      unsigned char ucVC1_FINTERPFLAG;
++      unsigned char ucVC1_PSF;
++      unsigned char ucVC1_HRD_PARAM_FLAG;
++      unsigned char ucVC1_HRD_NUM_LEAKY_BUCKETS;
++
++      // Entry Point header variables
++      unsigned char ucVC1_PANSCAN_FLAG;
++      unsigned char ucVC1_REFDIST_FLAG;
+ };
+ struct _GstDVBVideoSinkClass 
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-subsink.bb b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-subsink.bb
new file mode 100644 (file)
index 0000000..2d171db
--- /dev/null
@@ -0,0 +1,35 @@
+DESCRIPTION = "gstreamer subsink plugin"
+SECTION = "multimedia"
+PRIORITY = "optional"
+DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
+
+SRC_URI = "git://git.code.sf.net/p/openpli/gstsubsink;protocol=git;branch=gst-1.0"
+SRCREV = "${AUTOREV}"
+
+S = "${WORKDIR}/git"
+
+inherit gitpkgv
+
+GSTVERSION = "1.0"
+
+PV = "${GSTVERSION}+git${SRCPV}"
+PKGV = "${GSTVERSION}+git${GITPKGV}"
+PR = "r0"
+
+EXTRA_OECONF = "--with-gstversion=${GSTVERSION}"
+
+do_configure_prepend() {
+        sed -i 's/AC_INIT.*$/AC_INIT(gst-plugin-subsink, 1.0.0, @pli4)/' ${S}/configure.ac
+        sed -i 's/AM_INIT_AUTOMAKE.*$/AM_INIT_AUTOMAKE([foreign subdir-objects])/' ${S}/configure.ac
+}
+
+inherit autotools pkgconfig
+
+FILES_${PN} = "${libdir}/gstreamer-${GSTVERSION}/*.so*"
+FILES_${PN}-dev += "${libdir}/gstreamer-${GSTVERSION}/*.la"
+FILES_${PN}-staticdev += "${libdir}/gstreamer-${GSTVERSION}/*.a"
+FILES_${PN}-dbg += "${libdir}/gstreamer-${GSTVERSION}/.debug"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad.inc b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad.inc
new file mode 100644 (file)
index 0000000..c657aee
--- /dev/null
@@ -0,0 +1,135 @@
+require gstreamer1.0-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+ "
+
+DEPENDS += "gstreamer1.0-plugins-base bzip2 libpng jpeg"
+
+S = "${WORKDIR}/gst-plugins-bad-${PV}"
+
+SRC_URI += "file://configure-allow-to-disable-libssh2.patch \
+           "
+
+inherit gettext
+
+# opengl packageconfig factored out to make it easy for distros
+# and BSP layers to pick either (desktop) opengl, gles2, or no GL
+PACKAGECONFIG_GL ?= "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gles2', '', d)}"
+
+PACKAGECONFIG ?= " \
+    ${PACKAGECONFIG_GL} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'directfb', 'directfb', '', d)} \
+    orc curl uvch264 neon sndfile \
+    hls sbc dash bz2 smoothstreaming \
+    "
+
+# dash = Dynamic Adaptive Streaming over HTTP
+PACKAGECONFIG[assrender]       = "--enable-assrender,--disable-assrender,libass"
+PACKAGECONFIG[curl]            = "--enable-curl,--disable-curl,curl"
+PACKAGECONFIG[gles2]           = "--enable-gles2 --enable-egl,--disable-gles2 --disable-egl,virtual/libgles2 virtual/egl"
+PACKAGECONFIG[opengl]          = "--enable-opengl,--disable-opengl,virtual/libgl libglu"
+PACKAGECONFIG[faac]            = "--enable-faac,--disable-faac,faac"
+PACKAGECONFIG[faad]            = "--enable-faad,--disable-faad,faad2"
+PACKAGECONFIG[libmms]          = "--enable-libmms,--disable-libmms,libmms"
+PACKAGECONFIG[modplug]         = "--enable-modplug,--disable-modplug,libmodplug"
+PACKAGECONFIG[mpg123]          = "--enable-mpg123,--disable-mpg123,mpg123"
+PACKAGECONFIG[opus]            = "--enable-opus,--disable-opus,libopus"
+PACKAGECONFIG[flite]           = "--enable-flite,--disable-flite,flite-alsa"
+PACKAGECONFIG[opencv]          = "--enable-opencv,--disable-opencv,opencv"
+PACKAGECONFIG[wayland]         = "--enable-wayland,--disable-wayland,wayland"
+PACKAGECONFIG[uvch264]         = "--enable-uvch264,--disable-uvch264,libusb1 udev"
+PACKAGECONFIG[directfb]        = "--enable-directfb,--disable-directfb,directfb"
+PACKAGECONFIG[neon]            = "--enable-neon,--disable-neon,neon"
+PACKAGECONFIG[openal]          = "--enable-openal,--disable-openal,openal-soft"
+PACKAGECONFIG[hls]             = "--enable-hls,--disable-hls,gnutls"
+PACKAGECONFIG[sbc]             = "--enable-sbc,--disable-sbc,sbc"
+PACKAGECONFIG[dash]            = "--enable-dash,--disable-dash,libxml2"
+PACKAGECONFIG[bz2]             = "--enable-bz2,--disable-bz2,bzip2"
+PACKAGECONFIG[fluidsynth]      = "--enable-fluidsynth,--disable-fluidsynth,fluidsynth"
+PACKAGECONFIG[schroedinger]    = "--enable-schro,--disable-schro,schroedinger"
+PACKAGECONFIG[smoothstreaming] = "--enable-smoothstreaming,--disable-smoothstreaming,libxml2"
+PACKAGECONFIG[bluez]           = "--enable-bluez,--disable-bluez,bluez4"
+PACKAGECONFIG[rsvg]            = "--enable-rsvg,--disable-rsvg,librsvg"
+PACKAGECONFIG[sndfile]         = "--enable-sndfile,--disable-sndfile,libsndfile1"
+PACKAGECONFIG[webp]            = "--enable-webp,--disable-webp,libwebp"
+PACKAGECONFIG[rtmp]            = "--enable-rtmp,--disable-rtmp,librtmp"
+PACKAGECONFIG[libssh2]         = "--enable-libssh2,--disable-libssh2,libssh2"
+
+# these plugins have not been ported to 1.0 (yet):
+#   directdraw vcd apexsink dc1394 lv2 linsys musepack mythtv
+#   nas timidity teletextdec sdl xvid wininet acm gsettings
+#   sndio qtwrapper cdxaparse dccp faceoverlay hdvparse tta
+#   mve nuvdemux osx_video patchdetect quicktime real sdi
+#   videomeasure gsettings
+
+# these plugins have no corresponding library in OE-core or meta-openembedded:
+#   openni2 winks direct3d directdraw directsound winscreencap osx_video
+#   apple_media android_media avc chromaprint daala dts gme gsm kate ladspa mimic
+#   mpeg2enc mplex ofa openjpeg opensles pvr resindvd rtmp soundtouch spandsp spc
+#   srtp vdpau voaacenc voamrwbenc wasapi zbar
+
+EXTRA_OECONF += " \
+    --enable-dvb \
+    --enable-shm \
+    --enable-fbdev \
+    --enable-decklink \
+    --disable-acm \
+    --disable-android_media \
+    --disable-apexsink \
+    --disable-apple_media \
+    --disable-avc \
+    --disable-chromaprint \
+    --disable-cocoa \
+    --disable-daala \
+    --disable-dc1394 \
+    --disable-direct3d \
+    --disable-directdraw \
+    --disable-directsound \
+    --disable-dts \
+    --disable-gme \
+    --disable-gsettings \
+    --disable-gsm \
+    --disable-kate \
+    --disable-ladspa \
+    --disable-linsys \
+    --disable-lv2 \
+    --disable-mimic \
+    --disable-mpeg2enc \
+    --disable-mplex \
+    --disable-musepack \
+    --disable-mythtv \
+    --disable-nas \
+    --disable-ofa \
+    --disable-openjpeg \
+    --disable-opensles \
+    --disable-osx_video \
+    --disable-pvr \
+    --disable-quicktime \
+    --disable-resindvd \
+    --disable-sdl \
+    --disable-sdltest \
+    --disable-sndio \
+    --disable-soundtouch \
+    --disable-spandsp \
+    --disable-spc \
+    --disable-srtp \
+    --disable-teletextdec \
+    --disable-timidity \
+    --disable-vcd \
+    --disable-vdpau \
+    --disable-voaacenc \
+    --disable-voamrwbenc \
+    --disable-wasapi \
+    --disable-wildmidi \
+    --disable-wininet \
+    --disable-winscreencap \
+    --disable-xvid \
+    --disable-zbar \
+    ${GSTREAMER_1_0_ORC} \
+    "
+
+ARM_INSTRUCTION_SET = "arm"
+
+FILES_gstreamer1.0-plugins-bad-opencv += "${datadir}/gst-plugins-bad/1.0/opencv*"
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch
new file mode 100644 (file)
index 0000000..042a32c
--- /dev/null
@@ -0,0 +1,41 @@
+From deba0da45ec821209a7ed148a4521d562e6512cd Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv@pseudoterminal.org>
+Date: Wed, 27 Aug 2014 14:47:25 +0200
+Subject: [PATCH] gl: do not check for GL/GLU/EGL/GLES2 libs if disabled in
+ configuration
+
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=735522]
+
+Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+---
+ configure.ac | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 1a46afb..e85d4ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -661,10 +661,16 @@ case $host in
+     fi
+   ;;
+   *)
+-    AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h)
+-    AG_GST_CHECK_LIBHEADER(GLU, GLU, gluSphere,, GL/glu.h)
+-    AG_GST_CHECK_LIBHEADER(GLES2, GLESv2, glTexImage2D,, GLES2/gl2.h)
+-    AG_GST_CHECK_LIBHEADER(EGL, EGL, eglGetError,, EGL/egl.h)
++    if test "x$NEED_GL" != "xno"; then
++      AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h)
++      AG_GST_CHECK_LIBHEADER(GLU, GLU, gluSphere,, GL/glu.h)
++    fi
++    if test "x$NEED_GLES2" != "xno"; then
++      AG_GST_CHECK_LIBHEADER(GLES2, GLESv2, glTexImage2D,, GLES2/gl2.h)
++    fi
++    if test "x$NEED_EGL" != "xno"; then
++      AG_GST_CHECK_LIBHEADER(EGL, EGL, eglGetError,, EGL/egl.h)
++    fi
+     old_LIBS=$LIBS
+     old_CFLAGS=$CFLAGS
+-- 
+1.8.3.2
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/0001-rtmp-fix-seeking-and-potential-segfault.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/0001-rtmp-fix-seeking-and-potential-segfault.patch
new file mode 100644 (file)
index 0000000..a704c5c
--- /dev/null
@@ -0,0 +1,63 @@
+From bb9478be40b450629f165d5d3566f4e4a3ee1b66 Mon Sep 17 00:00:00 2001
+From: Athanasios Oikonomou <athoik@gmail.com>
+Date: Tue, 28 Oct 2014 08:48:20 +0200
+Subject: [PATCH] rtmp: fix seeking and potential segfault
+
+Segfault info: https://bugzilla.gnome.org/show_bug.cgi?id=739263
+Seeking info: http://forums.openpli.org/topic/32910-mediaplayer-seek-doesnt-work-with-rtmp-streams/
+
+diff --git a/ext/rtmp/gstrtmpsrc.c b/ext/rtmp/gstrtmpsrc.c
+index b9ecfcf..8b4bf22 100644
+--- a/ext/rtmp/gstrtmpsrc.c
++++ b/ext/rtmp/gstrtmpsrc.c
+@@ -86,7 +86,6 @@ static void gst_rtmp_src_get_property (GObject * object, guint prop_id,
+     GValue * value, GParamSpec * pspec);
+ static void gst_rtmp_src_finalize (GObject * object);
+-static gboolean gst_rtmp_src_unlock (GstBaseSrc * src);
+ static gboolean gst_rtmp_src_stop (GstBaseSrc * src);
+ static gboolean gst_rtmp_src_start (GstBaseSrc * src);
+ static gboolean gst_rtmp_src_is_seekable (GstBaseSrc * src);
+@@ -137,7 +136,6 @@ gst_rtmp_src_class_init (GstRTMPSrcClass * klass)
+   gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_rtmp_src_start);
+   gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_rtmp_src_stop);
+-  gstbasesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_rtmp_src_unlock);
+   gstbasesrc_class->is_seekable = GST_DEBUG_FUNCPTR (gst_rtmp_src_is_seekable);
+   gstbasesrc_class->prepare_seek_segment =
+       GST_DEBUG_FUNCPTR (gst_rtmp_src_prepare_seek_segment);
+@@ -603,23 +601,6 @@ gst_rtmp_src_start (GstBaseSrc * basesrc)
+ #undef STR2AVAL
+ static gboolean
+-gst_rtmp_src_unlock (GstBaseSrc * basesrc)
+-{
+-  GstRTMPSrc *rtmpsrc = GST_RTMP_SRC (basesrc);
+-
+-  GST_DEBUG_OBJECT (rtmpsrc, "unlock");
+-
+-  /* This closes the socket, which means that any pending socket calls
+-   * error out. */
+-  if (rtmpsrc->rtmp) {
+-    RTMP_Close (rtmpsrc->rtmp);
+-  }
+-
+-  return TRUE;
+-}
+-
+-
+-static gboolean
+ gst_rtmp_src_stop (GstBaseSrc * basesrc)
+ {
+   GstRTMPSrc *src;
+@@ -627,6 +608,7 @@ gst_rtmp_src_stop (GstBaseSrc * basesrc)
+   src = GST_RTMP_SRC (basesrc);
+   if (src->rtmp) {
++    RTMP_Close (src->rtmp);
+     RTMP_Free (src->rtmp);
+     src->rtmp = NULL;
+   }
+-- 
+1.7.10.4
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch
new file mode 100644 (file)
index 0000000..d52afd5
--- /dev/null
@@ -0,0 +1,64 @@
+From f59c5269f92d59a5296cbfeeb682d42095cd88ad Mon Sep 17 00:00:00 2001
+From: Wenzong Fan <wenzong.fan@windriver.com>
+Date: Thu, 18 Sep 2014 02:24:07 -0400
+Subject: [PATCH] gstreamer1.0-plugins-bad: allow to disable libssh2
+
+libssh2 is automatically linked to if present, this undetermined
+dependency may cause build errors like:
+
+  .../x86_64-poky-linux/4.9.0/ld: cannot find -lssh2
+
+libssh2 isn't an oe-core recipe, so allow to disable it from
+configure.
+
+Upstream-Status: Pending
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+---
+ configure.ac |   23 +++++++++++++++++------
+ 1 file changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 0e95c5c..12153b4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1901,6 +1901,15 @@ AG_GST_CHECK_FEATURE(CHROMAPRINT, [chromaprint], chromaprint, [
+ ])
+ dnl *** Curl ***
++AC_ARG_ENABLE([libssh2],
++     [  --enable-libssh2              enable LIBSSH2 support @<:@default=auto@:>@],
++     [case "${enableval}" in
++       yes)  NEED_SSH2=yes ;;
++       no)   NEED_SSH2=no ;;
++       auto) NEED_SSH2=auto ;;
++       *) AC_MSG_ERROR([bad value ${enableval} for --enable-libssh2]) ;;
++     esac],[NEED_SSH2=auto])
++
+ translit(dnm, m, l) AM_CONDITIONAL(USE_CURL, true)
+ AG_GST_CHECK_FEATURE(CURL, [Curl plugin], curl, [
+   PKG_CHECK_MODULES(CURL, libcurl >= 7.21.0, [
+@@ -1915,12 +1924,14 @@ AG_GST_CHECK_FEATURE(CURL, [Curl plugin], curl, [
+   ])
+   AC_SUBST(CURL_CFLAGS)
+   AC_SUBST(CURL_LIBS)
+-  PKG_CHECK_MODULES(SSH2, libssh2 >= 1.4.3, [
+-    HAVE_SSH2="yes"
+-    AC_DEFINE(HAVE_SSH2, 1, [Define if libssh2 is available])
+-  ], [
+-    HAVE_SSH2="no"
+-  ])
++  if test "x$NEED_SSH2" != "xno"; then
++    PKG_CHECK_MODULES(SSH2, libssh2 >= 1.4.3, [
++      HAVE_SSH2="yes"
++      AC_DEFINE(HAVE_SSH2, 1, [Define if libssh2 is available])
++    ], [
++      HAVE_SSH2="no"
++    ])
++  fi
+   AM_CONDITIONAL(USE_SSH2, test "x$HAVE_SSH2" = "xyes")
+   AC_SUBST(SSH2_CFLAGS)
+   AC_SUBST(SSH2_LIBS)
+-- 
+1.7.9.5
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad_1.4.%.bbappend b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad_1.4.%.bbappend
new file mode 100644 (file)
index 0000000..814e9c8
--- /dev/null
@@ -0,0 +1,14 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+DEPENDS += "librtmp libdca"
+EXTRA_OECONF := "${@bb.data.getVar('EXTRA_OECONF',d,1).replace('--disable-rtmp', '--enable-rtmp --enable-mpegdemux').replace('--disable-dts', '--enable-dts')}"
+PACKAGECONFIG += "faac faad libmms hls dash smoothstreaming webp rtmp"
+SRC_URI += "file://0001-rtmp-fix-seeking-and-potential-segfault.patch"
+
+# Do not strip binary
+#INHIBIT_PACKAGE_STRIP = "1"
+#do_strip[noexec] = "1"
+#do_strip="no"
+#do_strip(){
+#        pass
+#}
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad_1.4.5.bb b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad_1.4.5.bb
new file mode 100644 (file)
index 0000000..59065de
--- /dev/null
@@ -0,0 +1,14 @@
+include gstreamer1.0-plugins-bad.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=73a5855a8119deb017f5f13cf327095d \
+                    file://gst/tta/filters.h;beginline=12;endline=29;md5=8a08270656f2f8ad7bb3655b83138e5a \
+                    file://COPYING.LIB;md5=21682e4e8fea52413fd26c60acb907e5 \
+                    file://gst/tta/crc32.h;beginline=12;endline=29;md5=27db269c575d1e5317fffca2d33b3b50"
+
+SRC_URI += "file://0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch"
+
+SRC_URI[md5sum] = "e0bb39412cf4a48fe0397bcf3a7cd451"
+SRC_URI[sha256sum] = "152fad7250683d72f9deb36c5685428338365fe4a4c87ffe15e38783b14f983c"
+
+S = "${WORKDIR}/gst-plugins-bad-${PV}"
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base.inc b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base.inc
new file mode 100644 (file)
index 0000000..8fdf53f
--- /dev/null
@@ -0,0 +1,40 @@
+require gstreamer1.0-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+"
+
+DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'virtual/libx11 libxv', '', d)}"
+DEPENDS += "freetype liboil util-linux"
+
+inherit gettext
+
+PACKAGES_DYNAMIC =+ "^libgst.*"
+
+PACKAGECONFIG ?= " \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)} \
+    orc ivorbis ogg theora vorbis \
+    "
+
+X11DEPENDS = "virtual/libx11 libsm libxrender"
+X11ENABLEOPTS = "--enable-x --enable-xvideo --enable-xshm"
+X11DISABLEOPTS = "--disable-x --disable-xvideo --disable-xshm"
+PACKAGECONFIG[x11]     = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}"
+PACKAGECONFIG[alsa]    = "--enable-alsa,--disable-alsa,alsa-lib"
+PACKAGECONFIG[ivorbis] = "--enable-ivorbis,--disable-ivorbis,tremor"
+PACKAGECONFIG[ogg]     = "--enable-ogg,--disable-ogg,libogg"
+PACKAGECONFIG[theora]  = "--enable-theora,--disable-theora,libtheora"
+PACKAGECONFIG[vorbis]  = "--enable-vorbis,--disable-vorbis,libvorbis"
+PACKAGECONFIG[pango]   = "--enable-pango,--disable-pango,pango"
+
+
+# cdparanoia and libvisual do not seem to exist anywhere in OE
+EXTRA_OECONF += " \
+    --disable-freetypetest \
+    --disable-cdparanoia \
+    --disable-libvisual \
+    ${GSTREAMER_1_0_ORC} \
+"
+
+FILES_${PN} += "${datadir}/gst-plugins-base"
+
+CACHED_CONFIGUREVARS_append_i586 = " ac_cv_header_emmintrin_h=no ac_cv_header_xmmintrin_h=no"
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/0001-riff-media-added-fourcc-to-all-mpeg4-video-caps.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/0001-riff-media-added-fourcc-to-all-mpeg4-video-caps.patch
new file mode 100644 (file)
index 0000000..b37b06b
--- /dev/null
@@ -0,0 +1,27 @@
+From 979c5cb85c4f3e59dcc44c1e6c75315dee7dfbc2 Mon Sep 17 00:00:00 2001
+From: Maros Ondrasek <mx3ldev@gmail.com>
+Date: Thu, 6 Nov 2014 14:03:57 +0100
+Subject: [PATCH] riff-media: added fourcc to all mpeg4 video caps
+
+---
+ gst-libs/gst/riff/riff-media.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/gst-libs/gst/riff/riff-media.c b/gst-libs/gst/riff/riff-media.c
+index 8217d79..48034bf 100644
+--- a/gst-libs/gst/riff/riff-media.c
++++ b/gst-libs/gst/riff/riff-media.c
+@@ -487,6 +487,10 @@ gst_riff_create_video_caps (guint32 codec_fcc,
+       caps = gst_caps_new_simple ("video/mpeg",
+           "mpegversion", G_TYPE_INT, 4,
+           "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
++      gchar *fstr = g_strdup_printf ("%" GST_FOURCC_FORMAT,
++          GST_FOURCC_ARGS (codec_fcc));
++      gst_caps_set_simple (caps, "fourcc", G_TYPE_STRING, fstr, NULL);
++      g_free (fstr);
+       if (codec_name)
+         *codec_name = g_strdup ("MPEG-4");
+       break;
+-- 
+2.1.0
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch
new file mode 100644 (file)
index 0000000..0407a30
--- /dev/null
@@ -0,0 +1,37 @@
+From b608d027fff6efc2d1988ebf169cbe3b2b44a61b Mon Sep 17 00:00:00 2001
+From: zhouming <b42586@freescale.com>
+Date: Thu, 8 May 2014 12:01:17 +0800
+Subject: [PATCH] ENGR00312034: do not change eos event to gap event if no
+ data has passed to streamsynchronizer.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=727074
+
+Upstream Status: Pending
+
+Signed-off-by: zhouming <b42586@freescale.com>
+---
+ gst/playback/gststreamsynchronizer.c |    5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c
+index 3997d1b..3e17c55 100644
+--- a/gst/playback/gststreamsynchronizer.c
++++ b/gst/playback/gststreamsynchronizer.c
+@@ -488,12 +488,11 @@ gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent,
+         }
+         g_slist_free (pads);
+       } else {
+-        /* if EOS, but no data has passed, then send something to replace EOS
+-         * for preroll purposes */
++        /* if EOS, but no data has passed, then send EOS event */
+         if (!seen_data) {
+           GstEvent *gap_event;
+-          gap_event = gst_event_new_gap (timestamp, GST_CLOCK_TIME_NONE);
++          gap_event = gst_event_new_eos ();
+           ret = gst_pad_push_event (srcpad, gap_event);
+         } else {
+           GstEvent *gap_event;
+-- 
+1.7.9.5
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch
new file mode 100644 (file)
index 0000000..0fc561c
--- /dev/null
@@ -0,0 +1,44 @@
+From af0dac26f62aaceb4bf266720911953793e0fc5d Mon Sep 17 00:00:00 2001
+From: zhouming <b42586@freescale.com>
+Date: Wed, 14 May 2014 10:16:20 +0800
+Subject: [PATCH] ENGR00312515: get caps from src pad when query caps
+
+https://bugzilla.gnome.org/show_bug.cgi?id=728312
+
+Upstream Status: Pending
+
+Signed-off-by: zhouming <b42586@freescale.com>
+---
+ gst-libs/gst/tag/gsttagdemux.c |   13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+ mode change 100644 => 100755 gst-libs/gst/tag/gsttagdemux.c
+
+diff --git a/gst-libs/gst/tag/gsttagdemux.c b/gst-libs/gst/tag/gsttagdemux.c
+old mode 100644
+new mode 100755
+index 9b6c478..ae2294a
+--- a/gst-libs/gst/tag/gsttagdemux.c
++++ b/gst-libs/gst/tag/gsttagdemux.c
+@@ -1708,6 +1708,19 @@ gst_tag_demux_pad_query (GstPad * pad, GstObject * parent, GstQuery * query)
+       }
+       break;
+     }
++    case GST_QUERY_CAPS:
++    {
++
++      /* We can hijack caps query if we typefind already */
++      if (demux->priv->src_caps) {
++        gst_query_set_caps_result (query, demux->priv->src_caps);
++        res = TRUE;
++      } else {
++        res = gst_pad_query_default (pad, parent, query);
++      }
++      break;
++    }
++
+     default:
+       res = gst_pad_query_default (pad, parent, query);
+       break;
+-- 
+1.7.9.5
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch
new file mode 100644 (file)
index 0000000..51fdc7e
--- /dev/null
@@ -0,0 +1,57 @@
+From 68fa1b1425ad2c5f7c5013d0943153a8a6d0934e Mon Sep 17 00:00:00 2001
+From: Jian Li <lj.qfy.sh@gmail.com>
+Date: Wed, 24 Sep 2014 17:21:02 +0800
+Subject: [PATCH] taglist not send to down stream if all the frame corrupted
+
+https://bugzilla.gnome.org/show_bug.cgi?id=737246
+
+Upstream status: Pending
+
+Signed-off-by: Jian Li <lj.qfy.sh@gmail.com>
+---
+ gst-libs/gst/audio/gstaudiodecoder.c |    9 +++++++++
+ gst-libs/gst/video/gstvideodecoder.c |    8 ++++++++
+ 2 files changed, 17 insertions(+)
+
+diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c
+index 3504678..3d69efe 100644
+--- a/gst-libs/gst/audio/gstaudiodecoder.c
++++ b/gst-libs/gst/audio/gstaudiodecoder.c
+@@ -2083,6 +2083,15 @@ gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event)
+       gst_audio_decoder_drain (dec);
+       GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
++      /* send taglist if no valid frame is decoded util EOS */
++      if (dec->priv->taglist && dec->priv->taglist_changed) {
++        GST_DEBUG_OBJECT (dec, "codec tag %" GST_PTR_FORMAT, dec->priv->taglist);
++        if (!gst_tag_list_is_empty (dec->priv->taglist))
++          gst_audio_decoder_push_event (dec,
++              gst_event_new_tag (gst_tag_list_ref (dec->priv->taglist)));
++        dec->priv->taglist_changed = FALSE;
++      }
++
+       /* Forward EOS because no buffer or serialized event will come after
+        * EOS and nothing could trigger another _finish_frame() call. */
+       ret = gst_audio_decoder_push_event (dec, event);
+diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c
+index dd8abe3..d9bfe4d 100644
+--- a/gst-libs/gst/video/gstvideodecoder.c
++++ b/gst-libs/gst/video/gstvideodecoder.c
+@@ -1024,6 +1024,14 @@ gst_video_decoder_sink_event_default (GstVideoDecoder * decoder,
+        * parent class' ::sink_event() until a later time.
+        */
+       forward_immediate = TRUE;
++
++      /* send taglist if no valid frame is decoded util EOS */
++      if (decoder->priv->tags && decoder->priv->tags_changed) {
++        gst_video_decoder_push_event (decoder,
++            gst_event_new_tag (gst_tag_list_ref (decoder->priv->tags)));
++        decoder->priv->tags_changed = FALSE;
++      }
++
+       break;
+     }
+     case GST_EVENT_GAP:
+-- 
+1.7.9.5
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base_1.4.%.bbappend b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base_1.4.%.bbappend
new file mode 100644 (file)
index 0000000..4f1f0f5
--- /dev/null
@@ -0,0 +1,14 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+PACKAGECONFIG[cdparanoia]     = "--enable-cdparanoia,--disable-cdparanoia,cdparanoia"
+PACKAGECONFIG += "cdparanoia"
+EXTRA_OECONF := "${@bb.data.getVar('EXTRA_OECONF',d,1).replace('--disable-cdparanoia', '--enable-cdparanoia')}"
+SRC_URI += "file://0001-riff-media-added-fourcc-to-all-mpeg4-video-caps.patch"
+
+# Do not strip binary
+#INHIBIT_PACKAGE_STRIP = "1"
+#do_strip[noexec] = "1"
+#do_strip="no"
+#do_strip(){
+#        pass
+#}
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base_1.4.5.bb b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base_1.4.5.bb
new file mode 100644 (file)
index 0000000..11cf8b4
--- /dev/null
@@ -0,0 +1,16 @@
+include gstreamer1.0-plugins-base.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=c54ce9345727175ff66d17b67ff51f58 \
+                    file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=a4e1830fce078028c8f0974161272607 \
+                    file://COPYING.LIB;md5=6762ed442b3822387a51c92d928ead0d \
+                   "
+
+SRC_URI += "file://do-not-change-eos-event-to-gap-event-if.patch \
+            file://get-caps-from-src-pad-when-query-caps.patch \
+            file://taglist-not-send-to-down-stream-if-all-the-frame-cor.patch \
+"
+
+SRC_URI[md5sum] = "357165af625c0ca353ab47c5d843920e"
+SRC_URI[sha256sum] = "77bd8199e7a312d3d71de9b7ddf761a3b78560a2c2a80829d0815ca39cbd551d"
+
+S = "${WORKDIR}/gst-plugins-base-${PV}"
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good.inc b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good.inc
new file mode 100644 (file)
index 0000000..299b95f
--- /dev/null
@@ -0,0 +1,57 @@
+require gstreamer1.0-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2.1+"
+
+# libid3tag
+DEPENDS += "gstreamer1.0-plugins-base zlib bzip2 libcap"
+
+inherit gettext
+
+
+PACKAGECONFIG ?= " \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \
+    orc cairo flac gdk-pixbuf gudev jpeg libpng soup speex taglib \
+    "
+
+X11DEPENDS = "virtual/libx11 libsm libxrender libxfixes libxdamage"
+X11ENABLEOPTS = "--enable-x --enable-xshm"
+X11DISABLEOPTS = "--disable-x --disable-xshm"
+PACKAGECONFIG[x11]        = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse,--disable-pulse,pulseaudio"
+PACKAGECONFIG[cairo]      = "--enable-cairo,--disable-cairo,cairo"
+PACKAGECONFIG[flac]       = "--enable-flac,--disable-flac,flac"
+PACKAGECONFIG[gdk-pixbuf] = "--enable-gdk_pixbuf,--disable-gdk_pixbuf,gdk-pixbuf"
+PACKAGECONFIG[gudev]      = "--with-gudev,--without-gudev,udev"
+PACKAGECONFIG[jack]       = "--enable-jack,--disable-jack,jack"
+PACKAGECONFIG[jpeg]       = "--enable-jpeg,--disable-jpeg,jpeg"
+PACKAGECONFIG[libpng]     = "--enable-libpng,--disable-libpng,libpng"
+PACKAGECONFIG[soup]       = "--enable-soup,--disable-soup,libsoup-2.4"
+PACKAGECONFIG[speex]      = "--enable-speex,--disable-speex,speex"
+PACKAGECONFIG[taglib]     = "--enable-taglib,--disable-taglib,taglib"
+PACKAGECONFIG[vpx]        = "--enable-vpx,--disable-vpx,libvpx"
+PACKAGECONFIG[wavpack]    = "--enable-wavpack,--disable-wavpack,wavpack"
+
+# the 1394 plugins require both libraw1394 and libiec61883
+# the former is included in meta-oe, the latter isn't
+# -> disabled
+
+EXTRA_OECONF += " \
+    --enable-oss \
+    --enable-gst_v4l2 \
+    --without-libv4l2 \
+    --disable-directsound \
+    --disable-waveform \
+    --disable-oss4 \
+    --disable-sunaudio \
+    --disable-osx_audio \
+    --disable-osx_video \
+    --disable-aalib \
+    --disable-libcaca \
+    --disable-libdv \
+    --disable-shout2 \
+    --disable-examples \
+    --disable-dv1394 \
+    ${GSTREAMER_1_0_ORC} \
+"
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch
new file mode 100755 (executable)
index 0000000..53147df
--- /dev/null
@@ -0,0 +1,62 @@
+From c782a30482908a4b4dd9cd4abff9f9bc4016698f Mon Sep 17 00:00:00 2001
+From: Song Bing <b06498@freescale.com>
+Date: Tue, 5 Aug 2014 14:40:46 +0800
+Subject: [PATCH] gstrtpmp4gpay: set dafault value for MPEG4 without codec
+ data in caps.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=734263
+
+Upstream Status: Submitted
+
+Signed-off-by: Song Bing <b06498@freescale.com>
+---
+ gst/rtp/gstrtpmp4gpay.c |   19 ++++++++++++++++++-
+ 1 file changed, 18 insertions(+), 1 deletion(-)
+
+diff --git a/gst/rtp/gstrtpmp4gpay.c b/gst/rtp/gstrtpmp4gpay.c
+index 7913d9a..1749d39 100644
+--- a/gst/rtp/gstrtpmp4gpay.c
++++ b/gst/rtp/gstrtpmp4gpay.c
+@@ -390,6 +390,7 @@ gst_rtp_mp4g_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
+   const GValue *codec_data;
+   const gchar *media_type = NULL;
+   gboolean res;
++  const gchar *name;
+   rtpmp4gpay = GST_RTP_MP4G_PAY (payload);
+@@ -400,7 +401,6 @@ gst_rtp_mp4g_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
+     GST_LOG_OBJECT (rtpmp4gpay, "got codec_data");
+     if (G_VALUE_TYPE (codec_data) == GST_TYPE_BUFFER) {
+       GstBuffer *buffer;
+-      const gchar *name;
+       buffer = gst_value_get_buffer (codec_data);
+       GST_LOG_OBJECT (rtpmp4gpay, "configuring codec_data");
+@@ -426,6 +426,23 @@ gst_rtp_mp4g_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
+       rtpmp4gpay->config = gst_buffer_copy (buffer);
+     }
++  } else {
++    name = gst_structure_get_name (structure);
++
++    if (!strcmp (name, "video/mpeg")) {
++      rtpmp4gpay->profile = g_strdup ("1");
++
++      /* fixed rate */
++      rtpmp4gpay->rate = 90000;
++      /* video stream type */
++      rtpmp4gpay->streamtype = "4";
++      /* no params for video */
++      rtpmp4gpay->params = NULL;
++      /* mode */
++      rtpmp4gpay->mode = "generic";
++
++      media_type = "video";
++    }
+   }
+   if (media_type == NULL)
+     goto config_failed;
+-- 
+1.7.9.5
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch
new file mode 100755 (executable)
index 0000000..7f94f50
--- /dev/null
@@ -0,0 +1,25 @@
+commit d71d74daac8ed54156ed103958ab455c63c72b0e
+Author: Song Bing <b06498@freescale.com>
+Date:   Mon Nov 10 11:25:47 2014 +0800
+
+[asteriskh263] decrease the rank as we havn't this kind of decoder.
+
+Decrease the rank as we havn't this kind of decoder.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=739935
+
+Upstream Status: Pending
+
+Signed-off-by: Song Bing <b06498@freescale.com>
+
+diff --git a/gst/rtp/gstasteriskh263.c b/gst/rtp/gstasteriskh263.c
+index a01fbc8..8fa3194 100644
+--- a/gst/rtp/gstasteriskh263.c
++++ b/gst/rtp/gstasteriskh263.c
+@@ -226,5 +226,5 @@ gboolean
+ gst_asteriskh263_plugin_init (GstPlugin * plugin)
+ {
+   return gst_element_register (plugin, "asteriskh263",
+-      GST_RANK_SECONDARY, GST_TYPE_ASTERISK_H263);
++      GST_RANK_SECONDARY - 1, GST_TYPE_ASTERISK_H263);
+ }
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good_1.4.%.bbappend b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good_1.4.%.bbappend
new file mode 100644 (file)
index 0000000..e6711e7
--- /dev/null
@@ -0,0 +1,9 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+# Do not strip binary 
+#INHIBIT_PACKAGE_STRIP = "1" 
+#do_strip[noexec] = "1" 
+#do_strip="no" 
+#do_strip(){ 
+#        pass 
+#}
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good_1.4.5.bb b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good_1.4.5.bb
new file mode 100644 (file)
index 0000000..943ab60
--- /dev/null
@@ -0,0 +1,13 @@
+include gstreamer1.0-plugins-good.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+                    file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=a4e1830fce078028c8f0974161272607 \
+                    file://gst/replaygain/rganalysis.c;beginline=1;endline=23;md5=b60ebefd5b2f5a8e0cab6bfee391a5fe"
+
+SRC_URI += "file://0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch \
+            file://decrease_asteriskh263_rank.patch \
+"
+SRC_URI[md5sum] = "eaf1a6daf73749bc423feac301d60038"
+SRC_URI[sha256sum] = "79b1b5f3f7bcaa8a615202eb5e176121eeb8336960f70687e536ad78dbc7e641"
+
+S = "${WORKDIR}/gst-plugins-good-${PV}"
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly.inc b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly.inc
new file mode 100644 (file)
index 0000000..3d6d171
--- /dev/null
@@ -0,0 +1,31 @@
+require gstreamer1.0-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2.1+ & LGPLv2+"
+LICENSE_FLAGS = "commercial"
+
+DEPENDS += "gstreamer1.0-plugins-base libid3tag"
+
+inherit gettext
+
+
+PACKAGECONFIG ?= " \
+    orc a52dec lame mad mpeg2dec \
+    "
+
+PACKAGECONFIG[a52dec]   = "--enable-a52dec,--disable-a52dec,liba52"
+PACKAGECONFIG[cdio]     = "--enable-cdio,--disable-cdio,libcdio"
+PACKAGECONFIG[dvdread]  = "--enable-dvdread,--disable-dvdread,libdvdread"
+PACKAGECONFIG[lame]     = "--enable-lame,--disable-lame,lame"
+PACKAGECONFIG[mad]      = "--enable-mad,--disable-mad,libmad"
+PACKAGECONFIG[mpeg2dec] = "--enable-mpeg2dec,--disable-mpeg2dec,mpeg2dec"
+PACKAGECONFIG[x264]     = "--enable-x264,--disable-x264,x264"
+
+
+EXTRA_OECONF += " \
+    --disable-amrnb \
+    --disable-amrwb \
+    --disable-sidplay \
+    --disable-twolame \
+    ${GSTREAMER_1_0_ORC} \
+    "
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly_1.4.%.bbappend b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly_1.4.%.bbappend
new file mode 100644 (file)
index 0000000..c9b0ac6
--- /dev/null
@@ -0,0 +1,15 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+PACKAGECONFIG[amrnb]     = "--enable-amrnb,--disable-amrnb,opencore-amr"
+PACKAGECONFIG[amrwb]     = "--enable-amrwb,--disable-amrwb,opencore-amr"
+PACKAGECONFIG += "cdio dvdread amrnb amrwb mad"
+EXTRA_OECONF := "${@bb.data.getVar('EXTRA_OECONF',d,1).replace('--disable-amrnb', '--enable-amrnb').replace('--disable-amrwb', '--enable-amrwb')}"
+DEPENDS += "libmad"
+
+# Do not strip binary
+#INHIBIT_PACKAGE_STRIP = "1"
+#do_strip[noexec] = "1"
+#do_strip="no"
+#do_strip(){
+#        pass
+#}
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly_1.4.5.bb b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly_1.4.5.bb
new file mode 100644 (file)
index 0000000..25cb28c
--- /dev/null
@@ -0,0 +1,10 @@
+include gstreamer1.0-plugins-ugly.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+                    file://tests/check/elements/xingmux.c;beginline=1;endline=21;md5=4c771b8af188724855cb99cadd390068 "
+
+SRC_URI[md5sum] = "6954beed7bb9a93e426dee543ff46393"
+SRC_URI[sha256sum] = "5cd5e81cf618944f4dc935f1669b2125e8bb2fe9cc7dc8dc15b72237aca49067"
+
+S = "${WORKDIR}/gst-plugins-ugly-${PV}"
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins.inc b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins.inc
new file mode 100644 (file)
index 0000000..687aa2f
--- /dev/null
@@ -0,0 +1,57 @@
+SUMMARY = "Plugins for the GStreamer multimedia framework 1.x"
+HOMEPAGE = "http://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
+SECTION = "multimedia"
+DEPENDS = "gstreamer1.0"
+
+inherit autotools pkgconfig
+
+GSTREAMER_1_0_DEBUG ?= "--disable-debug"
+GSTREAMER_1_0_GIT_BRANCH ?= "master"
+EXTRA_OECONF = "--disable-valgrind ${GSTREAMER_1_0_DEBUG} --disable-examples "
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+LIBV = "1.0"
+require gst-plugins-package.inc
+
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+
+PACKAGES_DYNAMIC = "^${PN}-.*"
+
+# apply gstreamer hack after Makefile.in.in in source is replaced by our version from
+# ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in, but before configure is executed 
+# http://lists.linuxtogo.org/pipermail/openembedded-core/2012-November/032233.html
+oe_runconf_prepend() {
+       if [ -e ${S}/po/Makefile.in.in ]; then
+               sed -i -e "1a\\" -e 'GETTEXT_PACKAGE = @GETTEXT_PACKAGE@' ${S}/po/Makefile.in.in
+       fi
+}
+
+SRC_URI = "${@get_gst_srcuri(d)}"
+
+def get_gst_srcuri(d):
+    # check if expected prefix is present
+    prefix = "gstreamer1.0-"
+    bpn = d.getVar("BPN", True)
+    if not bpn.startswith(prefix):
+        bb.fatal('Invalid GStreamer 1.0 plugin package name "%s" : must start with "%s"' % (bpn, prefix))
+
+    # replaced prefix with "gst-", which is what is used for the tarball and repository filenames
+    gstpkg_basename = "gst-" + bpn[len(prefix):]
+    pv = d.getVar("PV", True)
+    branch = d.getVar("GSTREAMER_1_0_GIT_BRANCH", True)
+
+    if pv == "git":
+        s = "git://anongit.freedesktop.org/gstreamer/%s;branch=%s" % (gstpkg_basename, branch)
+    else:
+        s = "http://gstreamer.freedesktop.org/src/%s/%s-%s.tar.xz" % (gstpkg_basename, gstpkg_basename, pv)
+    return s
+
+delete_liblink_m4_file() {
+       # This m4 file contains nastiness which conflicts with libtool 2.2.2
+       rm "${S}/m4/lib-link.m4" || true
+}
+
+do_configure[prefuncs] += " delete_liblink_m4_file "
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0.inc b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0.inc
new file mode 100644 (file)
index 0000000..a01c33c
--- /dev/null
@@ -0,0 +1,27 @@
+SUMMARY = "GStreamer 1.0 multimedia framework"
+DESCRIPTION = "GStreamer is a multimedia framework for encoding and decoding video and sound. \
+It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime."
+HOMEPAGE = "http://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
+SECTION = "multimedia"
+LICENSE = "LGPLv2+"
+DEPENDS = "glib-2.0 libxml2 bison-native flex-native"
+
+inherit autotools pkgconfig gettext
+
+GSTREAMER_1_DEBUG ?= "--disable-debug"
+EXTRA_OECONF = "--disable-docbook --disable-gtk-doc \
+                --disable-dependency-tracking --disable-check \
+                --disable-examples --disable-tests \
+                --disable-valgrind ${GSTREAMER_1_DEBUG} \
+                "
+
+RRECOMMENDS_${PN}_qemux86    += "kernel-module-snd-ens1370 kernel-module-snd-rawmidi"
+RRECOMMENDS_${PN}_qemux86-64 += "kernel-module-snd-ens1370 kernel-module-snd-rawmidi"
+
+CACHED_CONFIGUREVARS += "ac_cv_header_valgrind_valgrind_h=no"
+
+FILES_${PN} += " ${libdir}/gstreamer-1.0/*.so"
+FILES_${PN}-dev += " ${libdir}/gstreamer-1.0/*.la ${libdir}/gstreamer-1.0/*.a"
+FILES_${PN}-dbg += " ${libdir}/gstreamer-1.0/.debug/ ${libexecdir}/gstreamer-1.0/.debug/"
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch
new file mode 100644 (file)
index 0000000..94f5cc5
--- /dev/null
@@ -0,0 +1,28 @@
+From 6b26f3dbf9bf577d71534ab7410de66d06e46ba2 Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv@pseudoterminal.org>
+Date: Sat, 6 Apr 2013 23:52:11 +0200
+Subject: [PATCH] Fix crash with gst-inspect Chris Lord <chris@openedhand.com>
+
+Upstream-Status: Pending
+
+Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+---
+ tools/gst-inspect.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/gst-inspect.c b/tools/gst-inspect.c
+index 23b7c44..b79b02e 100644
+--- a/tools/gst-inspect.c
++++ b/tools/gst-inspect.c
+@@ -1556,7 +1556,7 @@ main (int argc, char *argv[])
+   g_option_context_add_main_entries (ctx, options, GETTEXT_PACKAGE);
+   g_option_context_add_group (ctx, gst_init_get_option_group ());
+   if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+-    g_printerr ("Error initializing: %s\n", err->message);
++    g_printerr ("Error initializing: %s\n", err ? err->message : "(null)");
+     return -1;
+   }
+   g_option_context_free (ctx);
+-- 
+1.8.2
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0_1.4.5.bb b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0_1.4.5.bb
new file mode 100644 (file)
index 0000000..94be846
--- /dev/null
@@ -0,0 +1,14 @@
+include gstreamer1.0.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d \
+                    file://gst/gst.h;beginline=1;endline=21;md5=e059138481205ee2c6fc1c079c016d0d"
+
+SRC_URI = " \
+    http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.xz \
+    file://0001-Fix-crash-with-gst-inspect.patch \
+"
+SRC_URI[md5sum] = "88a9289c64a4950ebb4f544980234289"
+SRC_URI[sha256sum] = "40801aa7f979024526258a0e94707ba42b8ab6f7d2206e56adbc4433155cb0ae"
+
+S = "${WORKDIR}/gstreamer-${PV}"
+
index 2b25149..fe22cbe 100644 (file)
@@ -1,19 +1,19 @@
 DESCRIPTION = "librtmp Real-Time Messaging Protocol API"
 DESCRIPTION = "librtmp Real-Time Messaging Protocol API"
-LICENSE = "GPLv2"
+LICENSE = "LGPLv2"
+
 LIC_FILES_CHKSUM = "file://COPYING;md5=e344c8fa836c3a41c4cbd79d7bd3a379"
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=e344c8fa836c3a41c4cbd79d7bd3a379"
 
-DEPENDS = "openssl"
+DEPENDS = "openssl zlib"
 
 inherit gitpkgv
 
 
 inherit gitpkgv
 
+SRCREV = "a1900c3e152085406ecb87c1962c55ec9c6e4016"
+
 PKGV = "2.4+git${GITPKGV}"
 PV = "2.4+git${SRCPV}"
 PKGV = "2.4+git${GITPKGV}"
 PV = "2.4+git${SRCPV}"
-PR = "r2"
-
-BRANCH=""
-SRCREV="7340f6dbc6b3c8e552baab2e5a891c2de75cddcc"
+PR = "r3"
 
 
-SRC_URI = "git://git.ffmpeg.org/rtmpdump;protocol=git;branch=${BRANCH};tag=${SRCREV}"
+SRC_URI = "git://git.ffmpeg.org/rtmpdump;protocol=git"
 
 S = "${WORKDIR}/git/librtmp"
 
 
 S = "${WORKDIR}/git/librtmp"
 
@@ -22,6 +22,6 @@ do_compile() {
 }
 
 do_install() {
 }
 
 do_install() {
-       install -d ${D}/usr/lib
+       install -d ${D}${libdir}
        oe_runmake DESTDIR=${D} install
 }
        oe_runmake DESTDIR=${D} install
 }
diff --git a/meta-openvuplus/recipes-multimedia/vlc/libdca_0.0.5-5.bb b/meta-openvuplus/recipes-multimedia/vlc/libdca_0.0.5-5.bb
new file mode 100644 (file)
index 0000000..d80bf2d
--- /dev/null
@@ -0,0 +1,21 @@
+SUMMARY = "decoding library for DTS Coherent Acoustics streams"
+SECTION = "libs/multimedia"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+SRCREV = "4f6b5d6e6fb35994c342de95bf05e20117da549b"
+PR = "r1"
+DEPENDS += "quilt-native"
+
+SRC_URI = "git://anonscm.debian.org/collab-maint/${PN}.git;protocol=git"
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep lib_package pkgconfig
+
+do_unpackpost() {
+    QUILT_PATCHES=debian/patches quilt push -a
+    # single precision is enough and speeds up libdca by about 10-15%
+    sed -i -e 's/double/sample_t/g' ${S}/libdca/*.c ${S}/libdca/*.h
+}
+
+addtask unpackpost after do_patch before do_configure
index 9b383b5..7893df7 100755 (executable)
@@ -11,7 +11,7 @@ SRCREV="c8fc96e8e51e1ef71e1709f9dd6f733007f9463e"
 SRCDATE="20110215"
 BRANCH="master"
 PV = "experimental-git${SRCDATE}"
 SRCDATE="20110215"
 BRANCH="master"
 PV = "experimental-git${SRCDATE}"
-PR = "r10"
+PR = "r11"
 
 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
 
 
 FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
 
@@ -22,6 +22,7 @@ EXTRA_OECONF = " \
         HOST_SYS=${HOST_SYS} \
         STAGING_INCDIR=${STAGING_INCDIR} \
         STAGING_LIBDIR=${STAGING_LIBDIR} \
         HOST_SYS=${HOST_SYS} \
         STAGING_INCDIR=${STAGING_INCDIR} \
         STAGING_LIBDIR=${STAGING_LIBDIR} \
+       --with-gstversion=1.0 \
 "
 
 SRC_URI_append_vuplus = " \
 "
 
 SRC_URI_append_vuplus = " \
@@ -32,6 +33,7 @@ SRC_URI_append_vuplus = " \
        file://enigma2_plugins_autoresolution_fix.patch \
        file://enigma2_plugins_fancontrol2.patch \
        file://enigma2_plugins_gst_plugins_pkgname.patch \
        file://enigma2_plugins_autoresolution_fix.patch \
        file://enigma2_plugins_fancontrol2.patch \
        file://enigma2_plugins_gst_plugins_pkgname.patch \
+       file://enigma2_plugins_gst10_support.patch \
        file://dreamboxweb.png \
        file://dreamboxwebtv.png \
        file://favicon.ico \
        file://dreamboxweb.png \
        file://dreamboxwebtv.png \
        file://favicon.ico \
diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_gst10_support.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_gst10_support.patch
new file mode 100644 (file)
index 0000000..ddba4f1
--- /dev/null
@@ -0,0 +1,67 @@
+commit c5618b4c1fb10d9bb8a6128857aa2e8a7cf396b2
+Author: hschang <chang@dev3>
+Date:   Thu Jan 22 15:52:21 2015 +0900
+
+    gst10 patch
+
+diff --git a/configure.ac b/configure.ac
+index 106756e..f03a743 100755
+--- a/configure.ac
++++ b/configure.ac
+@@ -22,8 +22,13 @@ AX_PTHREAD
+ TUXBOX_APPS_DVB
++dnl versions of gstreamer and plugins-base
++AC_ARG_WITH(gstversion,
++        AS_HELP_STRING([--with-gstversion],[use gstreamer version (major.minor)]),
++        [GST_MAJORMINOR=$withval],[GST_MAJORMINOR=0.10])
++
+ PKG_CHECK_MODULES(ENIGMA2, enigma2)
+-PKG_CHECK_MODULES(GSTREAMER, gstreamer-0.10 gstreamer-pbutils-0.10)
++PKG_CHECK_MODULES(GSTREAMER, gstreamer-$GST_MAJORMINOR gstreamer-pbutils-$GST_MAJORMINOR)
+ PKG_CHECK_MODULES(LIBCRYPTO, libcrypto)
+ AC_ARG_WITH(debug,
+diff --git a/merlinmusicplayer/src/merlinmp3player/merlinmp3player.cpp b/merlinmusicplayer/src/merlinmp3player/merlinmp3player.cpp
+index 0f25e41..56b3760 100644
+--- a/merlinmusicplayer/src/merlinmp3player/merlinmp3player.cpp
++++ b/merlinmusicplayer/src/merlinmp3player/merlinmp3player.cpp
+@@ -123,7 +123,11 @@ eServiceMerlinMP3Player::eServiceMerlinMP3Player(eServiceReference ref):  m_ref(
+               g_object_set (G_OBJECT (source), "location", m_filename.c_str(), NULL);
+               gst_bin_add_many (GST_BIN (m_gst_pipeline), source, decoder, sink, NULL);
+               gst_element_link_many (source, decoder, sink, NULL);
++#if GST_VERSION_MAJOR < 1
+               gst_bus_set_sync_handler(gst_pipeline_get_bus (GST_PIPELINE (m_gst_pipeline)), gstBusSyncHandler, this);
++#else
++              gst_bus_set_sync_handler(gst_pipeline_get_bus (GST_PIPELINE (m_gst_pipeline)), gstBusSyncHandler, this, NULL);
++#endif
+               gst_element_set_state (m_gst_pipeline, GST_STATE_PLAYING);
+       }
+       else
+@@ -240,8 +244,11 @@ RESULT eServiceMerlinMP3Player::getLength(pts_t &pts)
+       
+       GstFormat fmt = GST_FORMAT_TIME;
+       gint64 len;
+-      
++#if GST_VERSION_MAJOR < 1
+       if (!gst_element_query_duration(m_gst_pipeline, &fmt, &len))
++#else
++      if (!gst_element_query_duration(m_gst_pipeline, fmt, &len))
++#endif
+               return -1;
+       
+               /* len is in nanoseconds. we have 90 000 pts per second. */
+@@ -295,8 +302,11 @@ RESULT eServiceMerlinMP3Player::getPlayPosition(pts_t &pts)
+       
+       GstFormat fmt = GST_FORMAT_TIME;
+       gint64 len;
+-      
++#if GST_VERSION_MAJOR < 1     
+       if (!gst_element_query_position(m_gst_pipeline, &fmt, &len))
++#else
++      if (!gst_element_query_position(m_gst_pipeline, fmt, &len))
++#endif
+               return -1;
+       
+               /* len is in nanoseconds. we have 90 000 pts per second. */
index cee82c6..d12bc61 100644 (file)
@@ -7,7 +7,7 @@ index 6255b30..d955011 100644
  Description: a client to use last.fm, the social music revolution 
  Maintainer: 3c5x9 <3c5x9@gmx.net>
 -Depends: enigma2 (>> 1.0git20070908), python-twisted-web, gst-plugin-neonhttpsrc, python-crypt
  Description: a client to use last.fm, the social music revolution 
  Maintainer: 3c5x9 <3c5x9@gmx.net>
 -Depends: enigma2 (>> 1.0git20070908), python-twisted-web, gst-plugin-neonhttpsrc, python-crypt
-+Depends: enigma2 (>> 1.0git20070908), python-twisted-web, gst-plugins-bad-neonhttpsrc, python-crypt
++Depends: enigma2 (>> 1.0git20070908), python-twisted-web, gstreamer1.0-plugins-bad-neonhttpsrc, python-crypt
 diff --git a/mytube/CONTROL/control b/mytube/CONTROL/control
 index 43f3093..6f343c9 100644
 --- a/mytube/CONTROL/control
 diff --git a/mytube/CONTROL/control b/mytube/CONTROL/control
 index 43f3093..6f343c9 100644
 --- a/mytube/CONTROL/control
@@ -17,7 +17,7 @@ index 43f3093..6f343c9 100644
  Maintainer: Mladen Horvat <acid-burn@opendreambox.org>
  Homepage: http://www.dream-multimedia-tv.de/
 -Depends: enigma2 (>= 2.6git20090520), python-twisted-web, python-gdata, gst-plugin-flv
  Maintainer: Mladen Horvat <acid-burn@opendreambox.org>
  Homepage: http://www.dream-multimedia-tv.de/
 -Depends: enigma2 (>= 2.6git20090520), python-twisted-web, python-gdata, gst-plugin-flv
-+Depends: enigma2 (>= 2.6git20090520), python-twisted-web, python-gdata, gst-plugins-good-flv
++Depends: enigma2 (>= 2.6git20090520), python-twisted-web, python-gdata, gstreamer1.0-plugins-good-flv
 diff --git a/netcaster/CONTROL/control b/netcaster/CONTROL/control
 index 0e69a47..83ac563 100644
 --- a/netcaster/CONTROL/control
 diff --git a/netcaster/CONTROL/control b/netcaster/CONTROL/control
 index 0e69a47..83ac563 100644
 --- a/netcaster/CONTROL/control
@@ -27,7 +27,7 @@ index 0e69a47..83ac563 100644
  Maintainer: 3c5x9 <3c5x9@gmx.net>
  Homepage: http://enigma2-plugins.schwerkraft.elitedvb.net/
 -Depends: enigma2 (>= 1.0git20071803), gst-plugin-neonhttpsrc (>= 0.10.4), gst-plugin-icydemux (>= 0.10.14)
  Maintainer: 3c5x9 <3c5x9@gmx.net>
  Homepage: http://enigma2-plugins.schwerkraft.elitedvb.net/
 -Depends: enigma2 (>= 1.0git20071803), gst-plugin-neonhttpsrc (>= 0.10.4), gst-plugin-icydemux (>= 0.10.14)
-+Depends: enigma2 (>= 1.0git20071803), gst-plugins-bad-neonhttpsrc (>= 0.10.4), gst-plugins-good-icydemux (>= 0.10.14)
++Depends: enigma2 (>= 1.0git20071803), gstreamer1.0-plugins-bad-neonhttpsrc (>= 0.10.4), gstreamer1.0-plugins-good-icydemux (>= 0.10.14)
 diff --git a/podcast/CONTROL/control b/podcast/CONTROL/control
 index 4bce2da..24209f5 100644
 --- a/podcast/CONTROL/control
 diff --git a/podcast/CONTROL/control b/podcast/CONTROL/control
 index 4bce2da..24209f5 100644
 --- a/podcast/CONTROL/control
@@ -37,7 +37,7 @@ index 4bce2da..24209f5 100644
  Maintainer: Nabil Hanna <nabil1978@web.de>
  Homepage: http://www.lt-forums.org/ali
 -Depends: enigma2 (>= 2.6git20090520), gst-plugin-neonhttpsrc, python-twisted-web
  Maintainer: Nabil Hanna <nabil1978@web.de>
  Homepage: http://www.lt-forums.org/ali
 -Depends: enigma2 (>= 2.6git20090520), gst-plugin-neonhttpsrc, python-twisted-web
-+Depends: enigma2 (>= 2.6git20090520), gst-plugins-good-neonhttpsrc, pythons-twisted-web
++Depends: enigma2 (>= 2.6git20090520), gstreamer1.0-plugins-good-neonhttpsrc, pythons-twisted-web
 diff --git a/zdfmediathek/src/plugin.py b/zdfmediathek/src/plugin.py
 index b46d12f..3b27d56 100644
 --- a/zdfmediathek/src/plugin.py
 diff --git a/zdfmediathek/src/plugin.py b/zdfmediathek/src/plugin.py
 index b46d12f..3b27d56 100644
 --- a/zdfmediathek/src/plugin.py
@@ -47,7 +47,7 @@ index b46d12f..3b27d56 100644
        try:
                #FIXMEE add better check ! ? !
 -              for line in popen("opkg info gst-plugin-rtsp").readlines():
        try:
                #FIXMEE add better check ! ? !
 -              for line in popen("opkg info gst-plugin-rtsp").readlines():
-+              for line in popen("opkg info gst-plugins-good-rtsp").readlines():
++              for line in popen("opkg info gstreamer1.0-plugins-good-rtsp").readlines():
                        if line.find("Version: ") != -1:
                                if line[9:] >= "0.10.23-r7.1":
                                        PLAY_MP4 = True
                        if line.find("Version: ") != -1:
                                if line[9:] >= "0.10.23-r7.1":
                                        PLAY_MP4 = True
index 0d95974..b2f054f 100644 (file)
@@ -3,34 +3,134 @@ MAINTAINER = "vuplus team"
 LICENSE = "GPLv2"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=c9e255efa454e0155c1fd758df7dcaf3"
 
 LICENSE = "GPLv2"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=c9e255efa454e0155c1fd758df7dcaf3"
 
-DEPENDS = "jpeg giflib libmad libpng libsigc++-1.2 gettext-native \
-       dreambox-dvbincludes freetype libdvbsi++ python swig-native \
-       libfribidi libxmlccwrap libdreamdvd gstreamer gst-plugin-dvbmediasink \
-       gst-plugins-bad gst-plugins-good gst-plugins-ugly python-wifi \
-       hostapd bridge-utils ntfs-3g dosfstools util-linux \
-"
+DEPENDS = " \
+        jpeg \
+        giflib \
+        libmad \
+        libpng \
+        libsigc++-1.2 \
+        gettext-native \
+        dreambox-dvbincludes \
+        freetype \
+        libdvbsi++ \
+        python \
+        swig-native \
+        libfribidi \
+        libxml2 \
+        libxmlccwrap \
+        libdreamdvd \
+        ${@base_contains("GST_VERSION", "1.0", "gstreamer1.0-plugins-base gstreamer1.0", "gst-plugins-base gstreamer", d)} \
+        python-wifi \
+        hostapd \
+        bridge-utils \
+        ntfs-3g \
+        dosfstools \
+        util-linux \
+       "
 
 
-GST_RDEPENDS = "gst-plugins-base-decodebin gst-plugins-base-decodebin2 gst-plugins-base-app gst-plugins-bad-fragmented \
-       gst-plugins-good-id3demux gst-plugins-ugly-mad gst-plugins-base-ogg gst-plugins-base-playbin \
-       gst-plugins-base-typefindfunctions gst-plugins-base-audioconvert gst-plugins-base-audioresample \
-       gst-plugins-good-wavparse gst-plugins-ugly-mpegstream \
-       gst-plugins-good-flac gst-plugin-dvbmediasink gst-plugins-bad-mpegdemux gst-plugins-ugly-dvdsub \
-       gst-plugins-good-souphttpsrc gst-plugins-ugly-mpegaudioparse gst-plugins-base-subparse \
-       gst-plugins-good-apetag gst-plugins-good-icydemux gst-plugins-good-autodetect gst-plugins-good-flv \
-       gst-plugins-bad-mms gst-plugins-ugly-asf gst-plugins-good-avi gst-plugins-bad-faad \
-"
+RDEPENDS_${PN} = " \
+       alsa-conf \
+        ethtool \
+       glibc-gconv-iso8859-15 \
+        parted \
+       ${PYTHON_RDEPS} \
+       ${GST_RDEPENDS} \
+       "
 
 
-GST_RTSP_RDEPENDS = "gst-plugins-good-udp gst-plugins-good-rtsp gst-plugins-good-rtp gst-plugins-good-rtpmanager"
-GST_ALSA_RDEPENDS = "gst-plugins-base-alsa alsa-conf"
-GST_MISC_RDEPENDS = "gst-plugins-good-matroska gst-plugins-good-isomp4 gst-plugins-base-vorbis gst-plugins-good-audioparsers"
-GST_DVD_RDEPENDS  = "gst-plugins-bad-cdxaparse gst-plugins-ugly-cdio gst-plugins-bad-vcdsrc"
-GST_BASE_RDEPENDS = "${GST_ALSA_RDEPENDS} ${GST_MISC_RDEPENDS} ${GST_RTSP_RDEPENDS}"
+PYTHON_RDEPS = " \
+        python-codecs \
+        python-core \
+        python-lang \
+        python-re \
+        python-threading \
+        python-xml \
+        python-fcntl \
+        python-stringold \
+        python-pickle \
+        python-netclient \
+       "
 
 
-RDEPENDS_${PN} = "python-codecs python-core python-lang python-re python-threading \
-       python-xml python-fcntl python-stringold python-pickle python-netclient \
-       glibc-gconv-iso8859-15 ethtool parted \
-       ${GST_RDEPENDS} ${GST_BASE_RDEPENDS} ${GST_DVD_RDEPENDS} \
-"
+GST_RDEPENDS = "${@base_contains('GST_VERSION', '1.0', ' \
+       gstreamer1.0-plugin-dvbmediasink \
+       gstreamer1.0-plugin-subsink \
+       gstreamer1.0-plugins-base-alsa \
+       gstreamer1.0-plugins-base-app \
+       gstreamer1.0-plugins-base-audioconvert \
+       gstreamer1.0-plugins-base-audioresample \
+       gstreamer1.0-plugins-base-ogg \
+       gstreamer1.0-plugins-base-playback \
+       gstreamer1.0-plugins-base-subparse \
+       gstreamer1.0-plugins-base-typefindfunctions \
+       gstreamer1.0-plugins-base-vorbis \
+       gstreamer1.0-plugins-good-apetag \
+       gstreamer1.0-plugins-good-audioparsers \
+       gstreamer1.0-plugins-good-autodetect \
+       gstreamer1.0-plugins-good-avi \
+       gstreamer1.0-plugins-good-flac \
+       gstreamer1.0-plugins-good-flv \
+       gstreamer1.0-plugins-good-icydemux \
+       gstreamer1.0-plugins-good-id3demux \
+       gstreamer1.0-plugins-good-isomp4 \
+       gstreamer1.0-plugins-good-matroska \
+       gstreamer1.0-plugins-good-rtp \
+       gstreamer1.0-plugins-good-rtpmanager \
+       gstreamer1.0-plugins-good-rtsp \
+       gstreamer1.0-plugins-good-souphttpsrc \
+       gstreamer1.0-plugins-good-udp \
+       gstreamer1.0-plugins-good-wavparse \
+       gstreamer1.0-plugins-bad-faad \
+       gstreamer1.0-plugins-bad-fragmented \
+       gstreamer1.0-plugins-bad-videoparsersbad \
+       gstreamer1.0-plugins-bad-mms \
+       gstreamer1.0-plugins-bad-mpegpsdemux \
+       gstreamer1.0-plugins-bad-mpegtsdemux \
+       gstreamer1.0-plugins-ugly-asf \
+       gstreamer1.0-plugins-ugly-cdio \
+       gstreamer1.0-plugins-ugly-dvdsub \
+       gstreamer1.0-plugins-ugly-mad \
+       ', ' \
+       gst-plugin-dvbmediasink \
+       gst-plugin-subsink \
+       gst-plugins-base-alsa \
+       gst-plugins-base-app \
+       gst-plugins-base-audioconvert \
+       gst-plugins-base-audioresample \
+       gst-plugins-base-decodebin \
+       gst-plugins-base-decodebin2 \
+       gst-plugins-base-ogg \
+       gst-plugins-base-playbin \
+       gst-plugins-base-subparse \
+       gst-plugins-base-typefindfunctions \
+       gst-plugins-base-vorbis \
+       gst-plugins-good-apetag \
+       gst-plugins-good-audioparsers \
+       gst-plugins-good-autodetect \
+       gst-plugins-good-avi \
+       gst-plugins-good-flac \
+       gst-plugins-good-flv \
+       gst-plugins-good-icydemux \
+       gst-plugins-good-id3demux \
+       gst-plugins-good-isomp4 \
+       gst-plugins-good-matroska \
+       gst-plugins-good-rtp \
+       gst-plugins-good-rtpmanager \
+       gst-plugins-good-rtsp \
+       gst-plugins-good-souphttpsrc \
+       gst-plugins-good-udp \
+       gst-plugins-good-wavparse \
+       gst-plugins-bad-cdxaparse \
+       gst-plugins-bad-faad \
+       gst-plugins-bad-mms \
+       gst-plugins-bad-mpegdemux \
+       gst-plugins-bad-vcdsrc \
+       gst-plugins-bad-fragmented \
+       gst-plugins-ugly-asf \
+       gst-plugins-ugly-cdio \
+       gst-plugins-ugly-dvdsub \
+       gst-plugins-ugly-mad \
+       gst-plugins-ugly-mpegstream \
+       gst-plugins-ugly-mpegaudioparse \
+       ', d)}"
 
 # 'forward depends' - no two providers can have the same PACKAGES_DYNAMIC, however both
 # enigma2 and enigma2-plugins produce enigma2-plugin-*.
 
 # 'forward depends' - no two providers can have the same PACKAGES_DYNAMIC, however both
 # enigma2 and enigma2-plugins produce enigma2-plugin-*.
@@ -67,7 +167,10 @@ SUMMARY_enigma2-plugin-systemplugins-crashreport = "automatically send crashlogs
 RDEPENDS_enigma2-plugin-systemplugins-crashreport = "python-twisted-mail python-twisted-names python-compression python-mime python-email"
 RDEPENDS_enigma2-plugin-systemplugins-wirelessaccesspoint = "hostapd bridge-utils"
 
 RDEPENDS_enigma2-plugin-systemplugins-crashreport = "python-twisted-mail python-twisted-names python-compression python-mime python-email"
 RDEPENDS_enigma2-plugin-systemplugins-wirelessaccesspoint = "hostapd bridge-utils"
 
-RDEPENDS_enigma2-plugin-extensions-streamtv = "librtmp0 gst-plugins-bad-rtmp "
+RDEPENDS_enigma2-plugin-extensions-streamtv = " \
+       librtmp1 \
+       ${@base_contains("GST_VERSION", "1.0", "gstreamer1.0-plugins-bad-rtmp", "gst-plugins-bad-rtmp", d)} \
+"
 
 DEPENDS += "djmount minidlna"
 RDEPENDS_enigma2-plugin-extensions-dlnaserver = "minidlna "
 
 DEPENDS += "djmount minidlna"
 RDEPENDS_enigma2-plugin-extensions-dlnaserver = "minidlna "
@@ -88,23 +191,23 @@ RDEPENDS_enigma2-plugin-systemplugins-backupsuitehdd = "mtd-utils-mkfs.ubifs mtd
 RDEPENDS_enigma2-plugin-systemplugins-backupsuiteusb = "enigma2-plugin-extensions-backupsuitehdd"
 
 PN = "enigma2"
 RDEPENDS_enigma2-plugin-systemplugins-backupsuiteusb = "enigma2-plugin-extensions-backupsuitehdd"
 
 PN = "enigma2"
-PR = "r93"
+PR = "r94"
 
 inherit gitpkgv pythonnative
 
 ####################################################
 PV = "experimental-gitr${SRCPV}"
 PKGV = "experimental-gitr${GITPKGV}"
 
 inherit gitpkgv pythonnative
 
 ####################################################
 PV = "experimental-gitr${SRCPV}"
 PKGV = "experimental-gitr${GITPKGV}"
-BRANCH = "vuplus_experimental"
+BRANCH = "gst10"
 SRCREV = ""
 ####################################################
 
 # enigma2_vuplus_mediaplayer.patch is for trick-play in media player
 
 SRCREV = ""
 ####################################################
 
 # enigma2_vuplus_mediaplayer.patch is for trick-play in media player
 
-SRC_URI = "git://code.vuplus.com/git/dvbapp.git;protocol=http;branch=${BRANCH};tag=${SRCREV} \
+#SRC_URI = "git://code.vuplus.com/git/dvbapp.git;protocol=http;branch=${BRANCH};tag=${SRCREV} 
+SRC_URI = "git:///home/joseph/work2/work/enigma2;protocol=file;branch=${BRANCH};tag=${SRCREV} \
        file://enigma2_vuplus_skin.patch \
        file://enigma2_vuplus_mediaplayer.patch \
        file://enigma2_vuplus_skin.patch \
        file://enigma2_vuplus_mediaplayer.patch \
-       file://enigma2_vuplus_mediaplayer_subtitle.patch \
        file://enigma2_vuplus_remove_dreambox_enigma.patch \
        file://enigma2_vuplus_vfd_mode.patch \
        file://enigma2_vuplus_pluginbrowser.patch \
        file://enigma2_vuplus_remove_dreambox_enigma.patch \
        file://enigma2_vuplus_vfd_mode.patch \
        file://enigma2_vuplus_pluginbrowser.patch \
@@ -116,6 +219,7 @@ SRC_URI = "git://code.vuplus.com/git/dvbapp.git;protocol=http;branch=${BRANCH};t
        file://enigma2_vuplus_conversion_error.patch \
        file://enigma2_vuplus_default_arg_error.patch \
        file://enigma2_vuplus_wrong_boolean_type.patch \
        file://enigma2_vuplus_conversion_error.patch \
        file://enigma2_vuplus_default_arg_error.patch \
        file://enigma2_vuplus_wrong_boolean_type.patch \
+       file://enigma2_vuplus_disable_subtitle_sync_mode_bug.patch \
        file://MyriadPro-Regular.otf \
        file://MyriadPro-Semibold.otf \
        file://MyriadPro-SemiboldIt.otf \
        file://MyriadPro-Regular.otf \
        file://MyriadPro-Semibold.otf \
        file://MyriadPro-SemiboldIt.otf \
@@ -124,8 +228,12 @@ SRC_URI = "git://code.vuplus.com/git/dvbapp.git;protocol=http;branch=${BRANCH};t
        file://number_key \
 "
 
        file://number_key \
 "
 
+SRC_URI_append = " ${@base_contains('GST_VERSION', '1.0', '', 'file://enbalesubtitleshack.patch', d)}"
+
 SRC_URI_append = " ${@base_contains("VUPLUS_FEATURES", "vuwlan", "file://enigma2_vuplus_networksetup.patch", "", d)}"
 
 SRC_URI_append = " ${@base_contains("VUPLUS_FEATURES", "vuwlan", "file://enigma2_vuplus_networksetup.patch", "", d)}"
 
+LDFLAGS_prepend = "${@base_contains('GST_VERSION', '1.0', ' -lxml2 ', '', d)}"
+
 def change_po():
     import os
     try:
 def change_po():
     import os
     try:
@@ -185,6 +293,7 @@ do_compile_prepend_vuplus() {
 
 EXTRA_OECONF = " \
         --enable-dependency-tracking \
 
 EXTRA_OECONF = " \
         --enable-dependency-tracking \
+       ${@base_contains("GST_VERSION", "1.0", "--with-gstversion=1.0", "", d)} \
        ${@base_contains("VUPLUS_FEATURES", "display-text-vfd", "--with-display-text-vfd" , "", d)} \
        ${@base_contains("VUPLUS_FEATURES", "display-graphic-vfd", "--with-display-graphic-vfd" , "", d)} \
        ${@base_contains("VUPLUS_FEATURES", "right-half-vfd-skin", "--with-set-right-half-vfd-skin" , "", d)} \
        ${@base_contains("VUPLUS_FEATURES", "display-text-vfd", "--with-display-text-vfd" , "", d)} \
        ${@base_contains("VUPLUS_FEATURES", "display-graphic-vfd", "--with-display-graphic-vfd" , "", d)} \
        ${@base_contains("VUPLUS_FEATURES", "right-half-vfd-skin", "--with-set-right-half-vfd-skin" , "", d)} \
diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2/enbalesubtitleshack.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2/enbalesubtitleshack.patch
new file mode 100644 (file)
index 0000000..4c5d046
--- /dev/null
@@ -0,0 +1,13 @@
+diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp
+index 14c224f..55156b4 100755
+--- a/lib/service/servicemp3.cpp
++++ b/lib/service/servicemp3.cpp
+@@ -23,6 +23,8 @@
+ #define HTTP_TIMEOUT 10
++#define GSTREAMER_SUBTITLE_SYNC_MODE_BUG
++
+ typedef enum
+ {
+       GST_PLAY_FLAG_VIDEO         = 0x00000001,
diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2/enigma2_vuplus_disable_subtitle_sync_mode_bug.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2/enigma2_vuplus_disable_subtitle_sync_mode_bug.patch
new file mode 100644 (file)
index 0000000..b1d4861
--- /dev/null
@@ -0,0 +1,13 @@
+diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp
+index d27ce4f..4da7762 100755
+--- a/lib/service/servicemp3.cpp
++++ b/lib/service/servicemp3.cpp
+@@ -19,8 +19,6 @@
+ #include <gst/pbutils/missing-plugins.h>
+ #include <sys/stat.h>
+-#define GSTREAMER_SUBTITLE_SYNC_MODE_BUG
+-
+ #define SUBTITLE_DEBUG
+ #define HTTP_TIMEOUT 10
index 813687c..240c7d0 100644 (file)
@@ -129,86 +129,4 @@ index 80cc196..7abb2ee 100755
                        self.doSeekRelative(-1)
                elif self.isStateForward(seekstate):
                        speed = seekstate[1]
                        self.doSeekRelative(-1)
                elif self.isStateForward(seekstate):
                        speed = seekstate[1]
-diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp
-index e79be09..ae4611c 100755
---- a/lib/service/servicemp3.cpp
-+++ b/lib/service/servicemp3.cpp
-@@ -245,6 +245,7 @@ eServiceMP3::eServiceMP3(eServiceReference ref)
-       CONNECT(m_pump.recv_msg, eServiceMP3::gstPoll);
-       m_aspect = m_width = m_height = m_framerate = m_progressive = -1;
-+      m_cur_rate=1.0;
-       m_state = stIdle;
-       eDebug("eServiceMP3::construct!");
-@@ -540,6 +541,9 @@ RESULT eServiceMP3::unpause()
-       if (!m_gst_playbin || m_state != stRunning)
-               return -1;
-+      if(m_cur_rate!=1.0)
-+              trickSeek(1);
-+
-       gst_element_set_state(m_gst_playbin, GST_STATE_PLAYING);
-       return 0;
-@@ -575,7 +579,7 @@ RESULT eServiceMP3::seekToImpl(pts_t to)
- {
-               /* convert pts to nanoseconds */
-       gint64 time_nanoseconds = to * 11111LL;
--      if (!gst_element_seek (m_gst_playbin, 1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
-+      if (!gst_element_seek (m_gst_playbin, m_cur_rate, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
-               GST_SEEK_TYPE_SET, time_nanoseconds,
-               GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE))
-       {
-@@ -612,19 +616,23 @@ RESULT eServiceMP3::trickSeek(gdouble ratio)
-       if (!ratio)
-               return seekRelative(0, 0);
-+      eSingleLocker l(m_subs_to_pull_lock);
-+
-       GstEvent *s_event;
-       int flags;
-       flags = GST_SEEK_FLAG_NONE;
-       flags |= GST_SEEK_FLAG_FLUSH;
- //    flags |= GstSeekFlags (GST_SEEK_FLAG_ACCURATE);
--      flags |= GST_SEEK_FLAG_KEY_UNIT;
-+//    flags |= GST_SEEK_FLAG_KEY_UNIT;
- //    flags |= GstSeekFlags (GST_SEEK_FLAG_SEGMENT);
- //    flags |= GstSeekFlags (GST_SEEK_FLAG_SKIP);
-       GstFormat fmt = GST_FORMAT_TIME;
--      gint64 pos, len;
-+      pts_t pos;
-+      gint64 len;
-       gst_element_query_duration(m_gst_playbin, &fmt, &len);
--      gst_element_query_position(m_gst_playbin, &fmt, &pos);
-+      getPlayPosition(pos);
-+      pos=pos*11111;
-       if ( ratio >= 0 )
-       {
-@@ -642,7 +650,11 @@ RESULT eServiceMP3::trickSeek(gdouble ratio)
-               eDebug("eServiceMP3::trickSeek failed");
-               return -1;
-       }
--
-+      m_subtitle_pages.clear();
-+      m_prev_decoder_time = -1;
-+      m_decoder_time_valid_state = 0;
-+      m_subs_to_pull = 0;
-+      m_cur_rate=ratio;
-       return 0;
- }
-diff --git a/lib/service/servicemp3.h b/lib/service/servicemp3.h
-index 41aec13..cb5b048 100644
---- a/lib/service/servicemp3.h
-+++ b/lib/service/servicemp3.h
-@@ -269,6 +269,7 @@ private:
-       gint m_aspect, m_width, m_height, m_framerate, m_progressive;
-       std::string m_useragent;
-       RESULT trickSeek(gdouble ratio);
-+      double m_cur_rate;
- };
- #endif
+