summaryrefslogtreecommitdiff
path: root/meta-openvuplus/recipes-multimedia
diff options
context:
space:
mode:
authorhschang <chang@dev3>2015-01-30 04:14:30 (GMT)
committerhschang <chang@dev3>2015-02-05 07:29:06 (GMT)
commit44a03bcd91c13fdb31e1a20423d2dd01247a955d (patch)
tree496a8d23428db7e60d78a2dfc1d45b77b40e88aa /meta-openvuplus/recipes-multimedia
parent03e8e707150f231306ece038ed8327d05aa2ebc6 (diff)
[gstreamer] Update to 1.4.5
[librtmp] Update to version 1
Diffstat (limited to 'meta-openvuplus/recipes-multimedia')
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gst-plugins-package.inc58
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink.bb36
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink.bbappend19
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink/gstreamer10_dvbmediasink_vuplus.patch199
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-dvbmediasink/gstreamer10_dvbmediasink_vuplus_wmv.patch791
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugin-subsink.bb35
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad.inc135
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch41
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/0001-rtmp-fix-seeking-and-potential-segfault.patch63
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch64
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad_1.4.%.bbappend14
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad_1.4.5.bb14
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base.inc40
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/0001-riff-media-added-fourcc-to-all-mpeg4-video-caps.patch27
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch37
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch44
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch57
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base_1.4.%.bbappend14
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base_1.4.5.bb16
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good.inc57
-rwxr-xr-xmeta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch62
-rwxr-xr-xmeta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch25
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good_1.4.%.bbappend9
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good_1.4.5.bb13
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly.inc31
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly_1.4.%.bbappend15
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-ugly_1.4.5.bb10
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins.inc57
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0.inc27
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch28
-rw-r--r--meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0_1.4.5.bb14
-rw-r--r--meta-openvuplus/recipes-multimedia/rtmp/librtmp.bb16
-rw-r--r--meta-openvuplus/recipes-multimedia/vlc/libdca_0.0.5-5.bb21
33 files changed, 2081 insertions, 8 deletions
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 <dv@pseudoterminal.org>
+Date: Wed, 27 Aug 2014 14:47:25 +0200
+Subject: [PATCH] gl: do not check for GL/GLU/EGL/GLES2 libs if disabled in
+ configuration
+
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=735522]
+
+Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+---
+ configure.ac | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 1a46afb..e85d4ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -661,10 +661,16 @@ case $host in
+ fi
+ ;;
+ *)
+- AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h)
+- AG_GST_CHECK_LIBHEADER(GLU, GLU, gluSphere,, GL/glu.h)
+- AG_GST_CHECK_LIBHEADER(GLES2, GLESv2, glTexImage2D,, GLES2/gl2.h)
+- AG_GST_CHECK_LIBHEADER(EGL, EGL, eglGetError,, EGL/egl.h)
++ if test "x$NEED_GL" != "xno"; then
++ AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h)
++ AG_GST_CHECK_LIBHEADER(GLU, GLU, gluSphere,, GL/glu.h)
++ fi
++ if test "x$NEED_GLES2" != "xno"; then
++ AG_GST_CHECK_LIBHEADER(GLES2, GLESv2, glTexImage2D,, GLES2/gl2.h)
++ fi
++ if test "x$NEED_EGL" != "xno"; then
++ AG_GST_CHECK_LIBHEADER(EGL, EGL, eglGetError,, EGL/egl.h)
++ fi
+
+ old_LIBS=$LIBS
+ old_CFLAGS=$CFLAGS
+--
+1.8.3.2
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/0001-rtmp-fix-seeking-and-potential-segfault.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/0001-rtmp-fix-seeking-and-potential-segfault.patch
new file mode 100644
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 <athoik@gmail.com>
+Date: Tue, 28 Oct 2014 08:48:20 +0200
+Subject: [PATCH] rtmp: fix seeking and potential segfault
+
+Segfault info: https://bugzilla.gnome.org/show_bug.cgi?id=739263
+Seeking info: http://forums.openpli.org/topic/32910-mediaplayer-seek-doesnt-work-with-rtmp-streams/
+
+diff --git a/ext/rtmp/gstrtmpsrc.c b/ext/rtmp/gstrtmpsrc.c
+index b9ecfcf..8b4bf22 100644
+--- a/ext/rtmp/gstrtmpsrc.c
++++ b/ext/rtmp/gstrtmpsrc.c
+@@ -86,7 +86,6 @@ static void gst_rtmp_src_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+ static void gst_rtmp_src_finalize (GObject * object);
+
+-static gboolean gst_rtmp_src_unlock (GstBaseSrc * src);
+ static gboolean gst_rtmp_src_stop (GstBaseSrc * src);
+ static gboolean gst_rtmp_src_start (GstBaseSrc * src);
+ static gboolean gst_rtmp_src_is_seekable (GstBaseSrc * src);
+@@ -137,7 +136,6 @@ gst_rtmp_src_class_init (GstRTMPSrcClass * klass)
+
+ gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_rtmp_src_start);
+ gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_rtmp_src_stop);
+- gstbasesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_rtmp_src_unlock);
+ gstbasesrc_class->is_seekable = GST_DEBUG_FUNCPTR (gst_rtmp_src_is_seekable);
+ gstbasesrc_class->prepare_seek_segment =
+ GST_DEBUG_FUNCPTR (gst_rtmp_src_prepare_seek_segment);
+@@ -603,23 +601,6 @@ gst_rtmp_src_start (GstBaseSrc * basesrc)
+ #undef STR2AVAL
+
+ static gboolean
+-gst_rtmp_src_unlock (GstBaseSrc * basesrc)
+-{
+- GstRTMPSrc *rtmpsrc = GST_RTMP_SRC (basesrc);
+-
+- GST_DEBUG_OBJECT (rtmpsrc, "unlock");
+-
+- /* This closes the socket, which means that any pending socket calls
+- * error out. */
+- if (rtmpsrc->rtmp) {
+- RTMP_Close (rtmpsrc->rtmp);
+- }
+-
+- return TRUE;
+-}
+-
+-
+-static gboolean
+ gst_rtmp_src_stop (GstBaseSrc * basesrc)
+ {
+ GstRTMPSrc *src;
+@@ -627,6 +608,7 @@ gst_rtmp_src_stop (GstBaseSrc * basesrc)
+ src = GST_RTMP_SRC (basesrc);
+
+ if (src->rtmp) {
++ RTMP_Close (src->rtmp);
+ RTMP_Free (src->rtmp);
+ src->rtmp = NULL;
+ }
+--
+1.7.10.4
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch
new file mode 100644
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 <wenzong.fan@windriver.com>
+Date: Thu, 18 Sep 2014 02:24:07 -0400
+Subject: [PATCH] gstreamer1.0-plugins-bad: allow to disable libssh2
+
+libssh2 is automatically linked to if present, this undetermined
+dependency may cause build errors like:
+
+ .../x86_64-poky-linux/4.9.0/ld: cannot find -lssh2
+
+libssh2 isn't an oe-core recipe, so allow to disable it from
+configure.
+
+Upstream-Status: Pending
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+---
+ configure.ac | 23 +++++++++++++++++------
+ 1 file changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 0e95c5c..12153b4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1901,6 +1901,15 @@ AG_GST_CHECK_FEATURE(CHROMAPRINT, [chromaprint], chromaprint, [
+ ])
+
+ dnl *** Curl ***
++AC_ARG_ENABLE([libssh2],
++ [ --enable-libssh2 enable LIBSSH2 support @<:@default=auto@:>@],
++ [case "${enableval}" in
++ yes) NEED_SSH2=yes ;;
++ no) NEED_SSH2=no ;;
++ auto) NEED_SSH2=auto ;;
++ *) AC_MSG_ERROR([bad value ${enableval} for --enable-libssh2]) ;;
++ esac],[NEED_SSH2=auto])
++
+ translit(dnm, m, l) AM_CONDITIONAL(USE_CURL, true)
+ AG_GST_CHECK_FEATURE(CURL, [Curl plugin], curl, [
+ PKG_CHECK_MODULES(CURL, libcurl >= 7.21.0, [
+@@ -1915,12 +1924,14 @@ AG_GST_CHECK_FEATURE(CURL, [Curl plugin], curl, [
+ ])
+ AC_SUBST(CURL_CFLAGS)
+ AC_SUBST(CURL_LIBS)
+- PKG_CHECK_MODULES(SSH2, libssh2 >= 1.4.3, [
+- HAVE_SSH2="yes"
+- AC_DEFINE(HAVE_SSH2, 1, [Define if libssh2 is available])
+- ], [
+- HAVE_SSH2="no"
+- ])
++ if test "x$NEED_SSH2" != "xno"; then
++ PKG_CHECK_MODULES(SSH2, libssh2 >= 1.4.3, [
++ HAVE_SSH2="yes"
++ AC_DEFINE(HAVE_SSH2, 1, [Define if libssh2 is available])
++ ], [
++ HAVE_SSH2="no"
++ ])
++ fi
+ AM_CONDITIONAL(USE_SSH2, test "x$HAVE_SSH2" = "xyes")
+ AC_SUBST(SSH2_CFLAGS)
+ AC_SUBST(SSH2_LIBS)
+--
+1.7.9.5
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad_1.4.%.bbappend b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-bad_1.4.%.bbappend
new file mode 100644
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 <mx3ldev@gmail.com>
+Date: Thu, 6 Nov 2014 14:03:57 +0100
+Subject: [PATCH] riff-media: added fourcc to all mpeg4 video caps
+
+---
+ gst-libs/gst/riff/riff-media.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/gst-libs/gst/riff/riff-media.c b/gst-libs/gst/riff/riff-media.c
+index 8217d79..48034bf 100644
+--- a/gst-libs/gst/riff/riff-media.c
++++ b/gst-libs/gst/riff/riff-media.c
+@@ -487,6 +487,10 @@ gst_riff_create_video_caps (guint32 codec_fcc,
+ caps = gst_caps_new_simple ("video/mpeg",
+ "mpegversion", G_TYPE_INT, 4,
+ "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
++ gchar *fstr = g_strdup_printf ("%" GST_FOURCC_FORMAT,
++ GST_FOURCC_ARGS (codec_fcc));
++ gst_caps_set_simple (caps, "fourcc", G_TYPE_STRING, fstr, NULL);
++ g_free (fstr);
+ if (codec_name)
+ *codec_name = g_strdup ("MPEG-4");
+ break;
+--
+2.1.0
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch
new file mode 100644
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 <b42586@freescale.com>
+Date: Thu, 8 May 2014 12:01:17 +0800
+Subject: [PATCH] ENGR00312034: do not change eos event to gap event if no
+ data has passed to streamsynchronizer.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=727074
+
+Upstream Status: Pending
+
+Signed-off-by: zhouming <b42586@freescale.com>
+---
+ gst/playback/gststreamsynchronizer.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c
+index 3997d1b..3e17c55 100644
+--- a/gst/playback/gststreamsynchronizer.c
++++ b/gst/playback/gststreamsynchronizer.c
+@@ -488,12 +488,11 @@ gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent,
+ }
+ g_slist_free (pads);
+ } else {
+- /* if EOS, but no data has passed, then send something to replace EOS
+- * for preroll purposes */
++ /* if EOS, but no data has passed, then send EOS event */
+ if (!seen_data) {
+ GstEvent *gap_event;
+
+- gap_event = gst_event_new_gap (timestamp, GST_CLOCK_TIME_NONE);
++ gap_event = gst_event_new_eos ();
+ ret = gst_pad_push_event (srcpad, gap_event);
+ } else {
+ GstEvent *gap_event;
+--
+1.7.9.5
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch
new file mode 100644
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 <b42586@freescale.com>
+Date: Wed, 14 May 2014 10:16:20 +0800
+Subject: [PATCH] ENGR00312515: get caps from src pad when query caps
+
+https://bugzilla.gnome.org/show_bug.cgi?id=728312
+
+Upstream Status: Pending
+
+Signed-off-by: zhouming <b42586@freescale.com>
+---
+ gst-libs/gst/tag/gsttagdemux.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+ mode change 100644 => 100755 gst-libs/gst/tag/gsttagdemux.c
+
+diff --git a/gst-libs/gst/tag/gsttagdemux.c b/gst-libs/gst/tag/gsttagdemux.c
+old mode 100644
+new mode 100755
+index 9b6c478..ae2294a
+--- a/gst-libs/gst/tag/gsttagdemux.c
++++ b/gst-libs/gst/tag/gsttagdemux.c
+@@ -1708,6 +1708,19 @@ gst_tag_demux_pad_query (GstPad * pad, GstObject * parent, GstQuery * query)
+ }
+ break;
+ }
++ case GST_QUERY_CAPS:
++ {
++
++ /* We can hijack caps query if we typefind already */
++ if (demux->priv->src_caps) {
++ gst_query_set_caps_result (query, demux->priv->src_caps);
++ res = TRUE;
++ } else {
++ res = gst_pad_query_default (pad, parent, query);
++ }
++ break;
++ }
++
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+--
+1.7.9.5
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch
new file mode 100644
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 <lj.qfy.sh@gmail.com>
+Date: Wed, 24 Sep 2014 17:21:02 +0800
+Subject: [PATCH] taglist not send to down stream if all the frame corrupted
+
+https://bugzilla.gnome.org/show_bug.cgi?id=737246
+
+Upstream status: Pending
+
+Signed-off-by: Jian Li <lj.qfy.sh@gmail.com>
+---
+ gst-libs/gst/audio/gstaudiodecoder.c | 9 +++++++++
+ gst-libs/gst/video/gstvideodecoder.c | 8 ++++++++
+ 2 files changed, 17 insertions(+)
+
+diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c
+index 3504678..3d69efe 100644
+--- a/gst-libs/gst/audio/gstaudiodecoder.c
++++ b/gst-libs/gst/audio/gstaudiodecoder.c
+@@ -2083,6 +2083,15 @@ gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event)
+ gst_audio_decoder_drain (dec);
+ GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+
++ /* send taglist if no valid frame is decoded util EOS */
++ if (dec->priv->taglist && dec->priv->taglist_changed) {
++ GST_DEBUG_OBJECT (dec, "codec tag %" GST_PTR_FORMAT, dec->priv->taglist);
++ if (!gst_tag_list_is_empty (dec->priv->taglist))
++ gst_audio_decoder_push_event (dec,
++ gst_event_new_tag (gst_tag_list_ref (dec->priv->taglist)));
++ dec->priv->taglist_changed = FALSE;
++ }
++
+ /* Forward EOS because no buffer or serialized event will come after
+ * EOS and nothing could trigger another _finish_frame() call. */
+ ret = gst_audio_decoder_push_event (dec, event);
+diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c
+index dd8abe3..d9bfe4d 100644
+--- a/gst-libs/gst/video/gstvideodecoder.c
++++ b/gst-libs/gst/video/gstvideodecoder.c
+@@ -1024,6 +1024,14 @@ gst_video_decoder_sink_event_default (GstVideoDecoder * decoder,
+ * parent class' ::sink_event() until a later time.
+ */
+ forward_immediate = TRUE;
++
++ /* send taglist if no valid frame is decoded util EOS */
++ if (decoder->priv->tags && decoder->priv->tags_changed) {
++ gst_video_decoder_push_event (decoder,
++ gst_event_new_tag (gst_tag_list_ref (decoder->priv->tags)));
++ decoder->priv->tags_changed = FALSE;
++ }
++
+ break;
+ }
+ case GST_EVENT_GAP:
+--
+1.7.9.5
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base_1.4.%.bbappend b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-base_1.4.%.bbappend
new file mode 100644
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 <b06498@freescale.com>
+Date: Tue, 5 Aug 2014 14:40:46 +0800
+Subject: [PATCH] gstrtpmp4gpay: set dafault value for MPEG4 without codec
+ data in caps.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=734263
+
+Upstream Status: Submitted
+
+Signed-off-by: Song Bing <b06498@freescale.com>
+---
+ gst/rtp/gstrtpmp4gpay.c | 19 ++++++++++++++++++-
+ 1 file changed, 18 insertions(+), 1 deletion(-)
+
+diff --git a/gst/rtp/gstrtpmp4gpay.c b/gst/rtp/gstrtpmp4gpay.c
+index 7913d9a..1749d39 100644
+--- a/gst/rtp/gstrtpmp4gpay.c
++++ b/gst/rtp/gstrtpmp4gpay.c
+@@ -390,6 +390,7 @@ gst_rtp_mp4g_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
+ const GValue *codec_data;
+ const gchar *media_type = NULL;
+ gboolean res;
++ const gchar *name;
+
+ rtpmp4gpay = GST_RTP_MP4G_PAY (payload);
+
+@@ -400,7 +401,6 @@ gst_rtp_mp4g_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
+ GST_LOG_OBJECT (rtpmp4gpay, "got codec_data");
+ if (G_VALUE_TYPE (codec_data) == GST_TYPE_BUFFER) {
+ GstBuffer *buffer;
+- const gchar *name;
+
+ buffer = gst_value_get_buffer (codec_data);
+ GST_LOG_OBJECT (rtpmp4gpay, "configuring codec_data");
+@@ -426,6 +426,23 @@ gst_rtp_mp4g_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
+
+ rtpmp4gpay->config = gst_buffer_copy (buffer);
+ }
++ } else {
++ name = gst_structure_get_name (structure);
++
++ if (!strcmp (name, "video/mpeg")) {
++ rtpmp4gpay->profile = g_strdup ("1");
++
++ /* fixed rate */
++ rtpmp4gpay->rate = 90000;
++ /* video stream type */
++ rtpmp4gpay->streamtype = "4";
++ /* no params for video */
++ rtpmp4gpay->params = NULL;
++ /* mode */
++ rtpmp4gpay->mode = "generic";
++
++ media_type = "video";
++ }
+ }
+ if (media_type == NULL)
+ goto config_failed;
+--
+1.7.9.5
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch
new file mode 100755
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 <b06498@freescale.com>
+Date: Mon Nov 10 11:25:47 2014 +0800
+
+[asteriskh263] decrease the rank as we havn't this kind of decoder.
+
+Decrease the rank as we havn't this kind of decoder.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=739935
+
+Upstream Status: Pending
+
+Signed-off-by: Song Bing <b06498@freescale.com>
+
+diff --git a/gst/rtp/gstasteriskh263.c b/gst/rtp/gstasteriskh263.c
+index a01fbc8..8fa3194 100644
+--- a/gst/rtp/gstasteriskh263.c
++++ b/gst/rtp/gstasteriskh263.c
+@@ -226,5 +226,5 @@ gboolean
+ gst_asteriskh263_plugin_init (GstPlugin * plugin)
+ {
+ return gst_element_register (plugin, "asteriskh263",
+- GST_RANK_SECONDARY, GST_TYPE_ASTERISK_H263);
++ GST_RANK_SECONDARY - 1, GST_TYPE_ASTERISK_H263);
+ }
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good_1.4.%.bbappend b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0-plugins-good_1.4.%.bbappend
new file mode 100644
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 <dv@pseudoterminal.org>
+Date: Sat, 6 Apr 2013 23:52:11 +0200
+Subject: [PATCH] Fix crash with gst-inspect Chris Lord <chris@openedhand.com>
+
+Upstream-Status: Pending
+
+Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+---
+ tools/gst-inspect.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/gst-inspect.c b/tools/gst-inspect.c
+index 23b7c44..b79b02e 100644
+--- a/tools/gst-inspect.c
++++ b/tools/gst-inspect.c
+@@ -1556,7 +1556,7 @@ main (int argc, char *argv[])
+ g_option_context_add_main_entries (ctx, options, GETTEXT_PACKAGE);
+ g_option_context_add_group (ctx, gst_init_get_option_group ());
+ if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+- g_printerr ("Error initializing: %s\n", err->message);
++ g_printerr ("Error initializing: %s\n", err ? err->message : "(null)");
+ return -1;
+ }
+ g_option_context_free (ctx);
+--
+1.8.2
+
diff --git a/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0_1.4.5.bb b/meta-openvuplus/recipes-multimedia/gstreamer1.0/gstreamer1.0_1.4.5.bb
new file mode 100644
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