Polish and fix qmlvideofx example

Change-Id: I30f6d7d2af784ba018a659a16aceb4876a4b1be6
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
hjk
2012-12-18 15:11:44 +01:00
committed by The Qt Project
parent 5739d43eef
commit 416168db8a
33 changed files with 122 additions and 123 deletions

View File

@@ -69,8 +69,8 @@ int main(int argc, char *argv[])
QStringList args = app.arguments(); QStringList args = app.arguments();
PerformanceMonitor::State performanceMonitorState; PerformanceMonitor::State performanceMonitorState;
bool sourceIsUrl = false; bool sourceIsUrl = false;
for (int i=1; i<args.count(); ++i) { for (int i = 1; i < args.size(); ++i) {
const QString &arg = args.at(i); const QByteArray arg = args.at(i).toUtf8();
if (arg.startsWith('-')) { if (arg.startsWith('-')) {
if ("-volume" == arg) { if ("-volume" == arg) {
if (i+1 < args.count()) if (i+1 < args.count())
@@ -79,7 +79,7 @@ int main(int argc, char *argv[])
qtTrace() << "Option \"-volume\" takes a value"; qtTrace() << "Option \"-volume\" takes a value";
} }
#ifdef PERFORMANCEMONITOR_SUPPORT #ifdef PERFORMANCEMONITOR_SUPPORT
else if (PerformanceMonitor::parseArgument(arg, performanceMonitorState)) { else if (performanceMonitorState.parseArgument(arg)) {
// Do nothing // Do nothing
} }
#endif #endif

View File

@@ -41,36 +41,18 @@
#include "filereader.h" #include "filereader.h"
#include "trace.h" #include "trace.h"
#include <QtCore/QCoreApplication>
#include <QtCore/QDir>
#include <QtCore/QFile>
#include <QtCore/QFileInfo>
#include <QtCore/QTextStream>
QString adjustPath(const QString &path) #include <QCoreApplication>
{ #include <QDir>
#ifdef Q_OS_UNIX #include <QFile>
#ifdef Q_OS_MAC #include <QFileInfo>
if (!QDir::isAbsolutePath(path)) #include <QTextStream>
return QCoreApplication::applicationDirPath()
+ QLatin1String("/../Resources/") + path;
#else
QString pathInInstallDir;
const QString applicationDirPath = QCoreApplication::applicationDirPath();
pathInInstallDir = QString::fromLatin1("%1/../%2").arg(applicationDirPath, path);
if (QFileInfo(pathInInstallDir).exists())
return pathInInstallDir;
#endif
#endif
return path;
}
QString FileReader::readFile(const QString &fileName) QString FileReader::readFile(const QString &fileName)
{ {
qtTrace() << "FileReader::readFile" << "fileName" << fileName; qtTrace() << "FileReader::readFile" << "fileName" << fileName;
QString content; QString content;
QFile file(adjustPath(fileName)); QFile file(fileName);
if (file.open(QIODevice::ReadOnly)) { if (file.open(QIODevice::ReadOnly)) {
QTextStream stream(&file); QTextStream stream(&file);
content = stream.readAll(); content = stream.readAll();

View File

@@ -39,7 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
#include <QtCore/QObject> #include <QObject>
class FileReader : public QObject class FileReader : public QObject
{ {

View File

@@ -72,17 +72,17 @@ int main(int argc, char *argv[])
#ifdef PERFORMANCEMONITOR_SUPPORT #ifdef PERFORMANCEMONITOR_SUPPORT
PerformanceMonitor::State performanceMonitorState; PerformanceMonitor::State performanceMonitorState;
#endif #endif
for (int i=1; i<args.count(); ++i) { for (int i = 1; i < args.size(); ++i) {
const QString &arg = args.at(i); const QByteArray arg = args.at(i).toUtf8();
if (arg.startsWith('-')) { if (arg.startsWith('-')) {
if ("-volume" == arg) { if ("-volume" == arg) {
if (i+1 < args.count()) if (i + 1 < args.size())
volume = 0.01 * args.at(++i).toInt(); volume = 0.01 * args.at(++i).toInt();
else else
qtTrace() << "Option \"-volume\" takes a value"; qtTrace() << "Option \"-volume\" takes a value";
} }
#ifdef PERFORMANCEMONITOR_SUPPORT #ifdef PERFORMANCEMONITOR_SUPPORT
else if (PerformanceMonitor::parseArgument(arg, performanceMonitorState)) { else if (performanceMonitorState.parseArgument(arg)) {
// Do nothing // Do nothing
} }
#endif #endif

View File

@@ -69,7 +69,7 @@ ShaderEffect {
// rather than being inline in the QML file // rather than being inline in the QML file
onFragmentShaderFilenameChanged: onFragmentShaderFilenameChanged:
fragmentShader = d.fragmentShaderCommon + fileReader.readFile(fragmentShaderFilename) fragmentShader = d.fragmentShaderCommon + fileReader.readFile(":shaders/" + fragmentShaderFilename)
onVertexShaderFilenameChanged: onVertexShaderFilenameChanged:
vertexShader = fileReader.readFile(vertexShaderFilename) vertexShader = fileReader.readFile(vertexShaderFilename)
} }

View File

@@ -55,5 +55,5 @@ Effect {
property real step_x: 0.0015625 property real step_x: 0.0015625
property real step_y: targetHeight ? (step_x * targetWidth / targetHeight) : 0.0 property real step_y: targetHeight ? (step_x * targetWidth / targetHeight) : 0.0
fragmentShaderFilename: "shaders/billboard.fsh" fragmentShaderFilename: "billboard.fsh"
} }

View File

@@ -52,5 +52,5 @@ Effect {
// Transform slider values, and bind result to shader uniforms // Transform slider values, and bind result to shader uniforms
property real threshold: parameters.get(0).value property real threshold: parameters.get(0).value
fragmentShaderFilename: "shaders/blackandwhite.fsh" fragmentShaderFilename: "blackandwhite.fsh"
} }

View File

@@ -42,5 +42,5 @@
import QtQuick 2.0 import QtQuick 2.0
Effect { Effect {
fragmentShaderFilename: "shaders/emboss.fsh" fragmentShaderFilename: "emboss.fsh"
} }

View File

@@ -63,7 +63,7 @@ Item {
anchors.fill: parent anchors.fill: parent
dividerValue: parent.dividerValue dividerValue: parent.dividerValue
property real blurSize: 4.0 * parent.parameters.get(0).value / targetHeight property real blurSize: 4.0 * parent.parameters.get(0).value / targetHeight
fragmentShaderFilename: "shaders/gaussianblur_v.fsh" fragmentShaderFilename: "gaussianblur_v.fsh"
} }
Effect { Effect {
@@ -71,7 +71,7 @@ Item {
anchors.fill: parent anchors.fill: parent
dividerValue: parent.dividerValue dividerValue: parent.dividerValue
property real blurSize: 4.0 * parent.parameters.get(0).value / parent.targetWidth property real blurSize: 4.0 * parent.parameters.get(0).value / parent.targetWidth
fragmentShaderFilename: "shaders/gaussianblur_h.fsh" fragmentShaderFilename: "gaussianblur_h.fsh"
source: horizontalShaderSource source: horizontalShaderSource
ShaderEffectSource { ShaderEffectSource {

View File

@@ -42,5 +42,5 @@
import QtQuick 2.0 import QtQuick 2.0
Effect { Effect {
fragmentShaderFilename: "shaders/glow.fsh" fragmentShaderFilename: "glow.fsh"
} }

View File

@@ -57,5 +57,5 @@ Effect {
property real targetHue: parameters.get(0).value * 360 property real targetHue: parameters.get(0).value * 360
property real windowWidth: parameters.get(1).value * 60 property real windowWidth: parameters.get(1).value * 60
fragmentShaderFilename: "shaders/isolate.fsh" fragmentShaderFilename: "isolate.fsh"
} }

View File

@@ -84,7 +84,7 @@ Effect {
d.oldTargetHeight = targetHeight d.oldTargetHeight = targetHeight
} }
fragmentShaderFilename: "shaders/magnify.fsh" fragmentShaderFilename: "magnify.fsh"
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent

View File

@@ -53,5 +53,5 @@ Effect {
// Transform slider values, and bind result to shader uniforms // Transform slider values, and bind result to shader uniforms
property real curlExtent: 1.0 - parameters.get(0).value property real curlExtent: 1.0 - parameters.get(0).value
fragmentShaderFilename: "shaders/pagecurl.fsh" fragmentShaderFilename: "pagecurl.fsh"
} }

View File

@@ -52,5 +52,5 @@ Effect {
// Transform slider values, and bind result to shader uniforms // Transform slider values, and bind result to shader uniforms
property real granularity: parameters.get(0).value * 20 property real granularity: parameters.get(0).value * 20
fragmentShaderFilename: "shaders/pixelate.fsh" fragmentShaderFilename: "pixelate.fsh"
} }

View File

@@ -54,5 +54,5 @@ Effect {
property real numColors: 8.0 property real numColors: 8.0
fragmentShaderFilename: "shaders/posterize.fsh" fragmentShaderFilename: "posterize.fsh"
} }

View File

@@ -60,5 +60,5 @@ Effect {
property real time: 0 property real time: 0
NumberAnimation on time { loops: Animation.Infinite; from: 0; to: Math.PI * 2; duration: 600 } NumberAnimation on time { loops: Animation.Infinite; from: 0; to: Math.PI * 2; duration: 600 }
fragmentShaderFilename: "shaders/ripple.fsh" fragmentShaderFilename: "ripple.fsh"
} }

View File

@@ -42,5 +42,5 @@
import QtQuick 2.0 import QtQuick 2.0
Effect { Effect {
fragmentShaderFilename: "shaders/sepia.fsh" fragmentShaderFilename: "sepia.fsh"
} }

View File

@@ -52,5 +52,5 @@ Effect {
// Transform slider values, and bind result to shader uniforms // Transform slider values, and bind result to shader uniforms
property real amount: parameters.get(0).value * 18 property real amount: parameters.get(0).value * 18
fragmentShaderFilename: "shaders/sharpen.fsh" fragmentShaderFilename: "sharpen.fsh"
} }

View File

@@ -76,5 +76,5 @@ Effect {
} }
} }
fragmentShaderFilename: "shaders/shockwave.fsh" fragmentShaderFilename: "shockwave.fsh"
} }

View File

@@ -55,5 +55,5 @@ Effect {
property real resS: targetSize property real resS: targetSize
property real resT: targetSize property real resT: targetSize
fragmentShaderFilename: "shaders/sobeledgedetection1.fsh" fragmentShaderFilename: "sobeledgedetection1.fsh"
} }

View File

@@ -52,5 +52,5 @@ Effect {
// Transform slider values, and bind result to shader uniforms // Transform slider values, and bind result to shader uniforms
property real weight: parameters.get(0).value property real weight: parameters.get(0).value
fragmentShaderFilename: "shaders/sobeledgedetection2.fsh" fragmentShaderFilename: "sobeledgedetection2.fsh"
} }

View File

@@ -42,5 +42,5 @@
import QtQuick 2.0 import QtQuick 2.0
Effect { Effect {
fragmentShaderFilename: "shaders/tiltshift.fsh" fragmentShaderFilename: "tiltshift.fsh"
} }

View File

@@ -59,5 +59,5 @@ Effect {
property real magTol: 0.3 property real magTol: 0.3
property real quantize: 8.0 property real quantize: 8.0
fragmentShaderFilename: "shaders/toon.fsh" fragmentShaderFilename: "toon.fsh"
} }

View File

@@ -42,5 +42,5 @@
import QtQuick 2.0 import QtQuick 2.0
Effect { Effect {
fragmentShaderFilename: "shaders/vignette.fsh" fragmentShaderFilename: "vignette.fsh"
} }

View File

@@ -42,5 +42,5 @@
import QtQuick 2.0 import QtQuick 2.0
Effect { Effect {
fragmentShaderFilename: "shaders/warhol.fsh" fragmentShaderFilename: "warhol.fsh"
} }

View File

@@ -57,5 +57,5 @@ Effect {
NumberAnimation on time { loops: Animation.Infinite; from: 0; to: Math.PI * 2; duration: 600 } NumberAnimation on time { loops: Animation.Infinite; from: 0; to: Math.PI * 2; duration: 600 }
fragmentShaderFilename: "shaders/wobble.fsh" fragmentShaderFilename: "wobble.fsh"
} }

View File

@@ -3,16 +3,12 @@ TARGET = qmlvideofx
QT += quick QT += quick
LOCAL_SOURCES = filereader.cpp main.cpp SOURCES += filereader.cpp main.cpp
LOCAL_HEADERS = filereader.h trace.h HEADERS += filereader.h trace.h
SOURCES += $$LOCAL_SOURCES
HEADERS += $$LOCAL_HEADERS
RESOURCES += qmlvideofx.qrc RESOURCES += qmlvideofx.qrc
SNIPPETS_PATH = ../snippets include($$PWD/../snippets/performancemonitor/performancemonitordeclarative.pri)
include($$SNIPPETS_PATH/performancemonitor/performancemonitordeclarative.pri)
maemo6: { maemo6: {
DEFINES += SMALL_SCREEN_LAYOUT DEFINES += SMALL_SCREEN_LAYOUT

View File

@@ -44,5 +44,28 @@
<file>qml/qmlvideofx/main-smallscreen.qml</file> <file>qml/qmlvideofx/main-smallscreen.qml</file>
<file>qml/qmlvideofx/ParameterPanel.qml</file> <file>qml/qmlvideofx/ParameterPanel.qml</file>
<file>qml/qmlvideofx/Slider.qml</file> <file>qml/qmlvideofx/Slider.qml</file>
<file>shaders/billboard.fsh</file>
<file>shaders/blackandwhite.fsh</file>
<file>shaders/emboss.fsh</file>
<file>shaders/gaussianblur_h.fsh</file>
<file>shaders/gaussianblur_v.fsh</file>
<file>shaders/glow.fsh</file>
<file>shaders/isolate.fsh</file>
<file>shaders/magnify.fsh</file>
<file>shaders/pagecurl.fsh</file>
<file>shaders/pixelate.fsh</file>
<file>shaders/posterize.fsh</file>
<file>shaders/ripple.fsh</file>
<file>shaders/selectionpanel.fsh</file>
<file>shaders/sepia.fsh</file>
<file>shaders/sharpen.fsh</file>
<file>shaders/shockwave.fsh</file>
<file>shaders/sobeledgedetection1.fsh</file>
<file>shaders/sobeledgedetection2.fsh</file>
<file>shaders/tiltshift.fsh</file>
<file>shaders/toon.fsh</file>
<file>shaders/vignette.fsh</file>
<file>shaders/warhol.fsh</file>
<file>shaders/wobble.fsh</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@@ -42,7 +42,7 @@
#ifndef TRACE_H #ifndef TRACE_H
#define TRACE_H #define TRACE_H
#include <QtCore/QDebug> #include <QDebug>
#define ENABLE_TRACE #define ENABLE_TRACE
//#define VERBOSE_TRACE //#define VERBOSE_TRACE
@@ -53,7 +53,7 @@ class NullDebug
{ {
public: public:
template <typename T> template <typename T>
NullDebug& operator<<(const T&) { return *this; } NullDebug &operator<<(const T &) { return *this; }
}; };
inline NullDebug nullDebug() { return NullDebug(); } inline NullDebug nullDebug() { return NullDebug(); }
@@ -68,18 +68,12 @@ struct PtrWrapper
} // namespace Trace } // namespace Trace
template <typename T> template <typename T>
inline QDebug& operator<<(QDebug &debug, const Trace::PtrWrapper<T> &wrapper) inline QDebug &operator<<(QDebug &debug, const Trace::PtrWrapper<T> &wrapper)
{ {
debug.nospace() << "[" << (void*)wrapper.m_ptr << "]"; debug.nospace() << "[" << (void*)wrapper.m_ptr << "]";
return debug.space(); return debug.space();
} }
template<typename T>
inline const void *qtVoidPtr(const T *ptr)
{ return static_cast<const void *>(ptr); }
#define qtThisPtr() qtVoidPtr(this)
#ifdef ENABLE_TRACE #ifdef ENABLE_TRACE
inline QDebug qtTrace() { return qDebug() << "[qmlvideofx]"; } inline QDebug qtTrace() { return qDebug() << "[qmlvideofx]"; }
# ifdef VERBOSE_TRACE # ifdef VERBOSE_TRACE

View File

@@ -40,11 +40,11 @@
****************************************************************************/ ****************************************************************************/
#include "frequencymonitor.h" #include "frequencymonitor.h"
#include <QtCore/QDebug> #include <QDebug>
#include <QtCore/QElapsedTimer> #include <QElapsedTimer>
#include <QtCore/QString> #include <QString>
#include <QtCore/QTime> #include <QTime>
#include <QtCore/QTimer> #include <QTimer>
//#define VERBOSE_TRACE //#define VERBOSE_TRACE
@@ -61,6 +61,7 @@ static const int DefaultTraceInterval = 0;
class FrequencyMonitorPrivate : public QObject class FrequencyMonitorPrivate : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
FrequencyMonitorPrivate(FrequencyMonitor *parent); FrequencyMonitorPrivate(FrequencyMonitor *parent);
void calculateInstantaneousFrequency(); void calculateInstantaneousFrequency();
@@ -116,16 +117,16 @@ void FrequencyMonitorPrivate::calculateInstantaneousFrequency()
m_stalledTimer->start(3 * ms); m_stalledTimer->start(3 * ms);
if (m_instantaneousFrequency) if (m_instantaneousFrequency)
q_ptr->setActive(true); q_ptr->setActive(true);
q_ptr->emit instantaneousFrequencyChanged(m_instantaneousFrequency); emit q_ptr->instantaneousFrequencyChanged(m_instantaneousFrequency);
q_ptr->emit frequencyChanged(); emit q_ptr->frequencyChanged();
} }
void FrequencyMonitorPrivate::calculateAverageFrequency() void FrequencyMonitorPrivate::calculateAverageFrequency()
{ {
const qint64 ms = m_averageElapsed.restart(); const qint64 ms = m_averageElapsed.restart();
m_averageFrequency = qreal(m_count * 1000) / ms; m_averageFrequency = qreal(m_count * 1000) / ms;
q_ptr->emit averageFrequencyChanged(m_averageFrequency); emit q_ptr->averageFrequencyChanged(m_averageFrequency);
q_ptr->emit frequencyChanged(); emit q_ptr->frequencyChanged();
m_count = 0; m_count = 0;
} }
@@ -134,14 +135,13 @@ void FrequencyMonitorPrivate::stalled()
if (m_instantaneousFrequency) { if (m_instantaneousFrequency) {
qtVerboseTrace() << "FrequencyMonitor::stalled"; qtVerboseTrace() << "FrequencyMonitor::stalled";
m_instantaneousFrequency = 0; m_instantaneousFrequency = 0;
q_ptr->emit instantaneousFrequencyChanged(m_instantaneousFrequency); emit q_ptr->instantaneousFrequencyChanged(m_instantaneousFrequency);
q_ptr->emit frequencyChanged(); emit q_ptr->frequencyChanged();
} }
} }
FrequencyMonitor::FrequencyMonitor(QObject *parent) FrequencyMonitor::FrequencyMonitor(QObject *parent)
: QObject(parent) : QObject(parent)
, d_ptr(0)
{ {
d_ptr = new FrequencyMonitorPrivate(this); d_ptr = new FrequencyMonitorPrivate(this);
qtTrace() << "FrequencyMonitor::FrequencyMonitor"; qtTrace() << "FrequencyMonitor::FrequencyMonitor";
@@ -152,7 +152,7 @@ FrequencyMonitor::~FrequencyMonitor()
} }
const QString &FrequencyMonitor::label() const QString FrequencyMonitor::label() const
{ {
return d_func()->m_label; return d_func()->m_label;
} }

View File

@@ -42,8 +42,8 @@
#ifndef FREQUENCYMONITOR_H #ifndef FREQUENCYMONITOR_H
#define FREQUENCYMONITOR_H #define FREQUENCYMONITOR_H
#include <QtCore/QObject> #include <QObject>
#include <QtCore/QTimer> #include <QTimer>
class FrequencyMonitorPrivate; class FrequencyMonitorPrivate;
@@ -64,13 +64,14 @@ class FrequencyMonitor : public QObject
Q_PROPERTY(int traceInterval READ traceInterval WRITE setTraceInterval NOTIFY traceIntervalChanged) Q_PROPERTY(int traceInterval READ traceInterval WRITE setTraceInterval NOTIFY traceIntervalChanged)
Q_PROPERTY(qreal instantaneousFrequency READ instantaneousFrequency NOTIFY instantaneousFrequencyChanged) Q_PROPERTY(qreal instantaneousFrequency READ instantaneousFrequency NOTIFY instantaneousFrequencyChanged)
Q_PROPERTY(qreal averageFrequency READ averageFrequency NOTIFY averageFrequencyChanged) Q_PROPERTY(qreal averageFrequency READ averageFrequency NOTIFY averageFrequencyChanged)
public: public:
FrequencyMonitor(QObject *parent = 0); FrequencyMonitor(QObject *parent = 0);
~FrequencyMonitor(); ~FrequencyMonitor();
static void qmlRegisterType(); static void qmlRegisterType();
const QString &label() const; QString label() const;
bool active() const; bool active() const;
int samplingInterval() const; int samplingInterval() const;
int traceInterval() const; int traceInterval() const;

View File

@@ -43,27 +43,27 @@
namespace PerformanceMonitor { namespace PerformanceMonitor {
bool parseArgument(const QString &arg, State &state) bool State::parseArgument(const QByteArray &arg)
{ {
bool result = false; bool result = false;
if ("-log-perf" == arg) { if (arg == "-log-perf") {
state.logging = true; logging = true;
state.valid = true; valid = true;
result = true; result = true;
} else if ("-no-log-perf" == arg) { } else if (arg == "-no-log-perf") {
state.logging = false; logging = false;
state.valid = true; valid = true;
result = true; result = true;
} else if ("-show-perf" == arg) { } else if (arg == "-show-perf") {
state.visible = true; visible = true;
state.valid = true; valid = true;
result = true; result = true;
} else if ("-hide-perf" == arg) { } else if (arg == "-hide-perf") {
state.visible = false; visible = false;
state.valid = true; valid = true;
result = true; result = true;
}
return result;
} }
return result;
} }
} // namespace PerformanceMonitor

View File

@@ -42,24 +42,27 @@
#ifndef PERFORMANCEMONITOR_H #ifndef PERFORMANCEMONITOR_H
#define PERFORMANCEMONITOR_H #define PERFORMANCEMONITOR_H
#include <QtCore/QString> #include <QByteArray>
namespace PerformanceMonitor { namespace PerformanceMonitor {
struct State {
bool valid;
bool logging;
bool visible;
State() : valid(true), logging(false), visible(true) { } struct State
State(bool l, bool v) : valid(true), logging(l), visible(v) { } {
bool operator==(const State &other) const State() : valid(true), logging(false), visible(true) { }
{ return logging == other.logging && visible == other.visible; } State(bool l, bool v) : valid(true), logging(l), visible(v) { }
bool operator!=(const State &other) const bool operator==(const State &other) const
{ return logging != other.logging || visible != other.visible; } { return logging == other.logging && visible == other.visible; }
}; bool operator!=(const State &other) const
{ return logging != other.logging || visible != other.visible; }
bool parseArgument(const QString &arg, State &state); bool parseArgument(const QByteArray &arg);
}
bool valid;
bool logging;
bool visible;
};
} // namespace PerformanceMonitor
#endif // PERFORMANCEMONITOR_H #endif // PERFORMANCEMONITOR_H