upgrading gstreamer to version 0.8.12
This commit is contained in:
parent
6f6298a0a8
commit
68298d78dd
|
@ -177,7 +177,7 @@ gtkmm_version=gtkmm-2.6.5
|
|||
gtkmm_tmpdir=$tools_tmpdir/gtkmm
|
||||
|
||||
gstreamer_dir=$toolsdir/gstreamer
|
||||
gstreamer_version=gstreamer-0.8.10
|
||||
gstreamer_version=gstreamer-0.8.12
|
||||
gstreamer_tmpdir=$tools_tmpdir/gstreamer
|
||||
|
||||
icu_dir=$toolsdir/icu
|
||||
|
|
|
@ -117,7 +117,7 @@ GTK_VERSION = gtk+-2.6.10
|
|||
GTKMM_DIR = ${TOOLS_DIR}/gtkmm
|
||||
GTKMM_VERSION = gtkmm-2.6.5
|
||||
GSTREAMER_DIR = ${TOOLS_DIR}/gstreamer
|
||||
GSTREAMER_VERSION = gstreamer-0.8.10
|
||||
GSTREAMER_VERSION = gstreamer-0.8.12
|
||||
ICU_DIR = ${TOOLS_DIR}/icu
|
||||
ICU_VERSION = icu-3.0
|
||||
CURL_DIR = ${TOOLS_DIR}/curl
|
||||
|
|
|
@ -513,7 +513,7 @@ by LiveSupport:
|
|||
boost 1.33.1 ${COMPILE_BOOST}
|
||||
cppunit 1.10.2 yes
|
||||
curl 7.12.3 yes
|
||||
gstreamer 0.8.10 yes
|
||||
gstreamer 0.8.12 yes
|
||||
gtk+ 2.6.10 ${COMPILE_GTK}
|
||||
gtk-- 2.6.5 ${COMPILE_GTKMM}
|
||||
icu 3.0 ${COMPILE_ICU}
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
--- gst-plugins-0.8.9/gst/adder/gstadder.c 2005-06-29 14:45:17.000000000 +0200
|
||||
+++ gst-plugins-0.8.9-livesupport/gst/adder/gstadder.c 2005-06-29 14:42:05.000000000 +0200
|
||||
@@ -558,14 +558,19 @@
|
||||
}
|
||||
|
||||
if (valid_inputs > 0 || adder->eos == FALSE) {
|
||||
+ gint64 delta;
|
||||
+ gint64 duration;
|
||||
+
|
||||
+ delta = (adder->format == GST_ADDER_FORMAT_FLOAT)
|
||||
+ ? GST_BUFFER_SIZE (buf_out) / adder->width / adder->channels
|
||||
+ : GST_BUFFER_SIZE (buf_out) * 8 / adder->width / adder->channels;
|
||||
+ duration = delta * GST_SECOND / adder->rate;
|
||||
+
|
||||
GST_BUFFER_TIMESTAMP (buf_out) = adder->timestamp;
|
||||
- if (adder->format == GST_ADDER_FORMAT_FLOAT)
|
||||
- adder->offset +=
|
||||
- GST_BUFFER_SIZE (buf_out) / adder->width / adder->channels;
|
||||
- else
|
||||
- adder->offset +=
|
||||
- GST_BUFFER_SIZE (buf_out) * 8 / adder->width / adder->channels;
|
||||
- adder->timestamp = adder->offset * GST_SECOND / adder->rate;
|
||||
+ GST_BUFFER_DURATION (buf_out) = duration;
|
||||
+
|
||||
+ adder->offset += delta;
|
||||
+ adder->timestamp += duration;
|
||||
|
||||
/* send it out */
|
||||
GST_LOG ("pushing buf_out");
|
|
@ -1,54 +0,0 @@
|
|||
--- gst-plugins-0.8.10/gst/adder/gstadder.c 2005-09-07 16:24:18.000000000 +0200
|
||||
+++ gst-plugins-0.8.10-livesupport/gst/adder/gstadder.c 2005-09-07 16:22:40.000000000 +0200
|
||||
@@ -107,6 +107,11 @@
|
||||
const GstCaps * caps);
|
||||
static GstCaps *gst_adder_get_caps (GstPad * pad);
|
||||
|
||||
+static gboolean gst_adder_query(GstPad * pad,
|
||||
+ GstQueryType type,
|
||||
+ GstFormat * format,
|
||||
+ gint64 * value);
|
||||
+
|
||||
static GstElementClass *parent_class = NULL;
|
||||
|
||||
/* static guint gst_adder_signals[LAST_SIGNAL] = { 0 }; */
|
||||
@@ -283,6 +288,7 @@
|
||||
gst_element_set_loop_function (GST_ELEMENT (adder), gst_adder_loop);
|
||||
gst_pad_set_getcaps_function (adder->srcpad, gst_adder_get_caps);
|
||||
gst_pad_set_link_function (adder->srcpad, gst_adder_link);
|
||||
+ gst_pad_set_query_function (adder->srcpad, gst_adder_query);
|
||||
|
||||
adder->format = GST_ADDER_FORMAT_UNSET;
|
||||
|
||||
@@ -654,6 +660,31 @@
|
||||
}
|
||||
|
||||
|
||||
+static gboolean gst_adder_query(GstPad * pad,
|
||||
+ GstQueryType type,
|
||||
+ GstFormat * format,
|
||||
+ gint64 * value)
|
||||
+{
|
||||
+ GstAdder * adder;
|
||||
+
|
||||
+ adder = GST_ADDER(gst_pad_get_parent(pad));
|
||||
+ if (!GST_IS_ADDER(adder)) {
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ if (pad != adder->srcpad) {
|
||||
+ return gst_pad_query_default(pad, type, format, value);
|
||||
+ }
|
||||
+
|
||||
+ if (type != GST_QUERY_POSITION || *format != GST_FORMAT_TIME) {
|
||||
+ return gst_pad_query_default(pad, type, format, value);
|
||||
+ }
|
||||
+
|
||||
+ *value = adder->timestamp;
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static GstElementStateReturn
|
||||
gst_adder_change_state (GstElement * element)
|
||||
{
|
|
@ -1,86 +0,0 @@
|
|||
--- gst-plugins-0.8.9/gst/typefind/gsttypefindfunctions.c 2005-05-17 10:41:47.000000000 +0200
|
||||
+++ gst-plugins-0.8.9-livesupport/gst/typefind/gsttypefindfunctions.c 2005-06-22 18:46:33.000000000 +0200
|
||||
@@ -132,6 +132,66 @@
|
||||
}
|
||||
}
|
||||
|
||||
+/*** application/smil *********************************************************/
|
||||
+
|
||||
+static GstStaticCaps smil_caps = GST_STATIC_CAPS ("application/smil");
|
||||
+
|
||||
+#define SMIL_CAPS (gst_static_caps_get(&smil_caps))
|
||||
+static void
|
||||
+smil_type_find (GstTypeFind * tf, gpointer unused)
|
||||
+{
|
||||
+ guint8 *data = gst_type_find_peek (tf, 0, BUFFER_SIZE);
|
||||
+ guint pos = 0;
|
||||
+ guint offset = 0;
|
||||
+
|
||||
+ if (data) {
|
||||
+ /* look for the XMLDec,
|
||||
+ * see XML spec 2.8, Prolog and Document Type Declaration
|
||||
+ * http://www.w3.org/TR/2004/REC-xml-20040204/#sec-prolog-dtd
|
||||
+ */
|
||||
+ /* we know that BUFFER_SIZE > strlen("<?xml") */
|
||||
+ if (!(data[0] == '<'
|
||||
+ && data[1] == '?'
|
||||
+ && data[2] == 'x'
|
||||
+ && data[3] == 'm'
|
||||
+ && data[4] == 'l')) {
|
||||
+
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ data += 5;
|
||||
+ pos += 5;
|
||||
+
|
||||
+ /* look for the first element, it has to be a <smil> element */
|
||||
+ while (data) {
|
||||
+ while (*data != '<') {
|
||||
+ INC_BUFFER;
|
||||
+ }
|
||||
+
|
||||
+ INC_BUFFER;
|
||||
+ if (!g_ascii_isalpha(*data)) {
|
||||
+ /* if not alphabetic, it's a PI or an element / attribute declaration
|
||||
+ * like <?xxx or <!xxx */
|
||||
+ INC_BUFFER;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ /* the first normal element
|
||||
+ * get the next 4 bytes, and look if it's smil */
|
||||
+ data = gst_type_find_peek(tf, offset + pos, 5);
|
||||
+ if (!(data[0] == 's'
|
||||
+ && data[1] == 'm'
|
||||
+ && data[2] == 'i'
|
||||
+ && data[3] == 'l')) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ gst_type_find_suggest(tf, GST_TYPE_FIND_MAXIMUM, SMIL_CAPS);
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/*** video/x-fli **************************************************************/
|
||||
|
||||
static GstStaticCaps flx_caps = GST_STATIC_CAPS ("video/x-fli");
|
||||
@@ -1789,6 +1849,7 @@
|
||||
static gchar *shn_exts[] = { "shn", NULL };
|
||||
static gchar *ape_exts[] = { "ape", NULL };
|
||||
static gchar *uri_exts[] = { "ram", NULL };
|
||||
+ static gchar *smil_exts[] = { "smil", NULL };
|
||||
static gchar *jpeg_exts[] = { "jpg", "jpe", "jpeg", NULL };
|
||||
static gchar *gif_exts[] = { "gif", NULL };
|
||||
static gchar *png_exts[] = { "png", NULL };
|
||||
@@ -1871,6 +1932,8 @@
|
||||
utf8_exts, UTF8_CAPS, NULL);
|
||||
TYPE_FIND_REGISTER (plugin, "text/uri-list", GST_RANK_MARGINAL, uri_type_find,
|
||||
uri_exts, URI_CAPS, NULL);
|
||||
+ TYPE_FIND_REGISTER (plugin, "application/smil", GST_RANK_PRIMARY, smil_type_find,
|
||||
+ smil_exts, SMIL_CAPS, NULL);
|
||||
TYPE_FIND_REGISTER_RIFF (plugin, "audio/x-wav", GST_RANK_PRIMARY, wav_exts,
|
||||
"WAVE");
|
||||
TYPE_FIND_REGISTER (plugin, "audio/x-aiff", GST_RANK_SECONDARY,
|
|
@ -1,11 +0,0 @@
|
|||
--- gstreamer-0.8.10/configure.ac 2005-05-03 15:24:30.000000000 +0200
|
||||
+++ gstreamer-0.8.10-livesupport/configure.ac 2006-08-22 11:12:12.000000000 +0200
|
||||
@@ -589,7 +589,7 @@
|
||||
dnl Private vars for libgst only
|
||||
GST_LIB_CFLAGS="$GST_PKG_CFLAGS $GST_INT_CFLAGS \
|
||||
$VALGRIND_CFLAGS -I\$(top_srcdir)"
|
||||
-GST_LIB_LIBS="$XML_LIBS $GLIB_LIBS -lpopt $GST_PKG_LIBS $LTLIBINTL $VALGRIND_LIBS -lm"
|
||||
+GST_LIB_LIBS="$XML_LIBS $GLIB_LIBS -lpopt $GST_PKG_LIBS $LTLIBINTL -lm"
|
||||
GST_LIB_LDFLAGS="$GST_LT_LDFLAGS -version-info $GST_LIBVERSION $EXPORT_LDFLAGS"
|
||||
AC_SUBST(GST_LIB_CFLAGS)
|
||||
AC_SUBST(GST_LIB_LIBS)
|
Binary file not shown.
Binary file not shown.
|
@ -29,8 +29,8 @@
|
|||
# Run this script to prepare gstreamer to be configured and compiled.
|
||||
# To read more about gstreamer, see http://gstreamer.freedesktop.org/
|
||||
#-------------------------------------------------------------------------------
|
||||
product=gstreamer-0.8.10
|
||||
plugins=gst-plugins-0.8.10
|
||||
product=gstreamer-0.8.12
|
||||
plugins=gst-plugins-0.8.12
|
||||
|
||||
reldir=`dirname $0`/..
|
||||
basedir=`cd ${reldir}; pwd;`
|
||||
|
@ -50,9 +50,7 @@ cd ${tmpdir}
|
|||
if [ ! -d $product ]; then
|
||||
tar xfj ${gstreamer_tar}
|
||||
cd ${product}
|
||||
# see bug report at http://bugzilla.gnome.org/show_bug.cgi?id=330308
|
||||
# for details of the following patch
|
||||
patch -p1 < ${etcdir}/valgrind.patch
|
||||
# patch here
|
||||
fi
|
||||
|
||||
cd ${tmpdir}
|
||||
|
@ -64,18 +62,15 @@ if [ ! -d $plugins ]; then
|
|||
patch -p1 < ${etcdir}/adder-caps-property.patch
|
||||
# see bug report at http://bugzilla.gnome.org/show_bug.cgi?id=309218
|
||||
# for details on the following patch
|
||||
patch -p1 < ${etcdir}/adder-duration-fix.patch
|
||||
# see bug report at http://bugzilla.gnome.org/show_bug.cgi?id=315457
|
||||
# for details on the following patch
|
||||
patch -p1 < ${etcdir}/adder-query.patch
|
||||
# the patch was applied to 0.8.12, but in a slightly different form;
|
||||
# this reverts it to Akos's original version
|
||||
# TODO: figure out if this is needed, and remove it if it isn't
|
||||
patch -p1 < ${etcdir}/adder-duration-fix-revert-to-original.patch
|
||||
# see bug report at http://bugzilla.gnome.org/show_bug.cgi?id=308167
|
||||
# for details on the following patch
|
||||
patch -p1 < ${etcdir}/switch-fix.patch
|
||||
# see bug report at http://bugzilla.gnome.org/show_bug.cgi?id=308619
|
||||
# for details on the following patch
|
||||
patch -p1 < ${etcdir}/id3demuxbin-pad-free-fix.patch
|
||||
# see bug report at http://bugzilla.gnome.org/show_bug.cgi?id=308663
|
||||
# for details on the following patch
|
||||
patch -p1 < ${etcdir}/typefind-smil.patch
|
||||
fi
|
||||
|
|
@ -49,9 +49,9 @@ COVERAGE_DIR = ${DOC_DIR}/coverage
|
|||
ETC_DIR = ${BASE_DIR}/etc
|
||||
TMP_DIR = ${BASE_DIR}/tmp
|
||||
|
||||
GSTREAMER_VERSION = gstreamer-0.8.10
|
||||
GSTREAMER_VERSION = gstreamer-0.8.12
|
||||
GSTREAMER_DIR = ${TMP_DIR}/${GSTREAMER_VERSION}
|
||||
GST_PLUGINS_VERSION = gst-plugins-0.8.10
|
||||
GST_PLUGINS_VERSION = gst-plugins-0.8.12
|
||||
GST_PLUGINS_DIR = ${TMP_DIR}/${GST_PLUGINS_VERSION}
|
||||
|
||||
prefix=@prefix@
|
|
@ -1,5 +1,5 @@
|
|||
--- gst-plugins-0.8.10/gst/adder/gstadder.h 2005-05-17 10:41:43.000000000 +0200
|
||||
+++ gst-plugins-0.8.10-livesupport/gst/adder/gstadder.h 2005-08-26 10:58:46.000000000 +0200
|
||||
--- gst-plugins-0.8.12/gst/adder/gstadder.h 2006-09-29 12:37:30.000000000 +0200
|
||||
+++ gst-plugins-0.8.12-livesupport/gst/adder/gstadder.h 2006-09-29 12:38:35.000000000 +0200
|
||||
@@ -65,6 +65,8 @@
|
||||
|
||||
GstPad *srcpad;
|
||||
|
@ -9,8 +9,8 @@
|
|||
/* keep track of the sinkpads */
|
||||
guint numsinkpads;
|
||||
GSList *input_channels;
|
||||
--- gst-plugins-0.8.10/gst/adder/gstadder.c 2005-06-14 18:38:01.000000000 +0200
|
||||
+++ gst-plugins-0.8.10-livesupport/gst/adder/gstadder.c 2005-08-26 12:07:30.000000000 +0200
|
||||
--- gst-plugins-0.8.12/gst/adder/gstadder.c 2006-09-29 12:37:24.000000000 +0200
|
||||
+++ gst-plugins-0.8.12-livesupport/gst/adder/gstadder.c 2006-09-29 12:38:35.000000000 +0200
|
||||
@@ -64,7 +64,8 @@
|
||||
{
|
||||
ARG_0,
|
||||
|
@ -37,8 +37,8 @@
|
|||
+ const GstCaps * caps);
|
||||
static GstCaps *gst_adder_get_caps (GstPad * pad);
|
||||
|
||||
static GstElementClass *parent_class = NULL;
|
||||
@@ -131,13 +135,11 @@
|
||||
static gboolean gst_adder_query (GstPad * pad,
|
||||
@@ -134,13 +138,11 @@
|
||||
static GstPadLinkReturn
|
||||
gst_adder_link (GstPad * pad, const GstCaps * caps)
|
||||
{
|
||||
|
@ -57,7 +57,7 @@
|
|||
|
||||
g_return_val_if_fail (caps != NULL, GST_PAD_LINK_REFUSED);
|
||||
g_return_val_if_fail (pad != NULL, GST_PAD_LINK_REFUSED);
|
||||
@@ -145,41 +147,42 @@
|
||||
@@ -148,41 +150,42 @@
|
||||
element = GST_PAD_PARENT (pad);
|
||||
adder = GST_ADDER (element);
|
||||
|
||||
|
@ -129,7 +129,7 @@
|
|||
GstAdderInputChannel *input = (GstAdderInputChannel *) links->data;
|
||||
|
||||
if (input->sinkpad == pad) {
|
||||
@@ -200,6 +203,8 @@
|
||||
@@ -203,6 +206,8 @@
|
||||
gobject_class = (GObjectClass *) klass;
|
||||
gstelement_class = (GstElementClass *) klass;
|
||||
|
||||
|
@ -138,7 +138,7 @@
|
|||
gst_element_class_add_pad_template (gstelement_class,
|
||||
gst_static_pad_template_get (&gst_adder_src_template));
|
||||
gst_element_class_add_pad_template (gstelement_class,
|
||||
@@ -217,6 +222,11 @@
|
||||
@@ -220,6 +225,11 @@
|
||||
"generate an EOS when all input channels did", FALSE,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
|
@ -150,7 +150,7 @@
|
|||
gobject_class->get_property = gst_adder_get_property;
|
||||
gobject_class->set_property = gst_adder_set_property;
|
||||
|
||||
@@ -226,6 +236,44 @@
|
||||
@@ -229,6 +239,44 @@
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -195,7 +195,7 @@
|
|||
gst_adder_init (GstAdder * adder)
|
||||
{
|
||||
adder->srcpad =
|
||||
@@ -238,6 +286,8 @@
|
||||
@@ -245,6 +293,8 @@
|
||||
|
||||
adder->format = GST_ADDER_FORMAT_UNSET;
|
||||
|
||||
|
@ -204,7 +204,7 @@
|
|||
/* keep track of the sinkpads requested */
|
||||
|
||||
adder->numsinkpads = 0;
|
||||
@@ -246,6 +296,18 @@
|
||||
@@ -253,6 +303,18 @@
|
||||
adder->eos = FALSE;
|
||||
}
|
||||
|
||||
|
@ -223,7 +223,7 @@
|
|||
static GstPad *
|
||||
gst_adder_request_new_pad (GstElement * element, GstPadTemplate * templ,
|
||||
const gchar * unused)
|
||||
@@ -339,6 +401,9 @@
|
||||
@@ -362,6 +424,9 @@
|
||||
case ARG_EOS:
|
||||
g_value_set_boolean (value, adder->eos);
|
||||
break;
|
||||
|
@ -233,7 +233,7 @@
|
|||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -360,6 +425,9 @@
|
||||
@@ -383,6 +448,9 @@
|
||||
case ARG_EOS:
|
||||
adder->eos = g_value_get_boolean (value);
|
||||
break;
|
||||
|
@ -243,7 +243,7 @@
|
|||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -613,23 +681,28 @@
|
||||
@@ -664,23 +732,28 @@
|
||||
gst_adder_get_caps (GstPad * pad)
|
||||
{
|
||||
GstAdder *adder = GST_ADDER (gst_pad_get_parent (pad));
|
|
@ -0,0 +1,13 @@
|
|||
--- gst-plugins-0.8.12/gst/adder/gstadder.c 2006-09-29 12:37:24.000000000 +0200
|
||||
+++ gst-plugins-0.8.12-livesupport/gst/adder/gstadder.c 2006-09-29 12:53:25.000000000 +0200
|
||||
@@ -585,7 +585,9 @@
|
||||
gint64 delta;
|
||||
gint64 duration;
|
||||
|
||||
- delta = GST_BUFFER_SIZE (buf_out) * 8 / (adder->width * adder->channels);
|
||||
+ delta = (adder->format == GST_ADDER_FORMAT_FLOAT)
|
||||
+ ? GST_BUFFER_SIZE (buf_out) / adder->width / adder->channels
|
||||
+ : GST_BUFFER_SIZE (buf_out) * 8 / adder->width / adder->channels;
|
||||
duration = delta * GST_SECOND / adder->rate;
|
||||
|
||||
GST_BUFFER_TIMESTAMP (buf_out) = adder->timestamp;
|
|
@ -32,12 +32,12 @@ dnl This is due to the fact that configure spreads a lot of trash around,
|
|||
dnl like atom4te cache directories, config.* files, etc. into the directory
|
||||
dnl it is being run from. We clearly don't want these in our base directory.
|
||||
dnl-----------------------------------------------------------------------------
|
||||
AC_INIT(gstreamer, 0.8.10, bugs@campware.org)
|
||||
AC_INIT(gstreamer, 0.8.12, bugs@campware.org)
|
||||
AC_PREREQ(2.59)
|
||||
AC_COPYRIGHT([Copyright (c) 2004 Media Development Loan Fund under the GNU GPL])
|
||||
AC_REVISION($Revision$)
|
||||
|
||||
AC_CONFIG_SRCDIR(../src/gstreamer-0.8.10.tar.bz2)
|
||||
AC_CONFIG_SRCDIR(../src/gstreamer-0.8.12.tar.bz2)
|
||||
|
||||
|
||||
dnl untar the sources before anything happens
|
|
@ -1,5 +1,5 @@
|
|||
--- gst-plugins-0.8.9/ext/mad/gstid3demuxbin.c 2005-04-10 22:24:17.000000000 +0200
|
||||
+++ gst-plugins-0.8.9-livesupport/ext/mad/gstid3demuxbin.c 2005-06-22 10:45:31.000000000 +0200
|
||||
--- gst-plugins-0.8.12/ext/mad/gstid3demuxbin.c 2005-07-28 13:47:03.000000000 +0200
|
||||
+++ gst-plugins-0.8.12-livesupport/ext/mad/gstid3demuxbin.c 2006-09-29 13:26:47.000000000 +0200
|
||||
@@ -188,7 +188,11 @@
|
||||
gst_id3demux_bin_remove_pad (GstId3DemuxBin * id3)
|
||||
{
|
|
@ -1,5 +1,5 @@
|
|||
--- gst-plugins-0.8.9/gst/switch/gstswitch.c 2005-04-14 18:26:47.000000000 +0200
|
||||
+++ gst-plugins-0.8.9-livesupport/gst/switch/gstswitch.c 2005-06-18 11:26:19.000000000 +0200
|
||||
--- gst-plugins-0.8.12/gst/switch/gstswitch.c 2005-04-14 10:45:59.000000000 +0200
|
||||
+++ gst-plugins-0.8.12-livesupport/gst/switch/gstswitch.c 2006-09-29 13:21:30.000000000 +0200
|
||||
@@ -241,15 +241,23 @@
|
||||
GstEvent *event = GST_EVENT (data);
|
||||
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue