Merge remote-tracking branch 'origin/5.3' into dev

Conflicts:
	.qmake.conf

Change-Id: Iecd8d7b94e52a8981526b12cffa40e99870ba62f
This commit is contained in:
Sergio Ahumada
2014-06-14 21:59:24 +02:00
168 changed files with 2725 additions and 2694 deletions

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
@@ -29,8 +29,8 @@
\example audiodevices
\title Audio Devices Example
\ingroup multimedia_examples
\brief The Audio Devices example shows the application of the audio devices APIs
\brief The Audio Devices example shows the application of the audio devices
APIs.
This example shows how to create a simple application to list and test
the configuration for the various audio devices available on the device
@@ -38,6 +38,5 @@
\image audiodevices.png
\include examples-run.qdocinc
*/

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
@@ -30,10 +30,10 @@
\title AudioEngine Example
\ingroup multimedia_examples
\brief The Audio Engine example demonstrates 3D sound control using
the QtAudioEngine API.
the Qt Audio Engine API.
\image audioengine.png
The Audio Engine example demonstrates 3D sound control using the
\l{Qt Audio Engine QML Types}{Qt Audio Engine} API.
\include examples-run.qdocinc
*/

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
@@ -37,7 +37,8 @@
Qt provides the QAudioInput class to enable audio functionality within
a standard application user interface.
This example calculates the maximum linear value of the input audio from the microphone and displays the output.
This example calculates the maximum linear value of the input audio from the
microphone and displays the output.
\include examples-run.qdocinc
*/

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
@@ -31,13 +31,14 @@
\ingroup multimedia_examples
\brief The Audio Output Example show the use of the QAudioOutput API.
The example demonstrates the basic use cases of the QAudioOutput class.
The example demonstrates the basic use cases of the QAudioOutput class from
\l{Qt Multimedia}.
\image audiooutput-example.png
This example provides a tone generator to supply continuous audio playback.
The first button allows pause and resume of the playback, and the second
button allows toggling between push and pull modes of operation.
\include examples-run.qdocinc
*/

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
@@ -34,6 +34,12 @@
It demonstrates the discovery of the supported devices and codecs and the use
of recording functions in the QAudioRecorder class.
\image audiorecorder.png
\include examples-run.qdocinc
\section1 Displaying the Window and Audio Settings
We display a window for the user to select the appropriate audio input,
codec, container, and sample rate. Allow a setting of either quality or
bitrate. Finally, the output file can be selected and recording can be
@@ -49,7 +55,7 @@
\l{QMultimedia::NormalQuality}, while the bitrates are hardcoded
into the list.
\image audiorecorder.png
\section1 Recording Audio
To record audio we simply create a QAudioRecorder object.
@@ -96,5 +102,3 @@
ui->statusbar->showMessage(tr("Recorded %1 sec").arg(duration / 1000));
\endcode
*/

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
@@ -34,35 +34,22 @@ or video.
\image qml-camera.png
This example demonstrates how to use the Qt Multimedia QML API to access
camera functions. It shows how to change settings and to capture images.
This example demonstrates how to use the
\l{Qt Multimedia QML Types}{Qt Multimedia QML API} to access camera functions.
It shows how to change settings and to capture images.
\include examples-run.qdocinc
\section1 Application Structure
Most of the QML code supports the user interface for this application with the
camera types being mostly found in \e {declarative-camera.qml} and
\e {CaptureControls.qml}.
In \e {declarative-camera.qml} the \l Camera is initialized with an id
of \e {camera}, a photo preview is setup, states are implemented for image
preview or capture and \l CaptureControls is initialized. The initial
\e state is \e PhotoCapture. \l CameraCapture includes a handler, \e onImageCaptured,
for the \l {imageCaptured} signal. The handler sets up the application to process
the preview including a change in the user interface state. The \l PhotoPreview
becomes visible with any key press being picked up by the handler
in PhotoPreview and returning the state to \e PhotoCapture.
\e CaptureControls, which is implemented in \e {CaptureControls.qml},
CaptureControls, which is implemented in \e {CaptureControls.qml},
generates a column on the right hand side of the screen which includes control
buttons for \e focus (not initially visible), \e {capture}, \e {flash modes},
\e {white balance}, \e {exposure compensation}, and if a preview is
available a \e {preview} button. The last button exits from the application.
When the Capture button is pressed the \e onClicked handler calls
\l {Camera::captureImage()}{captureImage()}
buttons for focus (not initially visible), capture, flash modes,
white balance, exposure compensation, and if a preview is
available, a preview button. The last button exits from the application.
*/

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
@@ -31,8 +31,8 @@
\brief Demonstrates the radio functionality
\ingroup multimedia_examples
This examples uses the Qt Multimedia Radio QML type to list the available
channels on the FM frequency.
This examples uses the \l{Qt Multimedia} \l Radio QML type to list the
available channels on the FM frequency.
\include examples-run.qdocinc
*/

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
@@ -59,6 +59,6 @@
(FFT) of a segment of audio data. An open-source library,
\l{http://ldesoras.free.fr/prod.html}{FFTReal}, against which the
application is dynamically linked, is used to compute the transform.
\include examples-run.qdocinc
*/

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 273 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 KiB

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
@@ -34,8 +34,6 @@
resize; rotate; change aspect ratio) which can be applied to QML \l{VideoOutput}
items.
\section1 Overview
This example demonstrates the various manipulations (move; resize; rotate;
change aspect ratio) which can be applied to QML \l{VideoOutput} items.
@@ -50,7 +48,9 @@ which moves across the \l{VideoOutput} item.
\image qmlvideo-overlay.png
\section1 Application structure
\include examples-run.qdocinc
\section1 Application Structure
The \l{video/qmlvideo/qml/qmlvideo/main.qml} file creates a UI which includes
the following items:
@@ -127,7 +127,7 @@ instance, the embedded
\l{video/qmlvideo/qml/qmlvideo/Content.qml}{Content} item creates either a
\l{MediaPlayer} or a \l{Camera} item.
\section1 Calculating and displaying QML painting rate
\section1 Calculating and Displaying QML Painting Rate
\input multimedia/doc/src/examples/video-qml-paint-rate.qdocinc
@@ -145,4 +145,3 @@ object to a JavaScript function, which will eventually call frequencyItem.notify
\printuntil SLOT(qmlFramePainted()));
*/

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
@@ -34,9 +34,11 @@
can be used to apply postprocessing effects, expressed in \c GLSL, to video
and camera viewfinder content.
\include examples-run.qdocinc
\section1 Overview
This example shows how a \l {ShaderEffectItem} can be used to apply
This example shows how a \l {ShaderEffect} can be used to apply
postprocessing effects, expressed in GLSL, to QML \l {VideoOutput} items.
It also shows how native code can be combined with QML to implement more
@@ -44,36 +46,30 @@ advanced functionality - in this case, C++ code is used to calculate the QML
frame rate. This value is rendered in QML in a semi-transparent item
overlaid on the video content.
Finally, this application demonstrates the use of different top-level QML
files to handle different physical screen sizes. On small-screen devices,
menus are by default hidden, and only appear when summoned by a gesture.
Large-screen devices show a more traditional layout in which menus are
displayed around the video content pane.
The following screenshots show shader effects being applied. In each case,
the effect is implemented using a fragment shader.
Here we see an edge detection algorithm being applied to a video clip
(\l{http://orange.blender.org/}{Elephant's Dream from blender.org}).
\image qmlvideofx-video-edgedetection.png
(\l{http://durian.blender.org/}{Sintel from blender.org}).
\image qmlvideofx-video-edgedetection.jpg
This image shows a page curl effect, applied to the same video clip.
\image qmlvideofx-video-pagecurl.png
\image qmlvideofx-video-pagecurl.jpg
Here we see a 'glow' effect (edge detection plus colour quantization) being
applied to the camera viewfinder.
\image qmlvideofx-camera-glow.png
\image qmlvideofx-camera-glow.jpg
This image shows a 'lens magnification' effect applied to the viewfinder.
\image qmlvideofx-camera-magnify.png
This image shows a 'wobble' effect applied to the viewfinder.
\image qmlvideofx-camera-wobble.jpg
The application includes many more effects than the ones shown here - look
for Effect*.qml files in the list above to see the full range.
for Effect*.qml files in the list of files below to see the full range.
\section1 Application structure
Shader effects can be applied to video or viewfinder content using
\l{ShaderEffectItem}, as shown in the following example, which applies
\l{ShaderEffect}, as shown in the following example, which applies
a wiggly effect to the content:
\code
@@ -171,7 +167,7 @@ is based on the \l{ShaderEffect}:
\skipto import
\printuntil /^\}/
The interface of the \l Effect allows for derived effects to specify the
The interface of Effect allows for derived effects to specify the
number of parameters which they support (and therefore the number of sliders
which should be displayed), and whether a vertical dividing line should be drawn
between transformed and untransformed image regions. As an example, here is the
@@ -195,11 +191,8 @@ vertical dividing line, which can be dragged left / right by the user. Finally,
a \l{video/qmlvideofx/qml/qmlvideofx/ParameterPanel.qml}{ParameterPanel} item
renders the sliders corresponding to each effect parameter.
Here is the source selection menu:
\image qmlvideofx-source-menu.png
And here is the effect selection menu:
\image qmlvideofx-effects-menu.png
Here is the effect selection menu:
\image qmlvideofx-effects-menu.jpg
\section1 Calculating and displaying QML painting rate
@@ -219,4 +212,3 @@ object to a JavaScript function, which will eventually call frequencyItem.notify
\printuntil SLOT(qmlFramePainted()));
*/

View File

@@ -41,6 +41,7 @@
import QtQuick 2.0
import QtSystemInfo 5.0
// NOTE: The QtSystemInfo module is not yet part of Qt 5
Item {
ScreenSaver {

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleExecutable</key>
<string>qmlvideofx</string>
<key>CFBundleIdentifier</key>
<string>com.digia.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1.0</string>
</dict>
</plist>

View File

@@ -0,0 +1,48 @@
<?xml version="1.0"?>
<manifest package="org.qtproject.example.qmlvideofx" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="@string/app_name">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="@string/app_name" android:screenOrientation="landscape" android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --"/>
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
<meta-data android:name="android.app.repository" android:value="default"/>
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
<meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
<!-- Deploy Qt libs as part of package -->
<meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>
<meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
<meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
<!-- Run with local libs -->
<meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/>
<meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
<meta-data android:name="android.app.load_local_libs" android:value="-- %%INSERT_LOCAL_LIBS%% --"/>
<meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/>
<meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/>
<!-- Messages maps -->
<meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
<meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
<meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
<!-- Messages maps -->
<!-- Splash screen -->
<!--
<meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/logo"/>
-->
<!-- Splash screen -->
</activity>
</application>
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="14"/>
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
<!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.
Remove the comment if you do not require these default permissions. -->
<!-- %%INSERT_PERMISSIONS -->
<!-- The following comment will be replaced upon deployment with default features based on the dependencies of the application.
Remove the comment if you do not require these default features. -->
<!-- %%INSERT_FEATURES -->
</manifest>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 990 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,5 +0,0 @@
border.left: 10
border.top: 12
border.bottom: 12
border.right: 10
source: titlebar.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 662 B

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
@@ -48,12 +48,6 @@
#include "filereader.h"
#include "trace.h"
#ifdef SMALL_SCREEN_LAYOUT
static const QLatin1String MainQmlFile("main-smallscreen.qml");
#else
static const QLatin1String MainQmlFile("main-largescreen.qml");
#endif
#ifdef PERFORMANCEMONITOR_SUPPORT
#include "performancemonitordeclarative.h"
#endif
@@ -99,7 +93,7 @@ int main(int argc, char *argv[])
QQuickView viewer;
viewer.setSource(QLatin1String("qrc:///qml/qmlvideofx/") + MainQmlFile);
viewer.setSource(QUrl(QLatin1String("qrc:///qml/qmlvideofx/Main.qml")));
QQuickItem *rootObject = viewer.rootObject();
rootObject->setProperty("fileName", fileName);
viewer.rootObject()->setProperty("volume", volume);
@@ -128,13 +122,10 @@ int main(int argc, char *argv[])
viewer.setTitle("qmlvideofx");
viewer.setFlags(Qt::Window | Qt::WindowSystemMenuHint | Qt::WindowTitleHint |
Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
viewer.setMinimumSize(QSize(600, 400));
viewer.setMinimumSize(QSize(1280, 720));
viewer.setResizeMode(QQuickView::SizeRootObjectToView);
#ifdef SMALL_SCREEN_PHYSICAL
viewer.showFullScreen();
#else
viewer.show();
#endif
// Delay invocation of init until the event loop has started, to work around
// a GL context issue on Harmattan: without this, we get the following error

View File

@@ -43,29 +43,32 @@ import QtQuick 2.0
Rectangle {
id: root
color: textColor
radius: 0.25 * height
color: "transparent"
height: itemHeight
width: itemWidth
property string text
property color bgColor: "white"
property color bgColorSelected: "red"
property color textColor: "black"
property color bgColor: "transparent"
property color bgColorSelected: "#14aaff"
property color textColor: "white"
property alias enabled: mouseArea.enabled
property bool active: true
property alias horizontalAlign: text.horizontalAlignment
signal clicked
Rectangle {
anchors { fill: parent; margins: 1 }
color: mouseArea.pressed ? bgColorSelected : bgColor
radius: 0.25 * height
Text {
id: text
anchors.centerIn: parent
clip: true
text: root.text
font.pixelSize: 0.5 * parent.height
color: mouseArea.pressed ? bgColor : textColor
horizontalAlignment: Text.AlignHCenter
anchors { fill: parent; margins: scaledMargin }
font.pixelSize: fontSize
color: textColor
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
}
@@ -75,6 +78,7 @@ Rectangle {
onClicked: {
root.clicked()
}
enabled: active
}
}
}

View File

@@ -39,11 +39,10 @@
**
****************************************************************************/
import QtQuick 2.0
import QtQuick 2.1
Rectangle {
id: root
color: "black"
property alias effect: effectLoader.item
property alias gripSize: divider.gripSize
property string effectSource

View File

@@ -39,7 +39,7 @@
**
****************************************************************************/
import QtQuick 2.0
import QtQuick 2.1
Image {
fillMode: Image.PreserveAspectFit

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
@@ -39,13 +39,14 @@
**
****************************************************************************/
import QtQuick 2.0
import QtQuick 2.1
import QtMultimedia 5.0
VideoOutput {
source: mediaPlayer
property alias mediaSource: mediaPlayer.source
property alias volume: mediaPlayer.volume
property bool isRunning: true
MediaPlayer {
id: mediaPlayer
@@ -55,5 +56,21 @@ VideoOutput {
}
function play() { mediaPlayer.play() }
function pause() { mediaPlayer.pause() }
function stop() { mediaPlayer.stop() }
function toggleplay() {
if (isRunning) {
pause()
isRunning = false
} else {
play()
isRunning = true
}
}
MouseArea {
anchors.fill: parent
onClicked: toggleplay()
}
}

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
@@ -39,39 +39,56 @@
**
****************************************************************************/
// Based on http://rastergrid.com/blog/downloads/frei-chen-edge-detector/
import QtQuick 2.0
#version 130
uniform sampler2D source;
uniform float dividerValue;
uniform float weight;
mat3 G[2] = mat3[](
mat3( 1.0, 2.0, 1.0, 0.0, 0.0, 0.0, -1.0, -2.0, -1.0 ),
mat3( 1.0, 0.0, -1.0, 2.0, 0.0, -2.0, 1.0, 0.0, -1.0 )
);
uniform lowp float qt_Opacity;
in vec2 qt_TexCoord0;
out vec4 FragmentColor;
void main() {
vec2 uv = qt_TexCoord0.xy;
vec4 c = vec4(0.0);
if (uv.x < dividerValue) {
mat3 intensity;
float conv[2];
vec3 sample;
for (int i=0; i<3; ++i) {
for (int j=0; j<3; ++j) {
sample = texelFetch(source, ivec2(gl_FragCoord) + ivec2(i-1, j-1), 0).rgb;
intensity[i][j] = length(sample) * weight;
Rectangle {
id: root
color: "transparent"
radius: 5
property alias value: grip.value
property color gripColor: "transparent"
property real gripSize: 20
property real gripTolerance: 3.0
property real increment: 0.1
property bool enabled: true
property string imageSource: "qrc:/images/Triangle_Top.png"
Rectangle {
id: grip
property real value: 0.5
x: (value * parent.width) - width/2
anchors.verticalCenter: parent.verticalCenter
width: root.gripTolerance * root.gripSize
height: width
radius: width/2
color: "transparent"
Image {
id: sliderhandleimage
source: imageSource
anchors.centerIn: parent
}
MouseArea {
id: mouseArea
enabled: root.enabled
anchors.fill: parent
drag {
target: grip
axis: Drag.XAxis
minimumX: -parent.width/2
maximumX: root.width - parent.width/2
}
onPositionChanged: {
if (drag.active)
updatePosition()
}
onReleased: {
updatePosition()
}
function updatePosition() {
value = (grip.x + grip.width/2) / grip.parent.width
}
}
for (int i=0; i<2; ++i) {
float dp3 = dot(G[i][0], intensity[0]) + dot(G[i][1], intensity[1]) + dot(G[i][2], intensity[2]);
conv[i] = dp3 * dp3;
}
c = vec4(0.5 * sqrt(conv[0]*conv[0] + conv[1]*conv[1]));
} else {
c = texture2D(source, qt_TexCoord0);
}
FragmentColor = qt_Opacity * c;
}

View File

@@ -41,6 +41,7 @@
import QtQuick 2.0
import QtMobility.systeminfo 1.1
// NOTE: The QtSystemInfo module is not yet part of Qt 5
Item {
ScreenSaver {

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
@@ -39,7 +39,7 @@
**
****************************************************************************/
import QtQuick 2.0
import QtQuick 2.1
Rectangle {
id: root
@@ -53,21 +53,34 @@ Rectangle {
id: line
anchors { top: parent.top; bottom: parent.bottom }
x: parent.value * parent.width - (width / 2)
width: 2
color: "red"
width: 4
color: "#14aaff"
}
Slider {
// topgrip
Curtain {
id: slider
increment: 0.0
lineColor: "transparent"
fillColor: "transparent"
gripColor: "red"
anchors {
top: parent.top
topMargin: gripSize / 2
topMargin: (gripSize / 2) + 5
left: parent.left
right: parent.right
}
onValueChanged: slider2.value = slider.value
}
// bottomgrip
Curtain {
id: slider2
increment: 0.0
anchors {
bottom: parent.bottom
bottomMargin: (gripSize / 2) + 5
left: parent.left
right: parent.right
}
imageSource: "qrc:/images/Triangle_bottom.png"
onValueChanged: slider.value = slider2.value
}
}

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect {
parameters: ListModel {
ListElement {
name: "grid spacing"
name: "Grid Spacing"
value: 0.5
}
}

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect {
parameters: ListModel {
ListElement {
name: "threshold"
name: "Threshold"
value: 0.5
}
}

View File

@@ -49,7 +49,7 @@ Item {
property real dividerValue: 0.5
property ListModel parameters: ListModel {
ListElement {
name: "radius"
name: "Radius"
value: 0.5
}
}

View File

@@ -44,11 +44,11 @@ import QtQuick 2.0
Effect {
parameters: ListModel {
ListElement {
name: "hue"
name: "Hue"
value: 0.5
}
ListElement {
name: "width"
name: "Width"
value: 0.5
}
}

View File

@@ -46,11 +46,11 @@ Effect {
divider: false
parameters: ListModel {
ListElement {
name: "radius"
name: "Radius"
value: 0.5
}
ListElement {
name: "diffraction"
name: "Diffraction"
value: 0.5
}
}

View File

@@ -45,7 +45,7 @@ Effect {
divider: false
parameters: ListModel {
ListElement {
name: "extent"
name: "Extent"
value: 0.5
}
}

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect {
parameters: ListModel {
ListElement {
name: "granularity"
name: "Granularity"
value: 0.5
}
}

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect {
parameters: ListModel {
ListElement {
name: "gamma"
name: "Gamma"
value: 0.5
}
}

View File

@@ -44,11 +44,11 @@ import QtQuick 2.0
Effect {
parameters: ListModel {
ListElement {
name: "amplitude"
name: "Amplitude"
value: 0.5
}
ListElement {
name: "frequency"
name: "Frequency"
value: 0.5
}
}

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
@@ -41,16 +41,27 @@
import QtQuick 2.0
Effect {
parameters: ListModel {
ListElement {
name: "threshold"
value: 0.5
}
}
// Transform slider values, and bind result to shader uniforms
property real weight: parameters.get(0).value
fragmentShaderFilename: "sobeledgedetection2.fsh"
ListModel {
id: sources
ListElement { name: "No effect"; source: "EffectPassThrough.qml" }
ListElement { name: "Billboard"; source: "EffectBillboard.qml" }
ListElement { name: "Black & white"; source: "EffectBlackAndWhite.qml" }
ListElement { name: "Blur"; source: "EffectGaussianBlur.qml" }
ListElement { name: "Edge detection"; source: "EffectSobelEdgeDetection1.qml" }
ListElement { name: "Emboss"; source: "EffectEmboss.qml" }
ListElement { name: "Glow"; source: "EffectGlow.qml" }
ListElement { name: "Isolate"; source: "EffectIsolate.qml" }
//ListElement { name: "Magnify"; source: "EffectMagnify.qml" }
ListElement { name: "Page curl"; source: "EffectPageCurl.qml" }
ListElement { name: "Pixelate"; source: "EffectPixelate.qml" }
ListElement { name: "Posterize"; source: "EffectPosterize.qml" }
ListElement { name: "Ripple"; source: "EffectRipple.qml" }
ListElement { name: "Sepia"; source: "EffectSepia.qml" }
ListElement { name: "Sharpen"; source: "EffectSharpen.qml" }
ListElement { name: "Shockwave"; source: "EffectShockwave.qml" }
ListElement { name: "Tilt shift"; source: "EffectTiltShift.qml" }
ListElement { name: "Toon"; source: "EffectToon.qml" }
ListElement { name: "Warhol"; source: "EffectWarhol.qml" }
ListElement { name: "Wobble"; source: "EffectWobble.qml" }
ListElement { name: "Vignette"; source: "EffectVignette.qml" }
}

View File

@@ -1,154 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.0
Rectangle {
id: root
property int itemHeight: 25
property string effectSource: ""
signal clicked
QtObject {
id: d
property Item selectedItem
}
ListModel {
id: sources
ListElement { name: "No effect"; source: "EffectPassThrough.qml" }
ListElement { name: "Billboard"; source: "EffectBillboard.qml" }
ListElement { name: "Black & white"; source: "EffectBlackAndWhite.qml" }
ListElement { name: "Blur"; source: "EffectGaussianBlur.qml" }
ListElement { name: "Edge detection"; source: "EffectSobelEdgeDetection1.qml" }
//ListElement { name: "Edge detection (Sobel, #2)"; source: "EffectSobelEdgeDetection2.qml" }
ListElement { name: "Emboss"; source: "EffectEmboss.qml" }
ListElement { name: "Glow"; source: "EffectGlow.qml" }
ListElement { name: "Isolate"; source: "EffectIsolate.qml" }
ListElement { name: "Magnify"; source: "EffectMagnify.qml" }
ListElement { name: "Page curl"; source: "EffectPageCurl.qml" }
ListElement { name: "Pixelate"; source: "EffectPixelate.qml" }
ListElement { name: "Posterize"; source: "EffectPosterize.qml" }
ListElement { name: "Ripple"; source: "EffectRipple.qml" }
ListElement { name: "Sepia"; source: "EffectSepia.qml" }
ListElement { name: "Sharpen"; source: "EffectSharpen.qml" }
ListElement { name: "Shockwave"; source: "EffectShockwave.qml" }
ListElement { name: "Tilt shift"; source: "EffectTiltShift.qml" }
ListElement { name: "Toon"; source: "EffectToon.qml" }
ListElement { name: "Warhol"; source: "EffectWarhol.qml" }
ListElement { name: "Wobble"; source: "EffectWobble.qml" }
ListElement { name: "Vignette"; source: "EffectVignette.qml" }
}
Component {
id: sourceDelegate
Item {
id: sourceDelegateItem
width: root.width
height: itemHeight
Button {
id: sourceSelectorItem
anchors.centerIn: parent
width: 0.9 * parent.width
height: 0.8 * itemHeight
text: name
onClicked: {
if (d.selectedItem)
d.selectedItem.state = "baseState"
d.selectedItem = sourceDelegateItem
d.selectedItem.state = "selected"
effectSource = source
root.clicked()
}
}
states: [
State {
name: "selected"
PropertyChanges {
target: sourceSelectorItem
bgColor: "#ff8888"
}
}
]
Component.onCompleted: {
if (name == "No effect") {
state = "selected"
d.selectedItem = sourceDelegateItem
}
}
transitions: [
Transition {
from: "*"
to: "*"
ColorAnimation {
properties: "color"
easing.type: Easing.OutQuart
duration: 500
}
}
]
}
}
Flickable {
anchors.fill: parent
contentHeight: (itemHeight * sources.count) + layout.anchors.topMargin + layout.spacing
clip: true
Column {
id: layout
anchors {
fill: parent
topMargin: 10
}
Repeater {
model: sources
delegate: sourceDelegate
}
}
}
}

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect {
parameters: ListModel {
ListElement {
name: "sharpness"
name: "Sharpness"
value: 0.5
}
}

View File

@@ -45,7 +45,7 @@ Effect {
id: root
parameters: ListModel {
ListElement {
name: "amplitude"
name: "Amplitude"
value: 0.5
}
}

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect {
parameters: ListModel {
ListElement {
name: "threshold"
name: "Threshold"
value: 0.5
}
}

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect {
parameters: ListModel {
ListElement {
name: "threshold"
name: "Threshold"
value: 0.5
}
}

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect {
parameters: ListModel {
ListElement {
name: "amplitude"
name: "Amplitude"
value: 0.5
}
}

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
@@ -39,12 +39,13 @@
**
****************************************************************************/
import QtQuick 2.0
import Qt.labs.folderlistmodel 2.0
import QtQuick 2.1
import Qt.labs.folderlistmodel 2.1
Rectangle {
id: fileBrowser
color: "transparent"
z: 4
property string folder
property bool shown: loader.sourceComponent
@@ -75,12 +76,12 @@ Rectangle {
Rectangle {
id: root
color: "white"
color: "black"
property bool showFocusHighlight: false
property variant folders: folders1
property variant view: view1
property alias folder: folders1.folder
property color textColor: "black"
property color textColor: "white"
FolderListModel {
id: folders1
@@ -112,7 +113,7 @@ Rectangle {
fileBrowser.selectFile(path)
}
width: root.width
height: 52
height: itemHeight
color: "transparent"
Rectangle {
@@ -126,10 +127,12 @@ Rectangle {
}
Item {
width: 48; height: 48
width: itemHeight; height: itemHeight
Image {
source: "qrc:/images/folder.png"
anchors.centerIn: parent
source: "qrc:/images/icon_Folder.png"
fillMode: Image.PreserveAspectFit
anchors.fill: parent
anchors.margins: scaledMargin
visible: folders.isFolder(index)
}
}
@@ -138,8 +141,8 @@ Rectangle {
id: nameText
anchors.fill: parent; verticalAlignment: Text.AlignVCenter
text: fileName
anchors.leftMargin: 54
font.pixelSize: 32
anchors.leftMargin: itemHeight + scaledMargin
font.pixelSize: fontSize
color: (wrapper.ListView.isCurrentItem && root.showFocusHighlight) ? palette.highlightedText : textColor
elide: Text.ElideRight
}
@@ -262,56 +265,45 @@ Rectangle {
Keys.onPressed: root.keyPressed(event.key)
}
Rectangle {
Button {
id: cancelButton
width: 100
height: titleBar.height - 7
color: "black"
anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter }
Text {
anchors { fill: parent; margins: 4 }
text: "Cancel"
color: "white"
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.pixelSize: 20
}
MouseArea {
anchors.fill: parent
onClicked: fileBrowser.selectFile("")
}
width: itemWidth
height: itemHeight
color: "#353535"
anchors { bottom: parent.bottom; right: parent.right; margins: 5 * scaledMargin }
text: "Cancel"
horizontalAlign: Text.AlignHCenter
onClicked: fileBrowser.selectFile("")
}
Keys.onPressed: {
root.keyPressed(event.key);
if (event.key == Qt.Key_Return || event.key == Qt.Key_Select || event.key == Qt.Key_Right) {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Select || event.key === Qt.Key_Right) {
view.currentItem.launch();
event.accepted = true;
} else if (event.key == Qt.Key_Left) {
} else if (event.key === Qt.Key_Left) {
up();
}
}
BorderImage {
source: "qrc:/images/titlebar.sci";
// titlebar
Rectangle {
color: "black"
width: parent.width;
height: 52
y: -7
height: itemHeight
id: titleBar
Rectangle {
id: upButton
width: 48
height: titleBar.height - 7
width: titleBar.height
height: titleBar.height
color: "transparent"
Image { anchors.centerIn: parent; source: "qrc:/images/up.png" }
MouseArea { id: upRegion; anchors.centerIn: parent
width: 56
height: 56
onClicked: up()
}
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
anchors.margins: scaledMargin
Image { anchors.fill: parent; anchors.margins: scaledMargin; source: "qrc:/images/icon_BackArrow.png" }
MouseArea { id: upRegion; anchors.fill: parent; onClicked: up() }
states: [
State {
name: "pressed"
@@ -321,23 +313,23 @@ Rectangle {
]
}
Rectangle {
color: "gray"
x: 48
width: 1
height: 44
}
Text {
anchors.left: upButton.right; anchors.right: parent.right; height: parent.height
anchors.leftMargin: 4; anchors.rightMargin: 4
anchors.leftMargin: 10; anchors.rightMargin: 4
text: folders.folder
color: "white"
elide: Text.ElideLeft; horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignVCenter
font.pixelSize: 32
elide: Text.ElideLeft; horizontalAlignment: Text.AlignLeft; verticalAlignment: Text.AlignVCenter
font.pixelSize: fontSize
}
}
Rectangle {
color: "#353535"
width: parent.width
height: 1
anchors.top: titleBar.bottom
}
function down(path) {
if (folders == folders1) {
view = view2

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
@@ -39,56 +39,115 @@
**
****************************************************************************/
import QtQuick 2.0
import QtQuick 2.1
Rectangle {
id: root
color: "white"
property int buttonHeight: 35
property int topMargin: 0
color: "#151515"
signal openCamera
signal openImage
signal openVideo
signal openCamera
signal close
Rectangle {
anchors {
top: parent.top;
topMargin: root.topMargin
bottom: parent.bottom;
horizontalCenter: parent.horizontalCenter
}
width: 0.9 * parent.width
color: "transparent"
Column {
Rectangle {
id: menuField
height: itemHeight
width: itemHeight
color: "transparent"
anchors.right: parent.right
Image {
id: menu
source: "qrc:///images/icon_Menu.png"
anchors {
right: parent.right
top: parent.top
margins: scaledMargin
}
}
MouseArea {
anchors.fill: parent
spacing: 5
Button {
text: "Open image"
height: buttonHeight
width: parent.width
onClicked: root.openImage()
onClicked: fileOpen.state == "expanded" ? fileOpen.state = "collapsed" : fileOpen.state = "expanded"
}
}
Column {
anchors {
top: menuField.bottom
right: parent.right
left: parent.left
bottom: parent.bottom
topMargin: 10
}
spacing: 10
visible: fileOpen.state == "expanded"
Rectangle {
width: 0.9 * parent.width
height: 1
color: "#353535"
anchors.left: parent.left
}
Button {
text: "Start camera"
height: itemHeight
width: parent.width
onClicked: {
fileOpen.state = "collapsed"
root.openCamera()
}
Button {
text: "Open video"
height: buttonHeight
width: parent.width
onClicked: root.openVideo()
}
Rectangle {
width: 0.9 * parent.width
height: 1
color: "#353535"
anchors.left: parent.left
}
Button {
text: "Open image"
height: itemHeight
width: parent.width
onClicked: {
fileOpen.state = "collapsed"
root.openImage()
}
Button {
text: "Start camera"
height: buttonHeight
width: parent.width
onClicked: root.openCamera()
}
Rectangle {
width: 0.9 * parent.width
height: 1
color: "#353535"
anchors.left: parent.left
}
Button {
text: "Open video"
height: itemHeight
width: parent.width
onClicked: {
fileOpen.state = "collapsed"
root.openVideo()
}
Button {
text: "Reset"
height: buttonHeight
width: parent.width
onClicked: root.close()
}
Rectangle {
width: 0.9 * parent.width
height: 1
color: "#353535"
anchors.left: parent.left
}
Button {
text: "Reset"
height: itemHeight
width: parent.width
onClicked: {
fileOpen.state = "collapsed"
root.close()
}
}
Rectangle {
width: 0.9 * parent.width
height: 1
color: "#353535"
anchors.left: parent.left
}
}
}

View File

@@ -0,0 +1,293 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.1
import QtQuick.Window 2.1
Rectangle {
id: root
color: "black"
property string fileName
property alias volume: content.volume
property bool perfMonitorsLogging: false
property bool perfMonitorsVisible: false
property int pixDens: Math.ceil(Screen.pixelDensity)
property int itemWidth: 25 * pixDens
property int itemHeight: 10 * pixDens
property int windowWidth: Screen.desktopAvailableWidth
property int windowHeight: Screen.desktopAvailableHeight
property int scaledMargin: 2 * pixDens
property int fontSize: 5 * pixDens
QtObject {
id: d
property real gripSize: 20
}
Content {
id: content
color: "transparent"
anchors {
top: parent.top
left: parent.left
right: parent.right
bottom: parameterPanel.top
margins: scaledMargin
leftMargin: scaledMargin + itemHeight
}
gripSize: d.gripSize
}
ParameterPanel {
id: parameterPanel
anchors {
left: parent.left
right: effectName.left
bottom: parent.bottom
margins: scaledMargin
leftMargin: scaledMargin + itemHeight
}
gripSize: d.gripSize
height: root.itemHeight * 2.5
width: root.itemWidth * 3
}
Button {
id: effectName
anchors {
right: parent.right
bottom: perfHolder.top
margins: scaledMargin
}
text: "No effect"
width: itemWidth * 2
height: itemHeight
onClicked: {
effectName.visible = false
listview.visible = true
lvbg.visible = true
}
color: "#303030"
}
Rectangle {
id: lvbg
width: itemWidth * 2
color: "black"
opacity: 0.8
visible: false
anchors {
right: parent.right
bottom: perfHolder.top
top: parent.top
margins: scaledMargin
}
ListView {
id: listview
width: itemWidth * 2
anchors.fill: parent
visible: false
model: EffectSelectionList {}
delegate: effectDelegate
clip: true
focus: true
Component {
id: effectDelegate
Button {
text: name
width: itemWidth * 2
onClicked: {
content.effectSource = source
listview.visible = false
lvbg.visible = false
effectName.text = name
effectName.visible = true
parameterPanel.model = content.effect.parameters
}
}
}
}
}
Rectangle {
id: perfHolder
color: "transparent"
anchors {
right: parent.right
bottom: parent.bottom
margins: scaledMargin
}
height: root.itemHeight * 1.5
width: root.itemWidth
Loader {
id: performanceLoader
function init() {
console.log("[qmlvideofx] performanceLoader.init logging " + root.perfMonitorsLogging + " visible " + root.perfMonitorsVisible)
var enabled = root.perfMonitorsLogging || root.perfMonitorsVisible
source = enabled ? "../performancemonitor/PerformanceItem.qml" : ""
}
onLoaded: {
item.parent = perfHolder
item.anchors.top = perfHolder.top
item.anchors.bottom = perfHolder.bottom
item.anchors.left = perfHolder.left
item.anchors.right = perfHolder.right
item.logging = root.perfMonitorsLogging
item.displayed = root.perfMonitorsVisible
item.init()
}
}
}
FileOpen {
id: fileOpen
state: "collapsed"
anchors {
left: parent.left
top: parent.top
bottom: parent.bottom
margins: scaledMargin
}
width: itemHeight + scaledMargin
z: 2
opacity: 0.9
states: [
State {
name: "expanded"
PropertyChanges {
target: fileOpen
width: itemWidth * 1.5
opacity: 0.8
}
},
State {
name: "collapsed"
PropertyChanges {
target: fileOpen
width: itemHeight + scaledMargin
opacity: 0.9
}
}
]
transitions: [
Transition {
NumberAnimation { target: fileOpen; property: "width"; duration: 100 }
NumberAnimation { target: fileOpen; property: "opacity"; duration: 100 }
}
]
}
FileBrowser {
id: imageFileBrowser
anchors.fill: root
Component.onCompleted: fileSelected.connect(content.openImage)
}
FileBrowser {
id: videoFileBrowser
anchors.fill: root
Component.onCompleted: fileSelected.connect(content.openVideo)
}
Component.onCompleted: {
fileOpen.openImage.connect(openImage)
fileOpen.openVideo.connect(openVideo)
fileOpen.openCamera.connect(openCamera)
fileOpen.close.connect(close)
}
function init() {
if (Qt.platform.os === "linux" || Qt.platform.os === "windows" || Qt.platform.os === "osx" || Qt.platform.os === "unix") {
if (Screen.desktopAvailableWidth > 1280) {
windowWidth = 1280
}
if (Screen.desktopAvailableHeight > 720) {
windowHeight = 720
}
}
height = windowHeight
width = windowWidth
console.log("[qmlvideofx] root.init")
console.log("Height: ", Screen.desktopAvailableHeight)
console.log("Width: ", Screen.desktopAvailableWidth)
console.log("Pixels per mm: ", Math.ceil(Screen.pixelDensity))
console.log("Orientation: ", Screen.orientation)
imageFileBrowser.folder = imagePath
videoFileBrowser.folder = videoPath
content.init()
performanceLoader.init()
if (fileName != "")
content.openVideo(fileName)
}
function qmlFramePainted() {
if (performanceLoader.item)
performanceLoader.item.qmlFramePainted()
}
function openImage() {
imageFileBrowser.show()
}
function openVideo() {
videoFileBrowser.show()
}
function openCamera() {
content.openCamera()
}
function close() {
content.init()
}
}

View File

@@ -47,17 +47,12 @@ Rectangle {
height: view.model.count * sliderHeight
property color lineColor: "black"
property real gripSize: 25
property real spacing: 10
property real sliderHeight: 40
property real spacing: 20
property real sliderHeight: 60
property ListModel model: ListModel { }
Rectangle {
anchors.fill: parent
color: "black"
opacity: 0.5
radius: 10
}
anchors.topMargin: 10
Component {
id: editDelegate
@@ -77,10 +72,10 @@ Rectangle {
bottom: parent.bottom
left: parent.left
}
font.pixelSize: 0.5 * parent.height
font.pixelSize: fontSize
horizontalAlignment: Text.AlignRight
verticalAlignment: Text.AlignVCenter
width: 150
width: 8 * fontSize
}
Slider {

View File

@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
@@ -39,91 +39,84 @@
**
****************************************************************************/
import QtQuick 2.0
import QtQuick 2.1
Rectangle {
id: root
color: "transparent"
radius: 5
property alias value: grip.value
property color fillColor: "white"
property color lineColor: "black"
property color gripColor: "white"
property real gripSize: 20
property color fillColor: "#14aaff"
property real gripSize: 40
property real gripTolerance: 3.0
property real increment: 0.1
property bool enabled: true
Rectangle {
anchors { left: parent.left; right: parent.right; verticalCenter: parent.verticalCenter }
height: 3
color: displayedColor(root.lineColor)
Rectangle {
anchors { fill: parent; margins: 1 }
color: root.fillColor
id: slider
anchors {
left: parent.left
right: parent.right
verticalCenter: parent.verticalCenter
}
}
height: 10
color: "transparent"
MouseArea {
anchors.fill: parent
enabled: root.enabled
onClicked: {
if (parent.width) {
var newValue = mouse.x / parent.width
if (Math.abs(newValue - parent.value) > parent.increment) {
if (newValue > parent.value)
parent.value = Math.min(1.0, parent.value + parent.increment)
else
parent.value = Math.max(0.0, parent.value - parent.increment)
BorderImage {
id: sliderbarimage
source: "qrc:/images/Slider_bar.png"
anchors { fill: parent; margins: 1 }
border.right: 5
border.left: 5
}
Rectangle {
height: parent.height -2
anchors.left: parent.left
anchors.right: grip.horizontalCenter
color: root.fillColor
radius: 3
border.width: 1
border.color: Qt.darker(color, 1.3)
opacity: 0.8
}
Rectangle {
id: grip
property real value: 0.5
x: (value * parent.width) - width/2
anchors.verticalCenter: parent.verticalCenter
width: root.gripTolerance * root.gripSize
height: width
radius: width/2
color: "transparent"
Image {
id: sliderhandleimage
source: "qrc:/images/Slider_handle.png"
anchors.centerIn: parent
}
MouseArea {
id: mouseArea
enabled: root.enabled
anchors.fill: parent
drag {
target: grip
axis: Drag.XAxis
minimumX: -parent.width/2
maximumX: root.width - parent.width/2
}
onPositionChanged: {
if (drag.active)
updatePosition()
}
onReleased: {
updatePosition()
}
function updatePosition() {
value = (grip.x + grip.width/2) / slider.width
}
}
}
}
Rectangle {
id: grip
property real value: 0.5
x: (value * parent.width) - width/2
anchors.verticalCenter: parent.verticalCenter
width: root.gripTolerance * root.gripSize
height: width
radius: width/2
color: "transparent"
MouseArea {
id: mouseArea
enabled: root.enabled
anchors.fill: parent
drag {
target: grip
axis: Drag.XAxis
minimumX: -parent.width/2
maximumX: root.width - parent.width/2
}
onPositionChanged: {
if (drag.active)
updatePosition()
}
onReleased: {
updatePosition()
}
function updatePosition() {
value = (grip.x + grip.width/2) / grip.parent.width
}
}
Rectangle {
anchors.centerIn: parent
width: root.gripSize
height: width
radius: width/2
color: root.gripColor
}
}
function displayedColor(c) {
var tint = Qt.rgba(c.r, c.g, c.b, 0.25)
return enabled ? c : Qt.tint(c, tint)
}
}

View File

@@ -1,186 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.0
Rectangle {
id: root
width: 900
height: 600
color: "grey"
property string fileName
property alias volume: content.volume
property bool perfMonitorsLogging: false
property bool perfMonitorsVisible: false
QtObject {
id: d
property real gripSize: 20
}
Rectangle {
id: inner
anchors.fill: parent
color: "grey"
Content {
id: content
anchors {
top: parent.top
bottom: parent.bottom
left: parent.left
right: effectSelectionPanel.left
margins: 5
}
gripSize: d.gripSize
width: 600
height: 600
}
Loader {
id: performanceLoader
function init() {
console.log("[qmlvideofx] performanceLoader.init logging " + root.perfMonitorsLogging + " visible " + root.perfMonitorsVisible)
var enabled = root.perfMonitorsLogging || root.perfMonitorsVisible
source = enabled ? "../performancemonitor/PerformanceItem.qml" : ""
}
onLoaded: {
item.parent = content
item.anchors.top = content.top
item.anchors.left = content.left
item.anchors.right = content.right
item.logging = root.perfMonitorsLogging
item.displayed = root.perfMonitorsVisible
item.init()
}
}
ParameterPanel {
id: parameterPanel
anchors {
left: parent.left
bottom: parent.bottom
right: effectSelectionPanel.left
margins: 20
}
gripSize: d.gripSize
}
EffectSelectionPanel {
id: effectSelectionPanel
anchors {
top: parent.top
bottom: fileOpen.top
right: parent.right
margins: 5
}
width: 300
itemHeight: 40
onEffectSourceChanged: {
content.effectSource = effectSource
parameterPanel.model = content.effect.parameters
}
}
FileOpen {
id: fileOpen
anchors {
right: parent.right
bottom: parent.bottom
margins: 5
}
width: effectSelectionPanel.width
height: 165
buttonHeight: 32
topMargin: 10
}
}
FileBrowser {
id: imageFileBrowser
anchors.fill: root
Component.onCompleted: fileSelected.connect(content.openImage)
}
FileBrowser {
id: videoFileBrowser
anchors.fill: root
Component.onCompleted: fileSelected.connect(content.openVideo)
}
Component.onCompleted: {
fileOpen.openImage.connect(openImage)
fileOpen.openVideo.connect(openVideo)
fileOpen.openCamera.connect(openCamera)
fileOpen.close.connect(close)
}
function init() {
console.log("[qmlvideofx] main.init")
imageFileBrowser.folder = imagePath
videoFileBrowser.folder = videoPath
content.init()
performanceLoader.init()
if (fileName != "")
content.openVideo(fileName)
}
function qmlFramePainted() {
if (performanceLoader.item)
performanceLoader.item.qmlFramePainted()
}
function openImage() {
imageFileBrowser.show()
}
function openVideo() {
videoFileBrowser.show()
}
function openCamera() {
content.openCamera()
}
function close() {
content.openImage("qrc:/images/qt-logo.png")
}
}

View File

@@ -1,408 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.0
Rectangle {
id: root
width: 640
height: 360
color: "grey"
property string fileName
property alias volume: content.volume
property bool perfMonitorsLogging: false
property bool perfMonitorsVisible: false
QtObject {
id: d
property bool dialogShown: (fileOpenContainer.state == "shown" ||
effectSelectionPanel.state == "shown" ||
videoFileBrowser.shown ||
imageFileBrowser.shown)
property real gripSize: 40
}
// Create ScreenSaver element via Loader, so this app will still run if the
// SystemInfo module is not available
Loader {
source: "DisableScreenSaver.qml"
}
Loader {
id: performanceLoader
Connections {
target: d
onDialogShownChanged:
if (performanceLoader.item)
performanceLoader.item.enabled = !d.dialogShown
ignoreUnknownSignals: true
}
function init() {
console.log("[qmlvideofx] performanceLoader.init logging " + root.perfMonitorsLogging + " visible " + root.perfMonitorsVisible)
var enabled = root.perfMonitorsLogging || root.perfMonitorsVisible
source = enabled ? "../performancemonitor/PerformanceItem.qml" : ""
}
onLoaded: {
item.parent = root
item.anchors.top = root.top
item.anchors.left = root.left
item.logging = root.perfMonitorsLogging
item.displayed = root.perfMonitorsVisible
item.init()
}
}
Rectangle {
id: inner
anchors.fill: parent
color: "grey"
Content {
id: content
anchors.fill: parent
gripSize: d.gripSize
onVideoFramePainted: performanceLoader.item.videoFramePainted()
}
ParameterPanel {
id: parameterPanel
anchors {
left: parent.left;
right: parent.right;
margins: 10
}
y: parent.height
gripSize: d.gripSize
states: [
State {
name: "shown"
PropertyChanges {
target: parameterPanel
y: parent.height - (parameterPanel.height + 10)
}
}
]
transitions: [
Transition {
from: "*"
to: "*"
NumberAnimation {
properties: "y"
easing.type: Easing.OutQuart
duration: 500
}
}
]
state: (enabled && !d.dialogShown) ? "shown" : "baseState"
}
EffectSelectionPanel {
id: effectSelectionPanel
anchors {
top: parent.top;
bottom: parameterPanel.top;
margins: 10
}
x: parent.width
width: parent.width - 40
opacity: 0.75
radius: 20
itemHeight: 50
states: [
State {
name: "shown"
PropertyChanges {
target: effectSelectionPanel
x: 20
}
}
]
transitions: [
Transition {
from: "*"
to: "*"
NumberAnimation {
properties: "x"
easing.type: Easing.OutQuart
duration: 500
}
}
]
onEffectSourceChanged: {
content.effectSource = effectSource
if (content.effect.parameters.count) {
parameterPanel.model = content.effect.parameters
parameterPanel.enabled = true
} else {
parameterPanel.enabled = false
}
}
onClicked: state = "baseState"
}
Rectangle {
id: fileOpenContainer
anchors {
top: parent.top
bottom: parameterPanel.top
margins: 10
}
x: -width
width: parent.width - 40
color: "transparent"
Column {
anchors.fill: parent
FileOpen {
id: fileOpen
color: "transparent"
width: parent.width
height: 200
opacity: 0.75
radius: 20
buttonHeight: 40
}
MouseArea {
width: parent.width
height: 250
onClicked: fileOpenContainer.state = "baseState"
}
}
states: [
State {
name: "shown"
PropertyChanges {
target: fileOpenContainer
x: 20
}
}
]
transitions: [
Transition {
from: "*"
to: "*"
NumberAnimation {
properties: "x"
easing.type: Easing.OutQuart
duration: 500
}
}
]
}
Rectangle {
id: splashScreen
anchors {
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.verticalCenter
}
width: 300
height: 200
radius: 0.1 * height
color: "white"
opacity: 0.9
border { color: "black"; width: 2 }
Text {
anchors {
fill: parent
margins: 5
}
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.pixelSize: 24
text: "Tap on left side to switch between sources.\n\nTap on right side to switch between effects."
wrapMode: Text.WordWrap
}
MouseArea {
anchors.fill: parent
onClicked: parent.state = "hidden"
}
states: [
State {
name: "hidden"
PropertyChanges {
target: splashScreen
opacity: 0.0
}
}
]
transitions: [
Transition {
from: "*"
to: "*"
NumberAnimation {
properties: "opacity"
easing.type: Easing.OutQuart
duration: 500
}
}
]
}
HintedMouseArea {
id: fileOpenMouseArea
anchors {
left: parent.left;
top: parent.top;
bottom: parameterPanel.top;
topMargin: 75
}
width: 100
onClicked: {
fileOpenMouseArea.hintEnabled = false
effectSelectionPanelMouseArea.hintEnabled = false
splashScreen.state = "hidden"
fileOpenContainer.state = "shown"
}
enabled: !d.dialogShown
}
HintedMouseArea {
id: effectSelectionPanelMouseArea
anchors {
right: parent.right;
top: parent.top;
bottom: parameterPanel.top;
topMargin: 75
}
width: 100
onClicked: {
fileOpenMouseArea.hintEnabled = false
effectSelectionPanelMouseArea.hintEnabled = false
splashScreen.state = "hidden"
effectSelectionPanel.state = "shown"
}
enabled: !d.dialogShown
}
Image {
source: "qrc:/images/close.png"
anchors {
top: parent.top
right: parent.right
margins: 5
}
MouseArea {
anchors.fill: parent
onClicked: Qt.quit()
}
}
}
Component.onCompleted: {
fileOpen.openImage.connect(openImage)
fileOpen.openVideo.connect(openVideo)
fileOpen.openCamera.connect(openCamera)
fileOpen.close.connect(close)
}
FileBrowser {
id: imageFileBrowser
anchors.fill: root
Component.onCompleted: fileSelected.connect(content.openImage)
}
FileBrowser {
id: videoFileBrowser
anchors.fill: root
Component.onCompleted: fileSelected.connect(content.openVideo)
}
// Called from main() once root properties have been set
function init() {
console.log("[qmlvideofx] main.init")
imageFileBrowser.folder = imagePath
videoFileBrowser.folder = videoPath
content.init()
performanceLoader.init()
if (fileName != "") {
fileOpenMouseArea.hintEnabled = false
effectSelectionPanelMouseArea.hintEnabled = false
splashScreen.state = "hidden"
content.openVideo(fileName)
}
}
function qmlFramePainted() {
if (performanceLoader.item)
performanceLoader.item.qmlFramePainted()
}
function openImage() {
fileOpenContainer.state = "baseState"
imageFileBrowser.show()
}
function openVideo() {
fileOpenContainer.state = "baseState"
videoFileBrowser.show()
}
function openCamera() {
fileOpenContainer.state = "baseState"
content.openCamera()
}
function close() {
fileOpenContainer.state = "baseState"
content.openImage("qrc:/images/qt-logo.png")
}
}

View File

@@ -10,10 +10,12 @@ RESOURCES += qmlvideofx.qrc
include($$PWD/../snippets/performancemonitor/performancemonitordeclarative.pri)
maemo6: {
DEFINES += SMALL_SCREEN_LAYOUT
DEFINES += SMALL_SCREEN_PHYSICAL
}
target.path = $$[QT_INSTALL_EXAMPLES]/multimedia/video/qmlvideofx
INSTALLS += target
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
OTHER_FILES += \
android/AndroidManifest.xml
QMAKE_INFO_PLIST = Info.plist

View File

@@ -1,10 +1,5 @@
<RCC>
<qresource prefix="/">
<file>images/close.png</file>
<file>images/folder.png</file>
<file>images/titlebar.png</file>
<file>images/titlebar.sci</file>
<file>images/up.png</file>
<file>images/qt-logo.png</file>
<file>qml/qmlvideofx/Button.qml</file>
<file>qml/qmlvideofx/Content.qml</file>
@@ -26,12 +21,10 @@
<file>qml/qmlvideofx/EffectPixelate.qml</file>
<file>qml/qmlvideofx/EffectPosterize.qml</file>
<file>qml/qmlvideofx/EffectRipple.qml</file>
<file>qml/qmlvideofx/EffectSelectionPanel.qml</file>
<file>qml/qmlvideofx/EffectSepia.qml</file>
<file>qml/qmlvideofx/EffectSharpen.qml</file>
<file>qml/qmlvideofx/EffectShockwave.qml</file>
<file>qml/qmlvideofx/EffectSobelEdgeDetection1.qml</file>
<file>qml/qmlvideofx/EffectSobelEdgeDetection2.qml</file>
<file>qml/qmlvideofx/EffectTiltShift.qml</file>
<file>qml/qmlvideofx/EffectToon.qml</file>
<file>qml/qmlvideofx/EffectVignette.qml</file>
@@ -40,8 +33,6 @@
<file>qml/qmlvideofx/FileBrowser.qml</file>
<file>qml/qmlvideofx/FileOpen.qml</file>
<file>qml/qmlvideofx/HintedMouseArea.qml</file>
<file>qml/qmlvideofx/main-largescreen.qml</file>
<file>qml/qmlvideofx/main-smallscreen.qml</file>
<file>qml/qmlvideofx/ParameterPanel.qml</file>
<file>qml/qmlvideofx/Slider.qml</file>
<file>shaders/billboard.fsh</file>
@@ -61,11 +52,21 @@
<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>
<file>images/Slider_handle.png</file>
<file>images/Slider_bar.png</file>
<file>qml/qmlvideofx/Curtain.qml</file>
<file>images/Triangle_bottom.png</file>
<file>images/Triangle_Top.png</file>
<file>images/Dropdown_arrows.png</file>
<file>images/icon_Folder.png</file>
<file>images/icon_BackArrow.png</file>
<file>qml/qmlvideofx/Main.qml</file>
<file>images/icon_Menu.png</file>
<file>qml/qmlvideofx/EffectSelectionList.qml</file>
</qresource>
</RCC>