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

Reply via email to