From 44a03bcd91c13fdb31e1a20423d2dd01247a955d Mon Sep 17 00:00:00 2001 From: hschang Date: Fri, 30 Jan 2015 13:14:30 +0900 Subject: [PATCH] [gstreamer] Update to 1.4.5 [librtmp] Update to version 1 --- meta-openvuplus/conf/distro/vuplus.conf | 6 +- .../gstreamer1.0/gst-plugins-package.inc | 58 ++ .../gstreamer1.0-plugin-dvbmediasink.bb | 36 + .../gstreamer1.0-plugin-dvbmediasink.bbappend | 19 + .../gstreamer10_dvbmediasink_vuplus.patch | 199 ++++++ .../gstreamer10_dvbmediasink_vuplus_wmv.patch | 791 +++++++++++++++++++++ .../gstreamer1.0/gstreamer1.0-plugin-subsink.bb | 35 + .../gstreamer1.0/gstreamer1.0-plugins-bad.inc | 135 ++++ ...heck-for-GL-GLU-EGL-GLES2-libs-if-disable.patch | 41 ++ ...1-rtmp-fix-seeking-and-potential-segfault.patch | 63 ++ .../configure-allow-to-disable-libssh2.patch | 64 ++ .../gstreamer1.0-plugins-bad_1.4.%.bbappend | 14 + .../gstreamer1.0/gstreamer1.0-plugins-bad_1.4.5.bb | 14 + .../gstreamer1.0/gstreamer1.0-plugins-base.inc | 40 ++ ...edia-added-fourcc-to-all-mpeg4-video-caps.patch | 27 + .../do-not-change-eos-event-to-gap-event-if.patch | 37 + .../get-caps-from-src-pad-when-query-caps.patch | 44 ++ ...-send-to-down-stream-if-all-the-frame-cor.patch | 57 ++ .../gstreamer1.0-plugins-base_1.4.%.bbappend | 14 + .../gstreamer1.0-plugins-base_1.4.5.bb | 16 + .../gstreamer1.0/gstreamer1.0-plugins-good.inc | 57 ++ ...ay-set-dafault-value-for-MPEG4-without-co.patch | 62 ++ .../decrease_asteriskh263_rank.patch | 25 + .../gstreamer1.0-plugins-good_1.4.%.bbappend | 9 + .../gstreamer1.0-plugins-good_1.4.5.bb | 13 + .../gstreamer1.0/gstreamer1.0-plugins-ugly.inc | 31 + .../gstreamer1.0-plugins-ugly_1.4.%.bbappend | 15 + .../gstreamer1.0-plugins-ugly_1.4.5.bb | 10 + .../gstreamer1.0/gstreamer1.0-plugins.inc | 57 ++ .../gstreamer1.0/gstreamer1.0.inc | 27 + .../0001-Fix-crash-with-gst-inspect.patch | 28 + .../gstreamer1.0/gstreamer1.0_1.4.5.bb | 14 + meta-openvuplus/recipes-multimedia/rtmp/librtmp.bb | 16 +- .../recipes-multimedia/vlc/libdca_0.0.5-5.bb | 21 + .../recipes-vuplus/enigma2/enigma2-plugins.bb | 4 +- .../enigma2_plugins_gst10_support.patch | 67 ++ .../enigma2_plugins_gst_plugins_pkgname.patch | 10 +- meta-openvuplus/recipes-vuplus/enigma2/enigma2.bb | 169 ++++- .../enigma2/enigma2/enbalesubtitleshack.patch | 13 + ...ma2_vuplus_disable_subtitle_sync_mode_bug.patch | 13 + .../enigma2/enigma2_vuplus_mediaplayer.patch | 84 +-- 41 files changed, 2327 insertions(+), 128 deletions(-) create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gst-plugins-package.inc create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink.bb create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink.bbappend create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink/gstreamer10_dvbmediasink_vuplus.patch create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink/gstreamer10_dvbmediasink_vuplus_wmv.patch create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-subsink.bb create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad.inc create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/0001-rtmp-fix-seeking-and-potential-segfault.patch create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad_1.4.%.bbappend create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad_1.4.5.bb create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base.inc create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/0001-riff-media-added-fourcc-to-all-mpeg4-video-caps.patch create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base_1.4.%.bbappend create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base_1.4.5.bb create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good.inc create mode 100755 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch create mode 100755 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good_1.4.%.bbappend create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good_1.4.5.bb create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly.inc create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly_1.4.%.bbappend create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly_1.4.5.bb create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins.inc create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0.inc create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch create mode 100644 meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0_1.4.5.bb create mode 100644 meta-openvuplus/recipes-multimedia/vlc/libdca_0.0.5-5.bb create mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_gst10_support.patch create mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2/enbalesubtitleshack.patch create mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2/enigma2_vuplus_disable_subtitle_sync_mode_bug.patch diff --git a/meta-openvuplus/conf/distro/vuplus.conf b/meta-openvuplus/conf/distro/vuplus.conf index 457819d..cc96317 100644 --- a/meta-openvuplus/conf/distro/vuplus.conf +++ b/meta-openvuplus/conf/distro/vuplus.conf @@ -29,8 +29,8 @@ SYSVINIT_ENABLED_GETTYS = "" # meta/classes/image_types.bbclass IMAGE_FSTYPES =+ "tar.bz2" - # package versions +GST_VERSION = "1.0" 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" +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}" 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 index 0000000..7bb5678 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gst-plugins-package.inc @@ -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 index 0000000..b444996 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink.bb @@ -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 index 0000000..52ea114 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink.bbappend @@ -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 index 0000000..6cd49bf --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink/gstreamer10_dvbmediasink_vuplus.patch @@ -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 index 0000000..3a32a5a --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink/gstreamer10_dvbmediasink_vuplus_wmv.patch @@ -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 index 0000000..2d171db --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-subsink.bb @@ -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 index 0000000..c657aee --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad.inc @@ -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 index 0000000..042a32c --- /dev/null +++ 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 @@ -0,0 +1,41 @@ +From deba0da45ec821209a7ed148a4521d562e6512cd Mon Sep 17 00:00:00 2001 +From: Carlos Rafael Giani +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 +--- + 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 index 0000000..a704c5c --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/0001-rtmp-fix-seeking-and-potential-segfault.patch @@ -0,0 +1,63 @@ +From bb9478be40b450629f165d5d3566f4e4a3ee1b66 Mon Sep 17 00:00:00 2001 +From: Athanasios Oikonomou +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 index 0000000..d52afd5 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch @@ -0,0 +1,64 @@ +From f59c5269f92d59a5296cbfeeb682d42095cd88ad Mon Sep 17 00:00:00 2001 +From: Wenzong Fan +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 +--- + 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 index 0000000..814e9c8 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad_1.4.%.bbappend @@ -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 index 0000000..59065de --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad_1.4.5.bb @@ -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 index 0000000..8fdf53f --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base.inc @@ -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 index 0000000..b37b06b --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/0001-riff-media-added-fourcc-to-all-mpeg4-video-caps.patch @@ -0,0 +1,27 @@ +From 979c5cb85c4f3e59dcc44c1e6c75315dee7dfbc2 Mon Sep 17 00:00:00 2001 +From: Maros Ondrasek +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 index 0000000..0407a30 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch @@ -0,0 +1,37 @@ +From b608d027fff6efc2d1988ebf169cbe3b2b44a61b Mon Sep 17 00:00:00 2001 +From: zhouming +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 +--- + 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 index 0000000..0fc561c --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch @@ -0,0 +1,44 @@ +From af0dac26f62aaceb4bf266720911953793e0fc5d Mon Sep 17 00:00:00 2001 +From: zhouming +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 +--- + 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 index 0000000..51fdc7e --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch @@ -0,0 +1,57 @@ +From 68fa1b1425ad2c5f7c5013d0943153a8a6d0934e Mon Sep 17 00:00:00 2001 +From: Jian Li +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 +--- + 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 index 0000000..4f1f0f5 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base_1.4.%.bbappend @@ -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 index 0000000..11cf8b4 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base_1.4.5.bb @@ -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 index 0000000..299b95f --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good.inc @@ -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 index 0000000..53147df --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch @@ -0,0 +1,62 @@ +From c782a30482908a4b4dd9cd4abff9f9bc4016698f Mon Sep 17 00:00:00 2001 +From: Song Bing +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 +--- + 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 index 0000000..7f94f50 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch @@ -0,0 +1,25 @@ +commit d71d74daac8ed54156ed103958ab455c63c72b0e +Author: Song Bing +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 + +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 index 0000000..e6711e7 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good_1.4.%.bbappend @@ -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 index 0000000..943ab60 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good_1.4.5.bb @@ -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 index 0000000..3d6d171 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly.inc @@ -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 index 0000000..c9b0ac6 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly_1.4.%.bbappend @@ -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 index 0000000..25cb28c --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly_1.4.5.bb @@ -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 index 0000000..687aa2f --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins.inc @@ -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 index 0000000..a01c33c --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0.inc @@ -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 index 0000000..94f5cc5 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch @@ -0,0 +1,28 @@ +From 6b26f3dbf9bf577d71534ab7410de66d06e46ba2 Mon Sep 17 00:00:00 2001 +From: Carlos Rafael Giani +Date: Sat, 6 Apr 2013 23:52:11 +0200 +Subject: [PATCH] Fix crash with gst-inspect Chris Lord + +Upstream-Status: Pending + +Signed-off-by: Carlos Rafael Giani +--- + 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 index 0000000..94be846 --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0_1.4.5.bb @@ -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}" + diff --git a/meta-openvuplus/recipes-multimedia/rtmp/librtmp.bb b/meta-openvuplus/recipes-multimedia/rtmp/librtmp.bb index 2b25149..fe22cbe 100644 --- a/meta-openvuplus/recipes-multimedia/rtmp/librtmp.bb +++ b/meta-openvuplus/recipes-multimedia/rtmp/librtmp.bb @@ -1,19 +1,19 @@ DESCRIPTION = "librtmp Real-Time Messaging Protocol API" -LICENSE = "GPLv2" +LICENSE = "LGPLv2" + LIC_FILES_CHKSUM = "file://COPYING;md5=e344c8fa836c3a41c4cbd79d7bd3a379" -DEPENDS = "openssl" +DEPENDS = "openssl zlib" inherit gitpkgv +SRCREV = "a1900c3e152085406ecb87c1962c55ec9c6e4016" + 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" @@ -22,6 +22,6 @@ do_compile() { } do_install() { - install -d ${D}/usr/lib + install -d ${D}${libdir} 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 index 0000000..d80bf2d --- /dev/null +++ b/meta-openvuplus/recipes-multimedia/vlc/libdca_0.0.5-5.bb @@ -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 diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins.bb b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins.bb index 9b383b5..7893df7 100755 --- a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins.bb +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins.bb @@ -11,7 +11,7 @@ SRCREV="c8fc96e8e51e1ef71e1709f9dd6f733007f9463e" SRCDATE="20110215" BRANCH="master" PV = "experimental-git${SRCDATE}" -PR = "r10" +PR = "r11" FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" @@ -22,6 +22,7 @@ EXTRA_OECONF = " \ HOST_SYS=${HOST_SYS} \ STAGING_INCDIR=${STAGING_INCDIR} \ STAGING_LIBDIR=${STAGING_LIBDIR} \ + --with-gstversion=1.0 \ " 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_gst10_support.patch \ 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 index 0000000..ddba4f1 --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_gst10_support.patch @@ -0,0 +1,67 @@ +commit c5618b4c1fb10d9bb8a6128857aa2e8a7cf396b2 +Author: hschang +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. */ diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_gst_plugins_pkgname.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_gst_plugins_pkgname.patch index cee82c6..d12bc61 100644 --- a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_gst_plugins_pkgname.patch +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_gst_plugins_pkgname.patch @@ -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 -+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 @@ -17,7 +17,7 @@ index 43f3093..6f343c9 100644 Maintainer: Mladen Horvat 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 @@ -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) -+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 @@ -37,7 +37,7 @@ index 4bce2da..24209f5 100644 Maintainer: Nabil Hanna 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 @@ -47,7 +47,7 @@ index b46d12f..3b27d56 100644 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 diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2.bb b/meta-openvuplus/recipes-vuplus/enigma2/enigma2.bb index 0d95974..b2f054f 100644 --- a/meta-openvuplus/recipes-vuplus/enigma2/enigma2.bb +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2.bb @@ -3,34 +3,134 @@ MAINTAINER = "vuplus team" 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-*. @@ -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-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 " @@ -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" -PR = "r93" +PR = "r94" 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 -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_mediaplayer_subtitle.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_disable_subtitle_sync_mode_bug.patch \ 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 \ " +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)}" +LDFLAGS_prepend = "${@base_contains('GST_VERSION', '1.0', ' -lxml2 ', '', d)}" + def change_po(): import os try: @@ -185,6 +293,7 @@ do_compile_prepend_vuplus() { 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)} \ diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2/enbalesubtitleshack.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2/enbalesubtitleshack.patch new file mode 100644 index 0000000..4c5d046 --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2/enbalesubtitleshack.patch @@ -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 index 0000000..b1d4861 --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2/enigma2_vuplus_disable_subtitle_sync_mode_bug.patch @@ -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 + #include + +-#define GSTREAMER_SUBTITLE_SYNC_MODE_BUG +- + #define SUBTITLE_DEBUG + + #define HTTP_TIMEOUT 10 diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2/enigma2_vuplus_mediaplayer.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2/enigma2_vuplus_mediaplayer.patch index 813687c..240c7d0 100644 --- a/meta-openvuplus/recipes-vuplus/enigma2/enigma2/enigma2_vuplus_mediaplayer.patch +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2/enigma2_vuplus_mediaplayer.patch @@ -129,86 +129,4 @@ index 80cc196..7abb2ee 100755 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 + -- 2.7.4