We don't have libva on ARM, some kind of ifdef needed.. BR Carsten Munk
2010/12/20 halley <[email protected]> > Hi, > I have made the following changes to qt-mobility in project devel:qt-mtf. > Please review and accept ASAP. > > Thank You, > halley > > [This message was auto-generated] > > --- > > Request #11056: > > submit: home:halley/qt-mobility-new(r4) -> devel:qt-mtf/qt-mobility > > > Message: > feature #10972, hw codec support in qt-mobility > > State: new 2010-12-20T01:26:06 halley > Comment: None > > > > changes files: > -------------- > --- qt-mobility.changes > +++ qt-mobility.changes > @@ -0,0 +1,6 @@ > +* Mon. Dec 20 2010 Halley Zhao <[email protected]> - 1.1.0 > + use OpenGL-ES v2 shader following Qt change > + > +* Tues Dec 15 2010 Halley Zhao <[email protected]> - 1.1.0 > + add libva based codec support > + > > new: > ---- > libva-codec-enable.patch > opengl-es2-shader-enable.patch > > spec files: > ----------- > --- qt-mobility.spec > +++ qt-mobility.spec > @@ -25,6 +25,8 @@ > Patch8: use_isabspath.patch > Patch9: fix_bmc_8705.patch > Patch10: enable_camerabin_with_meego_target.patch > +Patch11: libva-codec-enable.patch > +Patch12: opengl-es2-shader-enable.patch > Requires: libqtcontacts1 = %{version} > Requires: libqtfeedback1 = %{version} > Requires: libqtgallery1 = %{version} > @@ -60,6 +62,8 @@ > BuildRequires: pkgconfig(xv) > BuildRequires: qt-devel-tools > BuildRequires: fdupes > +BuildRequires: pkgconfig(libva-x11) > +BuildRequires: pkgconfig(gst-vabuffer) > > > %description > @@ -449,6 +453,10 @@ > %patch9 -p1 > # enable_camerabin_with_meego_target.patch > %patch10 -p1 > +# libva-codec-enable.patch > +%patch11 -p1 > +# opengl-es2-shader-enable.patch > +%patch12 -p1 > # >> setup > # << setup > > > other changes: > -------------- > > ++++++ libva-codec-enable.patch (new) > --- libva-codec-enable.patch > +++ libva-codec-enable.patch > +diff --git > a/plugins/multimedia/gstreamer/gstreamer.prob/plugins/multimedia/gstreamer/ > gstreamer.pro > +index 67f8671..39f2066 100644 > +--- a/plugins/multimedia/gstreamer/gstreamer.pro > ++++ b/plugins/multimedia/gstreamer/gstreamer.pro > +@@ -39,7 +39,10 @@ maemo* { > + } > + > + meego { > +- PKGCONFIG +=gstreamer-plugins-bad-free-0.10 > ++ PKGCONFIG +=gstreamer-plugins-bad-free-0.10 \ > ++ libva-x11 \ > ++ gst-vabuffer > ++ DEFINES += QMEDIA_GSTREAMER_VABUFFER > + } > + > + # Input > +diff --git > a/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.cpp > b/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.cpp > +index 6efe788..02c3bfa 100644 > +--- a/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.cpp > ++++ b/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.cpp > +@@ -54,12 +54,37 @@ > + #if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) || (GST_VERSION_MICRO > > 20) > + #define USE_PLAYBIN2 > + #endif > ++#define USE_PLAYBIN2 > ++void element_added(GstBin *bin, GstElement *element, gpointer user_data); > ++#define DEFAULT_RAW_CAPS \ > ++ "video/x-raw-yuv; " \ > ++ "video/x-raw-rgb; " \ > ++ "video/x-raw-gray; " \ > ++ "video/x-va; " \ > ++ "audio/x-raw-int; " \ > ++ "audio/x-raw-float; " \ > ++ "text/plain; " \ > ++ "text/x-pango-markup; " \ > ++ "video/x-dvd-subpicture; " \ > ++ "subpicture/x-pgs" > ++static GstStaticCaps default_raw_caps = GST_STATIC_CAPS > (DEFAULT_RAW_CAPS); > + > + //#define DEBUG_PLAYBIN > + //#define DEBUG_VO_BIN_DUMP > + > +-static gboolean new_segment_probe(GstObject *pad, GstEvent *event, guint > * session) > ++void element_added(GstBin *bin, GstElement *element, gpointer user_data) > + { > ++ const char *element_name = NULL; > ++ element_name = gst_element_get_name(element); > ++ qDebug() << " element name: " << element_name; > ++ if(!strncmp(element_name, "uridecodebin", 12)) { > ++ qDebug() << "uridecodebin added"; > ++ g_object_set(G_OBJECT(element), "caps", > gst_static_caps_get(&default_raw_caps), NULL); > ++ } > ++} > ++ > ++static gboolean new_segment_probe(GstObject *pad, GstEvent *event, guint > * session) > ++{ > + Q_UNUSED(pad); > + if (GST_EVENT_TYPE(event) == GST_EVENT_NEWSEGMENT) > + > reinterpret_cast<QGstreamerPlayerSession*>(session)->processNewSegment(event); > +@@ -129,13 +154,16 @@ > QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent) > + m_videoOutputBin = gst_bin_new("video-output-bin"); > + gst_object_ref(GST_OBJECT(m_videoOutputBin)); > + > ++ qDebug() << "remove ffcsp and video scale"; > + m_videoIdentity = gst_element_factory_make("identity", > "identity-vo"); > +- m_colorSpace = gst_element_factory_make("ffmpegcolorspace", > "ffmpegcolorspace-vo"); > +- m_videoScale = > gst_element_factory_make("videoscale","videoscale-vo"); > ++ // m_colorSpace = gst_element_factory_make("ffmpegcolorspace", > "ffmpegcolorspace-vo"); > ++ // m_videoScale = > gst_element_factory_make("videoscale","videoscale-vo"); > + m_nullVideoSink = gst_element_factory_make("fakesink", NULL); > + gst_object_ref(GST_OBJECT(m_nullVideoSink)); > +- gst_bin_add_many(GST_BIN(m_videoOutputBin), m_videoIdentity, > m_colorSpace, m_videoScale, m_nullVideoSink, NULL); > +- gst_element_link_many(m_videoIdentity, m_colorSpace, m_videoScale, > m_nullVideoSink, NULL); > ++ // gst_bin_add_many(GST_BIN(m_videoOutputBin), m_videoIdentity, > m_colorSpace, m_videoScale, m_nullVideoSink, NULL); > ++ // gst_element_link_many(m_videoIdentity, m_colorSpace, m_videoScale, > m_nullVideoSink, NULL); > ++ gst_bin_add_many(GST_BIN(m_videoOutputBin), m_videoIdentity, > m_nullVideoSink, NULL); > ++ gst_element_link_many(m_videoIdentity, m_nullVideoSink, NULL); > + > + //add an event probe before video output to save and repost segment > events > + { > +@@ -162,6 +190,8 @@ > QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent) > + connect(m_busHelper, SIGNAL(message(QGstreamerMessage)), > SLOT(busMessage(QGstreamerMessage))); > + m_busHelper->installSyncEventFilter(this); > + > ++ // g_object_set(G_OBJECT(m_playbin), "caps", > gst_static_caps_get(&default_raw_caps), NULL); > ++ g_signal_connect(m_playbin, "element-added", > G_CALLBACK(element_added), m_playbin); > + g_object_set(G_OBJECT(m_playbin), "video-sink", m_videoOutputBin, > NULL); > + > + g_signal_connect(G_OBJECT(m_playbin), "notify::source", > G_CALLBACK(playbinNotifySource), this); > +@@ -403,14 +433,16 @@ void > QGstreamerPlayerSession::setVideoRenderer(QObject *videoOutput) > + m_pendingVideoSink = 0; > + gst_element_set_state(m_videoSink, GST_STATE_NULL); > + gst_element_set_state(m_playbin, GST_STATE_NULL); > +- gst_element_unlink(m_videoScale, m_videoSink); > ++ // gst_element_unlink(m_videoScale, m_videoSink); > ++ gst_element_unlink(m_videoIdentity, m_videoSink); > + > + gst_bin_remove(GST_BIN(m_videoOutputBin), m_videoSink); > + > + m_videoSink = videoSink; > + > + gst_bin_add(GST_BIN(m_videoOutputBin), m_videoSink); > +- gst_element_link(m_videoScale, m_videoSink); > ++ // gst_element_link(m_videoScale, m_videoSink); > ++ gst_element_link(m_videoIdentity, m_videoSink); > + > + switch (m_pendingState) { > + case QMediaPlayer::PausedState: > +@@ -495,11 +527,12 @@ void > QGstreamerPlayerSession::finishVideoOutputChange() > + return; > + } > + > +- gst_element_set_state(m_colorSpace, GST_STATE_NULL); > +- gst_element_set_state(m_videoScale, GST_STATE_NULL); > ++ // gst_element_set_state(m_colorSpace, GST_STATE_NULL); > ++ // gst_element_set_state(m_videoScale, GST_STATE_NULL); > + gst_element_set_state(m_videoSink, GST_STATE_NULL); > + > +- gst_element_unlink(m_videoScale, m_videoSink); > ++ // gst_element_unlink(m_videoScale, m_videoSink); > ++ gst_element_unlink(m_videoIdentity, m_videoSink); > + > + gst_bin_remove(GST_BIN(m_videoOutputBin), m_videoSink); > + > +@@ -507,7 +540,8 @@ void > QGstreamerPlayerSession::finishVideoOutputChange() > + m_pendingVideoSink = 0; > + > + gst_bin_add(GST_BIN(m_videoOutputBin), m_videoSink); > +- if (!gst_element_link(m_videoScale, m_videoSink)) > ++ // if (!gst_element_link(m_videoScale, m_videoSink)) > ++ if (!gst_element_link(m_videoIdentity, m_videoSink)) > + qWarning() << "Linking video output element failed"; > + > + GstState state; > +@@ -524,8 +558,8 @@ void > QGstreamerPlayerSession::finishVideoOutputChange() > + break; > + } > + > +- gst_element_set_state(m_colorSpace, state); > +- gst_element_set_state(m_videoScale, state); > ++ // gst_element_set_state(m_colorSpace, state); > ++ // gst_element_set_state(m_videoScale, state); > + gst_element_set_state(m_videoSink, state); > + > + //don't have to wait here, it will unblock eventually > +diff --git > a/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.h > b/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.h > +index ce16cf7..dd72204 100644 > +--- a/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.h > ++++ b/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.h > +@@ -150,8 +150,8 @@ private: > + > + GstElement* m_videoOutputBin; > + GstElement* m_videoIdentity; > +- GstElement* m_colorSpace; > +- GstElement* m_videoScale; > ++ // GstElement* m_colorSpace; > ++ // GstElement* m_videoScale; > + GstElement* m_videoSink; > + GstElement* m_pendingVideoSink; > + GstElement* m_nullVideoSink; > +diff --git a/plugins/multimedia/gstreamer/qgstreamervideooverlay.h > b/plugins/multimedia/gstreamer/qgstreamervideooverlay.h > +index 3bea533..9420413 100644 > +--- a/plugins/multimedia/gstreamer/qgstreamervideooverlay.h > ++++ b/plugins/multimedia/gstreamer/qgstreamervideooverlay.h > +@@ -45,6 +45,7 @@ > + #include <qvideowindowcontrol.h> > + > + #include "qgstreamervideorendererinterface.h" > ++#include <QDebug> > + > + QT_BEGIN_NAMESPACE > + class QAbstractVideoSurface; > +diff --git a/plugins/multimedia/gstreamer/qvideosurfacegstsink.cpp > b/plugins/multimedia/gstreamer/qvideosurfacegstsink.cpp > +index 784e914..8feccbc 100644 > +--- a/plugins/multimedia/gstreamer/qvideosurfacegstsink.cpp > ++++ b/plugins/multimedia/gstreamer/qvideosurfacegstsink.cpp > +@@ -55,6 +55,10 @@ > + > + #include "qvideosurfacegstsink.h" > + > ++#ifdef QMEDIA_GSTREAMER_VABUFFER > ++#include <va/va_x11.h> > ++#include <gstvabuffer.h> > ++#endif > + //#define DEBUG_VIDEO_SURFACE_SINK > + > + > +@@ -70,6 +74,10 @@ > QVideoSurfaceGstDelegate::QVideoSurfaceGstDelegate(QAbstractVideoSurface > *surfac > + m_supportedXVideoPixelFormats = > m_surface->supportedPixelFormats(QAbstractVideoBuffer::XvShmImageHandle); > + connect(m_surface, SIGNAL(supportedFormatsChanged()), this, > SLOT(supportedFormatsChanged())); > + } > ++ > ++#ifdef QMEDIA_GSTREAMER_VABUFFER > ++ m_pQPixmap = NULL; > ++#endif > + } > + > + QList<QVideoFrame::PixelFormat> > QVideoSurfaceGstDelegate::supportedPixelFormats(QAbstractVideoBuffer::HandleType > handleType) const > (231 more lines skipped) > > ++++++ opengl-es2-shader-enable.patch (new) > --- opengl-es2-shader-enable.patch > +++ opengl-es2-shader-enable.patch > +diff --git a/src/multimedia/multimedia.pro b/src/multimedia/ > multimedia.pro > +index bd37db3..ce78604 100644 > +--- a/src/multimedia/multimedia.pro > ++++ b/src/multimedia/multimedia.pro > +@@ -177,6 +177,9 @@ symbian { > + TARGET.CAPABILITY = ALL -TCB > + LIBS += -lefsrv > + } > ++meego { > ++ DEFINES += QT_OPENGL_ES_2 > ++} > + > + CONFIG += middleware > + include(../../features/deploy.pri) > +diff --git a/src/multimedia/qpaintervideosurface.cpp > b/src/multimedia/qpaintervideosurface.cpp > +index 4f76fa7..35bac32 100644 > +--- a/src/multimedia/qpaintervideosurface.cpp > ++++ b/src/multimedia/qpaintervideosurface.cpp > +@@ -1544,9 +1544,10 @@ void QPainterVideoSurface::setGLContext(QGLContext > *context) > + if (extensions.contains("ARB_fragment_program")) > + m_shaderTypes |= FragmentProgramShader; > + #endif > +- > ++#ifndef QT_OPENGL_ES_2 > + if (QGLShaderProgram::hasOpenGLShaderPrograms(m_glContext) > + && extensions.contains("ARB_shader_objects")) > ++#endif > + m_shaderTypes |= GlslShader; > + } > + > > _______________________________________________ > MeeGo-commits mailing list > [email protected] > http://lists.meego.com/listinfo/meego-commits >
_______________________________________________ MeeGo-packaging mailing list [email protected] http://lists.meego.com/listinfo/meego-packaging
